250 lines
7.0 KiB
Markdown
250 lines
7.0 KiB
Markdown
# Чеклист для деплоя в 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 <your-repo-url>
|
||
cd <project-directory>
|
||
```
|
||
|
||
### 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)
|