Ошибки с БД на старте проекта потом стоят дороже всего:
плавающие миграции, разные схемы у команды, потерянные данные, “а у меня работает”.
Правильный подход простой - БД должна подниматься одинаково у всех:
локально, на CI и в проде.
Что делаем всегда:
1) Поднимаем БД через Docker (одинаковая среда для всех)
2) Храним все настройки в
.env3) Схема меняется только через миграции (Flyway / Liquibase / EF / Alembic)
4) Добавляем init-скрипты + seed данные (опционально)
5) Делаем healthcheck, чтобы сервис не стартовал раньше БД
6) Добавляем backup/restore команды (минимум — дамп)
Итог:
- один репозиторий = одна база
- любые изменения схемы воспроизводимы
- новый разработчик стартует за 3 минуты
1) Создай .env (пример)
cat > .env << 'EOF'
POSTGRES_DB=app
POSTGRES_USER=app
POSTGRES_PASSWORD=app123
POSTGRES_PORT=5432
EOF
# 2) docker-compose.yml для Postgres + healthcheck
cat > docker-compose.yml << 'EOF'
services:
postgres:
image: postgres:16
container_name: app-postgres
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
ports:
- "${POSTGRES_PORT}:5432"
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 5s
timeout: 3s
retries: 20
volumes:
pgdata:
EOF
3) Запуск
docker compose up -d
4) Проверка
docker compose ps
5) Дамп (на всякий)
docker exec -t app-postgres pg_dump -U app app > backup.sql
6) Восстановление
cat backup.sql | docker exec -i app-postgres psql -U app -d app