Files
dbstorage/DEPLOYMENT_CHECKLIST.md

7.0 KiB
Raw Blame History

Чеклист для деплоя в Production

Перед деплоем

1. Безопасность

  • Сгенерирован новый SECRET_KEY

    python generate_secret_key.py
    
  • Изменены все пароли в .env:

    • DB_PASSWORD - сильный пароль для PostgreSQL
    • POSTGRES_PASSWORD - должен совпадать с DB_PASSWORD
  • Настроен ALLOWED_HOSTS в .env:

    ALLOWED_HOSTS=yourdomain.com,www.yourdomain.com
    
  • DEBUG=False в .env

2. База данных

  • Проверены все миграции:

    docker-compose -f docker-compose.prod.yaml exec web python manage.py showmigrations
    
  • Настроен backup БД (cron job):

    0 2 * * * cd /path/to/project && make backup
    

3. Статические файлы

  • Проверена директория для статики:
    docker-compose -f docker-compose.prod.yaml exec web python manage.py collectstatic --noinput
    

4. SSL/HTTPS (опционально, но рекомендуется)

  • Получены SSL сертификаты (Let's Encrypt, Certbot)
  • Сертификаты размещены в nginx/ssl/
  • Переименован nginx/conf.d/ssl.conf.example в ssl.conf
  • Обновлен server_name в ssl.conf

5. Nginx

  • Проверена конфигурация Nginx:

    docker-compose -f docker-compose.prod.yaml exec nginx nginx -t
    
  • Настроены правильные домены в nginx/conf.d/default.conf

6. Docker

  • Проверен .dockerignore - исключены ненужные файлы
  • Проверен .gitignore - не коммитятся секреты

7. Переменные окружения

Проверьте .env файл:

# Django
DEBUG=False
ENVIRONMENT=production
DJANGO_SETTINGS_MODULE=dbapp.settings.production
SECRET_KEY=<ваш-длинный-секретный-ключ>

# Database
DB_NAME=geodb
DB_USER=geralt
DB_PASSWORD=<сильный-пароль>
DB_HOST=db
DB_PORT=5432

# Allowed Hosts
ALLOWED_HOSTS=yourdomain.com,www.yourdomain.com

# PostgreSQL
POSTGRES_DB=geodb
POSTGRES_USER=geralt
POSTGRES_PASSWORD=<тот-же-сильный-пароль>

# Gunicorn
GUNICORN_WORKERS=3
GUNICORN_TIMEOUT=120

Деплой

1. Клонирование репозитория

git clone <your-repo-url>
cd <project-directory>

2. Настройка окружения

cp .env.prod .env
nano .env  # Отредактируйте все необходимые переменные

3. Запуск контейнеров

docker-compose -f docker-compose.prod.yaml up -d --build

4. Проверка статуса

docker-compose -f docker-compose.prod.yaml ps
docker-compose -f docker-compose.prod.yaml logs -f

5. Создание суперпользователя

docker-compose -f docker-compose.prod.yaml exec web python manage.py createsuperuser

6. Проверка работоспособности

После деплоя

1. Мониторинг

  • Настроить мониторинг логов:

    docker-compose -f docker-compose.prod.yaml logs -f web
    
  • Проверить использование ресурсов:

    docker stats
    

2. Backup

  • Настроить автоматический backup БД
  • Проверить восстановление из backup
  • Настроить backup медиа файлов

3. Обновления

  • Документировать процесс обновления
  • Тестировать обновления на dev окружении

4. Безопасность

  • Настроить firewall (UFW, iptables)

  • Ограничить доступ к портам:

    • Открыть: 80, 443
    • Закрыть: 5432, 8000 (доступ только внутри Docker сети)
  • Настроить fail2ban (опционально)

5. Производительность

  • Настроить кэширование (Redis, Memcached)
  • Оптимизировать количество Gunicorn workers
  • Настроить CDN для статики (опционально)

Troubleshooting

Проблема: Контейнеры не запускаются

# Проверить логи
docker-compose -f docker-compose.prod.yaml logs

# Проверить конфигурацию
docker-compose -f docker-compose.prod.yaml config

Проблема: База данных недоступна

# Проверить статус БД
docker-compose -f docker-compose.prod.yaml exec db pg_isready -U geralt

# Проверить логи БД
docker-compose -f docker-compose.prod.yaml logs db

Проблема: Статические файлы не загружаются

# Пересобрать статику
docker-compose -f docker-compose.prod.yaml exec web python manage.py collectstatic --noinput

# Проверить права доступа
docker-compose -f docker-compose.prod.yaml exec web ls -la /app/staticfiles

Проблема: 502 Bad Gateway

# Проверить, что Django запущен
docker-compose -f docker-compose.prod.yaml ps web

# Проверить логи Gunicorn
docker-compose -f docker-compose.prod.yaml logs web

# Проверить конфигурацию Nginx
docker-compose -f docker-compose.prod.yaml exec nginx nginx -t

Полезные команды

# Перезапуск сервисов
docker-compose -f docker-compose.prod.yaml restart web
docker-compose -f docker-compose.prod.yaml restart nginx

# Обновление кода
git pull
docker-compose -f docker-compose.prod.yaml up -d --build

# Backup БД
docker-compose -f docker-compose.prod.yaml exec db pg_dump -U geralt geodb > backup.sql

# Восстановление БД
docker-compose -f docker-compose.prod.yaml exec -T db psql -U geralt geodb < backup.sql

# Просмотр логов
docker-compose -f docker-compose.prod.yaml logs -f --tail=100 web

# Очистка старых образов
docker system prune -a

Контакты для поддержки