Небольшая студия, восемь клиентских проектов на Rails от 7.1 до 8.1, деплой у всех разный: где-то Capistrano, где-то руками по SSH. Хочу привести всё к Kamal 2: на проект один VPS у хостера, приложение, Postgres как accessory, Thruster перед Puma. Пробный проект уже выкатил. Что обычно забывают на таком сетапе, пока не прилетело ночью?
Мой обычный список граблей для Kamal на одном сервере:
- бэкапы базы-accessory. Kamal её поднимет, но бэкапить не будет, и класть бэкап на тот же диск бессмысленно;
- в .kamal/secrets только ссылки на переменные окружения или менеджер паролей, а не сами значения: файл лежит в репозитории. Видел там пароль от базы открытым текстом, не надо так;
- диск: старые образы Kamal чистит сам, а логи Docker без ротации съедят место за пару месяцев;
- healthcheck: стандартный /up проверяет только, что приложение загрузилось, а не что оно видит базу.
Accessory для базы примерно такой:
accessories:
db:
image: postgres:17
host: 203.0.113.10
port: "spbrubyconf.ru:5432"
env:
secret:
- POSTGRES_PASSWORD
directories:
- data:/var/lib/postgresql/data
Про SSL: с ssl: true kamal-proxy получает сертификат сам, но только когда домен уже смотрит на сервер и открыт 80-й порт. Переключайте DNS клиента до первого деплоя, иначе он повиснет на выпуске сертификата.
Про бэкапы в точку, на пробном их не было. Сделал отдельный accessory с pg_dump по крону раз в сутки и выгрузкой в объектное хранилище в другом регионе, плюс ротацию логов Docker в daemon.json, max-size 50m. Деплой сейчас 3 минуты против 8 на Capistrano.
и восстановление из этого бэкапа хоть раз проверьте. бэкап, из которого ни разу не поднимались, ещё не бэкап