Последний раз, до перехода в большие компании на постоянный найм, я хостил свои проекты лет 7 назад: и хотя тогда все активно докеризировалось и уже почти везде начинали внедрять кубер, но маленькие проекты в маленьких компаниях все еще часто крутились на связках вида linux+nginx+mysql+php. И хотя я и умел докеризировать приложения - прод обычно разворачивался по старинке - без виртуальных контейнеров. Да и запускать в то время виртуальные контейнеры в проде по некоторым утверждением было антипаттерном из-за сильной потери в производительности, особенно учитывая, что все приложения тогда я писал на PHP, который производительностью и так не блистал.
Сейчас же я пошел ресерчить вместе с chatgpt, как и на чем мне лучше все развернуть так, чтобы это было относительно дешево и быстро в настройке, и gpt предложил мне несколько вариантов:
- так как я частично использую google-стек - заиспользовать инструменты гугла и для деплоя: GCP cloud run services / jobs + google cloud storage или внешнюю БД
- второй вариант - fly.io и другие похожие сервисы
- третий вариант - свой vps + dokku
Посчитав экономику, самый дешевый вариант под мои нагрузки получился третий - свой vps + dokku. С dokku я до этого не работал, и открыл для себя этот дивный новый мир.
dokku - это PaaS, который помогает менеджерить lifecycle приложения. По-факту, это набор bash-скриптов, который очень упрощают и оптимизируют работу с докером: одной командой можно создать выделенное окружение, задать туда энвы, настроить количество инстансов, которые будут запускаться в выделенных контейнерах. Не нужно составлять DNS вручную - они одной командой пробрасываются между контейнерами, автозаполняются и становятся доступными для вызова, что очень удобно при работе, например, с postgres.
Одна из вещей, которые мне нужно было захостить - это обработчик для tg-бота.
Упрощенно, это было запущено следующей цепочкой команд:
dokku apps:create tgbot - создание выделенного окружения для приложения
dokku plugin:install https://github.com/dokku/dokku-postgres.git
git remote add dokku-bot dokku@<VPS_IP>:tgbot
dokku config:set \
key=value \
...
dokku postgres:create mydb - создание БД
dokku postgres:link mydb tgbot - проброс DATABASE_URL из mydb в tgbot
dokku ps:scale tgbot worker=1 - запускаем 1 инстанс
dokku ps:report tgbot - проверяем статус
Дальше передеплой приложения выглядит следующим образом - мы вносим правки в код, коммитим и пушим в dokku-bot (git remote source, добавленный выше), и через git hook'и запускается магия автоматической пересборки наших контейнеров.
В ближайшее время настрою связку dokku с github actions, чтобы докручивать кастомные джобы и, например, иметь возможность гонять тесты перед тем, как пересобирать контейнеры с приложениями.
Но базово, для небольших тестовых проектов - кайф ❤️
dev notes | golang digest