Продакшен-развёртывание
Переменные окружения
Перед запуском в production убедитесь, что все критически важные переменные установлены:
env
# Обязательные
JWT_SECRET=<надёжный секрет, минимум 32 символа>
POSTGRES_PASSWORD=<пароль БД>
POSTGRES_SSL_MODE=require
# Режим работы
DEV_MODE=false
GIN_MODE=release
ENVIRONMENT=production
LOG_LEVEL=info
LOG_FORMAT=json
# CORS
CORS_ENABLED=true
CORS_ORIGINS=https://slozy.example.com
# Пул соединений
POSTGRES_MAX_OPEN_CONNS=25
POSTGRES_MAX_IDLE_CONNS=10Обязательные проверки
1. JWT Secret
В продакшене обязательно замените значение по умолчанию:
bash
# Генерация надёжного секрета
openssl rand -base64 48Установите в JWT_SECRET. Используйте одно и то же значение на всех репликах для валидации токенов.
2. Режим разработки
DEV_MODE=true включает:
- Логирование запросов с телом и заголовками
- CORS для всех источников
- Graceful shutdown с логами
- Панику при миграциях в случае ошибки
В production DEV_MODE=false отключает диагностическую информацию.
3. GIN_MODE
bash
GIN_MODE=releaseВ release-режиме gin логирует только ошибки, не выводит цветные логи, использует оптимизированный маршрутизатор.
4. SSL
SLOzy не терминирует SSL самостоятельно — используйте Nginx reverse proxy или Ingress с cert-manager.
Конфигурация Nginx в deployments/nginx/nginx.prod.conf:
nginx
server {
listen 443 ssl http2;
server_name slozy.example.com;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/key.pem;
location / {
proxy_pass http://slozy-web:8080;
proxy_set_header X-Forwarded-Proto $scheme;
}
}5. Health check
Эндпоинты для мониторинга:
bash
# Базовый health check
curl https://slozy.example.com/health
# {"status":"healthy","time":"2026-06-11T12:00:00Z"}
# Readiness probe
curl https://slozy.example.com/ready
# {"status":"ready","time":"2026-06-11T12:00:00Z"}6. Prometheus
Metrics доступны на /metrics (порт 9090). В production рекомендуется:
- Закрыть
/metricsза basic auth или использовать отдельный network namespace - Настроить
scrape_interval: 30sвprometheus/prometheus.yml - Установить
retention.time: 30d