# 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) для подробностей