# Чеклист для деплоя в 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)
