# Чеклист для деплоя в Production ## Перед деплоем ### 1. Безопасность - [ ] Сгенерирован новый `SECRET_KEY` ```bash 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. База данных - [ ] Проверены все миграции: ```bash docker-compose -f docker-compose.prod.yaml exec web python manage.py showmigrations ``` - [ ] Настроен backup БД (cron job): ```bash 0 2 * * * cd /path/to/project && make backup ``` ### 3. Статические файлы - [ ] Проверена директория для статики: ```bash 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: ```bash docker-compose -f docker-compose.prod.yaml exec nginx nginx -t ``` - [ ] Настроены правильные домены в `nginx/conf.d/default.conf` ### 6. Docker - [ ] Проверен `.dockerignore` - исключены ненужные файлы - [ ] Проверен `.gitignore` - не коммитятся секреты ### 7. Переменные окружения Проверьте `.env` файл: ```bash # 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. Клонирование репозитория ```bash git clone cd ``` ### 2. Настройка окружения ```bash cp .env.prod .env nano .env # Отредактируйте все необходимые переменные ``` ### 3. Запуск контейнеров ```bash docker-compose -f docker-compose.prod.yaml up -d --build ``` ### 4. Проверка статуса ```bash docker-compose -f docker-compose.prod.yaml ps docker-compose -f docker-compose.prod.yaml logs -f ``` ### 5. Создание суперпользователя ```bash docker-compose -f docker-compose.prod.yaml exec web python manage.py createsuperuser ``` ### 6. Проверка работоспособности - [ ] Открыть http://yourdomain.com - [ ] Открыть http://yourdomain.com/admin - [ ] Проверить статические файлы - [ ] Проверить медиа файлы - [ ] Проверить TileServer GL: http://yourdomain.com:8080 ## После деплоя ### 1. Мониторинг - [ ] Настроить мониторинг логов: ```bash docker-compose -f docker-compose.prod.yaml logs -f web ``` - [ ] Проверить использование ресурсов: ```bash 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 ### Проблема: Контейнеры не запускаются ```bash # Проверить логи docker-compose -f docker-compose.prod.yaml logs # Проверить конфигурацию docker-compose -f docker-compose.prod.yaml config ``` ### Проблема: База данных недоступна ```bash # Проверить статус БД docker-compose -f docker-compose.prod.yaml exec db pg_isready -U geralt # Проверить логи БД docker-compose -f docker-compose.prod.yaml logs db ``` ### Проблема: Статические файлы не загружаются ```bash # Пересобрать статику 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 ```bash # Проверить, что 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 ``` ## Полезные команды ```bash # Перезапуск сервисов 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 ``` ## Контакты для поддержки - Документация: [DOCKER_README.md](DOCKER_README.md) - Быстрый старт: [QUICKSTART.md](QUICKSTART.md)