Я очень долгое время (наверное последние лет 7) свои pet-проекты держу на обычной VPS с Docker Compose. И это, если честно, вполне рабочий вариант. Особенно когда проектов немного и ты один и разработчик, и DevOps, и человек, который потом ночью чинит прод 😄
Для меня самый простой деплой всегда выглядел так:
* заходишь на сервер
* git pull / клонируешь репу
* docker compose down
* docker compose up -d
Максимально прямолинейно. Без Kubernetes, GitOps и вот этого всего «enterprise-ready».
С бекапами, правда, история всегда была хуже. Периодически вспоминал, что “вообще-то данные неплохо бы сохранить”, заходил руками, запускал заранее подготовленные скрипты, скачивал архивы к себе.
Не очень удобно, но жить можно.
И самое смешное — каждый раз думаю: «Надо наконец автоматизировать бекапы…». А потом проходит полгода до следующего “ой”.
Первый заход в сторону нормального CI/CD был через GitHub Actions. Идея нравилась: пушнул — всё само раскатилось. Но на практике периодически что-то отваливалось, особенно когда начинаешь городить SSH, секреты, кастомные сценарии деплоя и прочие радости жизни.
В итоге сейчас пересел на
Coolify — это такой self-hosted Heroku/PaaS.
И вот это прям очень зашло.
Подключил GitHub, нажал пару кнопок — и оно реально деплоит. Есть UI, переменные окружения, логи, шаблоны сервисов, базы, SSL, всё из коробки. Для pet-проектов ощущается как какой-то luxury DevOps 😄
Особенно после многих лет формата:
“так, а в каком контейнере сейчас вообще проблема…”
Но, конечно, без приключений не обошлось. Несмотря на включённый кэш сборки, он у меня почему-то каждый раз пересобирает вообще всё с нуля. Даже если поменялся условный env или compose-конфиг, а код не трогал.
В итоге сейчас, похоже, приду к более взрослой схеме:
* CI отдельно собирает image
* пушит в registry
* а Coolify уже просто делает deployment готового образа
Потому что когда проект начинает собираться как frontend на Electron, ты очень быстро начинаешь ценить кэширование слоев 😄
Вообще забавно наблюдать, как со временем pet-проекты постепенно эволюционируют: сначала это “лишь бы работало”, потом “лишь бы не упало”, а потом внезапно ловишь себя на мысли, что обсуждаешь стратегии деплоя и disaster recovery для сервиса с тремя пользователями 😄