6.7 KiB
6.7 KiB
Чеклист для деплоя в Production
Перед деплоем
1. Безопасность
-
Сгенерирован новый
SECRET_KEYpython generate_secret_key.py -
Изменены все пароли в
.env:DB_PASSWORD- сильный пароль для PostgreSQLPOSTGRES_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. Проверка работоспособности
- Открыть http://yourdomain.com
- Открыть http://yourdomain.com/admin
- Проверить статические файлы
- Проверить медиа файлы
- Проверить TileServer GL: http://yourdomain.com:8080
После деплоя
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
Контакты для поддержки
- Документация: DOCKER_README.md
- Быстрый старт: QUICKSTART.md