Корректно ли я подобрал технологии для простого веб сервера?
Здраствуйте!
Есть задача: развернуть на VM простые фронт, бек и базу данных. При этом:
- бд должна иметь публичный ip
- фронт и бек настроить автодеплой (чтобы из мастер ветки лилось в прод)
- чтобы бек и фронт были в контейнерах и чтобы к беку можно было обращаться через url через Postman.
Вижу сейчас последовательность работы вижу так:
- бд кладу просто в отдельный готовый кластер, который представляет для баз данных владелец хостинга), у нее и приватный и публичный ip есть
- арендую vm, ставлю ее в 1 подсети с кластром бд, в vm устанавливаю докер, докер compose и nginx, заворачиваю фронт и бек в докер контейнеры, пушу контейнеры в докер hub. Затем на сервере пишу yaml файл для докер compose (сервисы: nginx, front и back), по ссылке с докер хаб беру контейнеры, запускаю.
Вопросы:
1) Правильно ли я вижу последовательность и нужно ли что-то еще кроме nginx и докера?
2) Как формируется url для бека, если я хочу к нему из вне обращаться? (если важно, хостинг selectel)
3) При помощи чего можно в данном случае организовать автодеплой (тут контейнры деплоятся)? Я понимаю как например соединить Google App Engine и bitbucket, по сути пишешь пайплайн, в битбакете настраиваешь деплой в настройках со ссылкой какой именно сервис обновлять и готово. А тут как? всегда сначала создаем контейнер у себя, потом его пушим, а он уже деплоится на сервер автоматически или тут другая логика?
1) Верно, домен с https. И далее уже в nginx'e будет, / -> фронт, /api -> бэк. К примеру вот так.
2) Правильной настройкой nginx и обратным прокси на контейнер с бэком.
3) Можно воспользоваться бесплатным CI, к примеру Gitlab CI/CD или Github Actions. Пушить образ в приватный registry. Дальше скрипт идет на сервер и меняет докер образ. Сервер с Docker соответственно должен иметь доступ к этому приватному registry. Можешь посмотреть на такой пример https://stackoverflow.com/questions/26423515/how-t.... Или можешь покопать в сторону решений, как Flux или ArgoCD. Но k8s наверное уже будет overhead.