Compose для прода на одном сервере
Вопрос
Ты поднимаешь приложение, базу и Redis на одном сервере через Compose. Что сделаешь, чтобы это было надёжно?
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Точные версии образов, а не `latest`
Тома для данных, бэкапы средствами СУБД, никаких `down -v`
Не публиковать порты базы и Redis, наружу только reverse proxy на 80/443
healthcheck и `depends_on: condition: service_healthy`, приложение умеет переподключаться
`restart: unless-stopped`, лимиты памяти и CPU, ротация логов
Секреты в `.env` с правами 600 вне репозитория или `secrets:`, проверка `docker compose config`
Что могут спросить следом
- Как обновить приложение с минимальным простоем?
- Как сделать бэкап базы из compose?
- Где хранить
.env?
Разбор
Образы закрепляю точными версиями, чтобы на сервере крутилось ровно то, что проверено. Данные базы и Redis в именованных томах, бэкап базы pg_dump по таймеру с выгрузкой за пределы сервера и проверкой восстановления. Порты базы и Redis не публикую вообще: приложение ходит к ним по внутренней сети по именам сервисов, а наружу смотрит только reverse proxy на 80 и 443. У базы healthcheck, у приложения depends_on с service_healthy и повторы подключения в коде. Всем сервисам restart: unless-stopped, лимиты памяти, ротация json-логов max-size и max-file. Секреты в .env с правами 600, которого нет в git, или через secrets:. Обновление: docker compose pull, затем up -d для конкретного сервиса; для нулевого простоя нужен второй экземпляр за прокси или схема blue-green. И держу в голове, что down -v удаляет данные.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.