308 lines
8.9 KiB
Markdown
308 lines
8.9 KiB
Markdown
# Docker Setup - Полное руководство
|
||
|
||
## 📋 Обзор
|
||
|
||
Этот проект использует Docker для развертывания Django приложения с PostGIS и TileServer GL.
|
||
|
||
**Основные компоненты:**
|
||
- Django 5.2 с PostGIS
|
||
- PostgreSQL 17 с расширением PostGIS 3.4
|
||
- TileServer GL для работы с картографическими тайлами
|
||
- Nginx (только для production)
|
||
- Gunicorn WSGI сервер (production)
|
||
|
||
## 🚀 Быстрый старт
|
||
|
||
### Development
|
||
```bash
|
||
cp .env.dev .env
|
||
make dev-up
|
||
make createsuperuser
|
||
```
|
||
Откройте http://localhost:8000
|
||
|
||
### Production
|
||
```bash
|
||
cp .env.prod .env
|
||
# Отредактируйте .env (SECRET_KEY, пароли, домены)
|
||
make prod-up
|
||
make prod-createsuperuser
|
||
```
|
||
Откройте http://yourdomain.com
|
||
|
||
## 📁 Структура файлов
|
||
|
||
```
|
||
.
|
||
├── dbapp/ # Django приложение
|
||
│ ├── Dockerfile # Универсальный Dockerfile
|
||
│ ├── entrypoint.sh # Скрипт инициализации
|
||
│ ├── .dockerignore # Исключения для Docker
|
||
│ └── ...
|
||
│
|
||
├── nginx/ # Nginx конфигурация (prod)
|
||
│ ├── conf.d/
|
||
│ │ ├── default.conf # HTTP конфигурация
|
||
│ │ └── ssl.conf.example # HTTPS конфигурация (пример)
|
||
│ └── ssl/ # SSL сертификаты
|
||
│
|
||
├── tiles/ # Тайлы для TileServer GL
|
||
│ ├── README.md # Инструкция по настройке
|
||
│ ├── config.json.example # Пример конфигурации
|
||
│ └── .gitignore
|
||
│
|
||
├── docker-compose.yaml # Development окружение
|
||
├── docker-compose.prod.yaml # Production окружение
|
||
│
|
||
├── .env.dev # Переменные для dev
|
||
├── .env.prod # Переменные для prod (шаблон)
|
||
│
|
||
├── Makefile # Удобные команды
|
||
├── generate_secret_key.py # Генератор SECRET_KEY
|
||
│
|
||
└── Документация:
|
||
├── QUICKSTART.md # Быстрый старт
|
||
├── DOCKER_README.md # Подробная документация
|
||
├── DEPLOYMENT_CHECKLIST.md # Чеклист для деплоя
|
||
└── DOCKER_SETUP.md # Этот файл
|
||
```
|
||
|
||
## 🔧 Конфигурация
|
||
|
||
### Dockerfile
|
||
|
||
**Один универсальный Dockerfile** для dev и prod:
|
||
- Multi-stage build для оптимизации размера
|
||
- Установка GDAL, PostGIS зависимостей
|
||
- Использование uv для управления зависимостями
|
||
- Non-root пользователь для безопасности
|
||
- Healthcheck для мониторинга
|
||
|
||
### entrypoint.sh
|
||
|
||
Скрипт автоматически:
|
||
- Ждет готовности PostgreSQL
|
||
- Выполняет миграции
|
||
- Собирает статику (только prod)
|
||
- Запускает runserver (dev) или Gunicorn (prod)
|
||
|
||
Поведение определяется переменной `ENVIRONMENT`:
|
||
- `development` → Django development server
|
||
- `production` → Gunicorn WSGI server
|
||
|
||
### docker-compose.yaml (Development)
|
||
|
||
**Сервисы:**
|
||
- `db` - PostgreSQL с PostGIS
|
||
- `web` - Django приложение
|
||
- `tileserver` - TileServer GL
|
||
|
||
**Особенности:**
|
||
- Код монтируется как volume (live reload)
|
||
- DEBUG=True
|
||
- Django development server
|
||
- Простые пароли для локальной разработки
|
||
|
||
### docker-compose.prod.yaml (Production)
|
||
|
||
**Сервисы:**
|
||
- `db` - PostgreSQL с PostGIS
|
||
- `web` - Django с Gunicorn
|
||
- `tileserver` - TileServer GL
|
||
- `nginx` - Reverse proxy
|
||
|
||
**Особенности:**
|
||
- Код копируется в образ (не монтируется)
|
||
- DEBUG=False
|
||
- Gunicorn WSGI server
|
||
- Nginx для статики и проксирования
|
||
- Сильные пароли из .env
|
||
- Сбор статики (collectstatic)
|
||
|
||
## 🔐 Безопасность
|
||
|
||
### Для Production обязательно:
|
||
|
||
1. **Сгенерируйте SECRET_KEY:**
|
||
```bash
|
||
python generate_secret_key.py
|
||
```
|
||
|
||
2. **Измените пароли БД** в `.env`
|
||
|
||
3. **Настройте ALLOWED_HOSTS:**
|
||
```
|
||
ALLOWED_HOSTS=yourdomain.com,www.yourdomain.com
|
||
```
|
||
|
||
4. **Настройте SSL/HTTPS** (рекомендуется):
|
||
- Получите сертификаты (Let's Encrypt)
|
||
- Поместите в `nginx/ssl/`
|
||
- Используйте `nginx/conf.d/ssl.conf.example`
|
||
|
||
5. **Ограничьте доступ к портам:**
|
||
- Открыть: 80, 443
|
||
- Закрыть: 5432, 8000
|
||
|
||
## 📊 Мониторинг
|
||
|
||
### Логи
|
||
```bash
|
||
# Development
|
||
make dev-logs
|
||
|
||
# Production
|
||
make prod-logs
|
||
|
||
# Конкретный сервис
|
||
docker-compose logs -f web
|
||
docker-compose logs -f db
|
||
```
|
||
|
||
### Статус
|
||
```bash
|
||
make status # Development
|
||
make prod-status # Production
|
||
docker stats # Использование ресурсов
|
||
```
|
||
|
||
### Healthcheck
|
||
```bash
|
||
curl http://localhost:8000/admin/
|
||
```
|
||
|
||
## 💾 Backup и восстановление
|
||
|
||
### Backup
|
||
```bash
|
||
make backup
|
||
# или
|
||
docker-compose exec db pg_dump -U geralt geodb > backup_$(date +%Y%m%d).sql
|
||
```
|
||
|
||
### Восстановление
|
||
```bash
|
||
docker-compose exec -T db psql -U geralt geodb < backup.sql
|
||
```
|
||
|
||
### Автоматический backup (cron)
|
||
```bash
|
||
# Добавьте в crontab
|
||
0 2 * * * cd /path/to/project && make backup
|
||
```
|
||
|
||
## 🔄 Обновление
|
||
|
||
### Development
|
||
```bash
|
||
git pull
|
||
make dev-build
|
||
```
|
||
|
||
### Production
|
||
```bash
|
||
git pull
|
||
make prod-build
|
||
make prod-migrate
|
||
```
|
||
|
||
## 🗺️ TileServer GL
|
||
|
||
Поместите `.mbtiles` файлы в директорию `tiles/`:
|
||
|
||
```bash
|
||
tiles/
|
||
├── world.mbtiles
|
||
└── satellite.mbtiles
|
||
```
|
||
|
||
Доступ: http://localhost:8080
|
||
|
||
Подробнее: [tiles/README.md](tiles/README.md)
|
||
|
||
## 🛠️ Makefile команды
|
||
|
||
### Development
|
||
```bash
|
||
make dev-up # Запустить
|
||
make dev-down # Остановить
|
||
make dev-build # Пересобрать
|
||
make dev-logs # Логи
|
||
make dev-restart # Перезапустить web
|
||
```
|
||
|
||
### Production
|
||
```bash
|
||
make prod-up # Запустить
|
||
make prod-down # Остановить
|
||
make prod-build # Пересобрать
|
||
make prod-logs # Логи
|
||
make prod-restart # Перезапустить web
|
||
```
|
||
|
||
### Django
|
||
```bash
|
||
make shell # Django shell
|
||
make migrate # Миграции
|
||
make makemigrations # Создать миграции
|
||
make createsuperuser # Создать суперпользователя
|
||
make collectstatic # Собрать статику
|
||
```
|
||
|
||
### Утилиты
|
||
```bash
|
||
make backup # Backup БД
|
||
make status # Статус контейнеров
|
||
make clean # Очистка (с volumes)
|
||
make clean-all # Полная очистка
|
||
```
|
||
|
||
## 📚 Дополнительная документация
|
||
|
||
- **[QUICKSTART.md](QUICKSTART.md)** - Быстрый старт для нетерпеливых
|
||
- **[DOCKER_README.md](DOCKER_README.md)** - Подробная документация по Docker
|
||
- **[DEPLOYMENT_CHECKLIST.md](DEPLOYMENT_CHECKLIST.md)** - Чеклист для деплоя
|
||
- **[tiles/README.md](tiles/README.md)** - Настройка TileServer GL
|
||
|
||
## ❓ Troubleshooting
|
||
|
||
### Контейнеры не запускаются
|
||
```bash
|
||
docker-compose logs
|
||
docker-compose config
|
||
```
|
||
|
||
### База данных недоступна
|
||
```bash
|
||
docker-compose exec db pg_isready -U geralt
|
||
docker-compose logs db
|
||
```
|
||
|
||
### Статические файлы не загружаются
|
||
```bash
|
||
docker-compose exec web python manage.py collectstatic --noinput
|
||
docker-compose exec web ls -la /app/staticfiles
|
||
```
|
||
|
||
### 502 Bad Gateway
|
||
```bash
|
||
docker-compose ps web
|
||
docker-compose logs web
|
||
docker-compose exec nginx nginx -t
|
||
```
|
||
|
||
## 🎯 Следующие шаги
|
||
|
||
1. ✅ Прочитайте [QUICKSTART.md](QUICKSTART.md)
|
||
2. ✅ Запустите development окружение
|
||
3. ✅ Изучите [DEPLOYMENT_CHECKLIST.md](DEPLOYMENT_CHECKLIST.md) перед деплоем
|
||
4. ✅ Настройте TileServer GL ([tiles/README.md](tiles/README.md))
|
||
5. ✅ Настройте SSL для production
|
||
|
||
## 📞 Поддержка
|
||
|
||
При возникновении проблем:
|
||
1. Проверьте логи: `make dev-logs` или `make prod-logs`
|
||
2. Изучите документацию в этой директории
|
||
3. Проверьте [DOCKER_README.md](DOCKER_README.md) для подробностей
|