Delgus
@Delgus

Какие есть инструменты чтобы автоматизировать деплой приложений с Docker и Nginx?

У меня есть VPS, там nginx я поставил. Часто приходится поднимать небольшие веб-приложения и всяких ботов, эти приложения тестовые, комерчески нигде не используются, нагрузки особой не имеют, этот сервак просто для демок. И так как их количество растет, думаю над автоматизацией процесса.

Когда я хочу например задеплоить бота мой процесс такой.
1. Сбилдил образ -> запушил в registry. Например в docker.io
2. Запускаю образ на сервере с нужными переменными окружения на определенном порту
docker run --name=jokebot -d -e VK_ACCESS_TOKEN=<token> -p <deploy_port>:80 delgus/jokebot

Например выберу свободный порт 5000 и получается что контейнер слушает на 127.0.0.1:5000
3. Собственно настройка nginx. Добавляю конфиг для нового поддомена (разворачиваю каждое новое приложение на новом поддомене моего домена )
в sites-available
server {
        listen 80;
        listen 443 ssl http2;
        server_name sub.domain.com;
        ssl_certificate /etc/letsencrypt/live/domain.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/domain.com/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/domain.com/chain.pem;

        ssl_stapling on;
        ssl_stapling_verify on;
        resolver 127.0.0.1 8.8.8.8;

        location / {
                proxy_pass http://127.0.0.1:5000;
        }

        location /.well-known {
                  root /var/www/letsencrypt;
        }
}


потом создаю символическую ссылку на sites-enabled и делаю service nginx reload
потом иду переделывать серт через letsencrypt bot.

При таком способе деплоя возникают проблемы.
1. одна и та же работа по созданию поддомена (в теории можно написать скрипт который сам будет это делать, но возможно есть уже готовое решение)
2. мне не нравится что можно в обход nginx открыть приложение по адресу my_server_ip:5000.
3. когда приложений будет больше я запутаюсь в портах которые отдал разным приложениям.

Поэтому я начинаю задумываться о каком то легком средстве для оркестрации контейнеров, ну или о каком-то более удобном способе организации всего это.
Приложения в контейнерах в основном написаны на golang. Nginx я использую просто как прокси получается.
Насколько плох мой метод деплоя? есть ли лучшие варианты?
На моем серваке всего 1 Гб оперативы потому что моим приложухам много и не надо, поэтому не вижу смысла в каких то громоздких вещах типа kubernetes и docker swarm.

Что посоветуете?

PS. сильно не ругайтесь, я back а не devops
  • Вопрос задан
  • 194 просмотра
Решения вопроса 2
@q2digger
сисадмин
Вам нужен nginx-proxy , вот один из самых клевых. https://hub.docker.com/r/jwilder/nginx-proxy/dockerfile
Вы просто указываете при запуске контейнера VIRTUAL_HOST и VIRTUAL_PORT и оно само прописывается где надо и просто начинает проксироваться на запущенный контейнер.
Ответ написан
@Badbuka
Nomad + consul + fabio. Я бы делал так. Стильно модно молодежно... Есть презенташка на ютубе от хашикорпа, там вся тема раскрыта. Поcмотрите в эту сторону...
Ps по ресурсам не уверен, что поместитесь, но если уж делать что то то делать нормально)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
1. Сбилдил образ -> запушил в registry. Например в docker.io
2. Запускаю образ на сервере с нужными переменными окружения на определенном порту
3. ....
Обыкновенный процесс деплоя из области CI/CD. Можно готовый образ сразу отправлять на целевой сервер и там его запускать как душе угодно. Кто-то пишет небольшую политику для Ansible, которая всё делает.
Ответ написан
@flcae
Привет, как с тобой связаться можно?
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы