@alekssamos
Программист любитель

Правильно создать архитектуру?

Никогда раньше серьёзные масштабируемые программы не делал, просто грубо говоря в блокноте файл написал, сохранил, запустил, поэтому сейчас возникли вопросы.
Мой проект по описанию фотографий вырос и я решил его переделать, полностью с нуля переписать.
Там такие составляющие

1. Mysql (или другая) база данных;
2. Python Flask + Nginx, http JSON API, возможно будут использоваться DLib, TensorFlow и другие библиотеки (основа всего);
3. Python Flask + Nginx, веб сайт/ веб интерфейс, определённый домен, порт 80, порт 443 SSL сертификат;
4. Python бот Telegram (один файл, long poll) tg_bot.py;
5. Python бот VK (один файл, long poll) vk_bot.py;
6. Python бот Discord (один файл, long poll) discord_bot.py;
7. Возможны будут ещё другие боты.

Сейчас это просто файлы, лежащие в одной папке и запускающиеся через Supervisor.

Сейчас у меня свалено всё в одну папку, functions.py лежит на поверхности и во всех состовляющих (с 3 по 7) я его импортирую import functions и использую общие функции типа functions.recognize("file.jpg").

Хочу сделать всё красиво, через Docker. Особенно об этом задумался, когда переезжал с одного сервера на другой и вручную всё устанавливал, настраивал и прописывал новые пути и адреса.
Как правильно?
В одном контейнере будет крутится 1, 2, 3, а в другом все 4, 5, 6, 7
и каждый элемент с 3 по 7 будет взаимодействовать с 2 по http API?
Или здесь вообще Docker. не нужен, делается как-то по-другому?
Пожалуйста, подробно объясните, как построить архитектуру данного проекта грамотно, правильно?
  • Вопрос задан
  • 129 просмотров
Пригласить эксперта
Ответы на вопрос 2
kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn
1 сервис = 1 контейнер (docker). При изменение одного сервиса тебе нет нужды пересоздавать остальные.
Базу данных в docker не нужно, в идеале на отдельный VPS и забыть.
Nginx без разницы где и как будет - конфиг что так что так подключается заранее написанный для нужных сервисов. В целом ситуация похожая с БД - один раз установил/настроил и забыл.
Ответ написан
@KoreanGuy
Вам нужно думать какие сервисы имеет смысл использовать в своем отдельном контейнере, а какие сервисы имеет смысл сгруппировать. Например, база данных и nginx не имеют ничего общего друг с другом. Если вам вдруг понадобится скейлить базу, а вы засунули её в один контейнер с nginx, то добавление нового контейнера одновременно добавит вам и новую базу, и nginx.

Для того чтобы настроить взаимодействие контейнеров (сервисов) друг с другом используйте docker compose.

А вообще сейчас настало время облаков. Просто используйте AWS и не парьтесь. Там и базу вам сделают с репликацией и бэкапами, и от Nginx сможете избавиться, и вообще там есть абсолютно всё. Потраться время на изучение AWS и тогда сможете сконцентрироваться на коде, вместо всех заморочек с деплоем и поддержкой.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы