# Docker Setup для Django + PostGIS + TileServer GL ## Структура проекта ``` . ├── dbapp/ # Django приложение │ ├── Dockerfile # Универсальный Dockerfile │ ├── entrypoint.sh # Скрипт запуска │ └── ... ├── nginx/ # Конфигурация Nginx (только для prod) │ └── conf.d/ │ └── default.conf ├── tiles/ # Тайлы для TileServer GL ├── docker-compose.yaml # Development окружение ├── docker-compose.prod.yaml # Production окружение ├── .env.dev # Переменные для development └── .env.prod # Переменные для production ``` ## Быстрый старт ### Development 1. Скопируйте файл окружения: ```bash cp .env.dev .env ``` 2. Запустите контейнеры: ```bash docker-compose up -d --build ``` 3. Создайте суперпользователя: ```bash docker-compose exec web python manage.py createsuperuser ``` 4. Приложение доступно: - Django: http://localhost:8000 - TileServer GL: http://localhost:8080 - PostgreSQL: localhost:5432 ### Production 1. Скопируйте и настройте файл окружения: ```bash cp .env.prod .env # Отредактируйте .env и измените SECRET_KEY, пароли и ALLOWED_HOSTS ``` 2. Запустите контейнеры: ```bash docker-compose -f docker-compose.prod.yaml up -d --build ``` 3. Создайте суперпользователя: ```bash docker-compose -f docker-compose.prod.yaml exec web python manage.py createsuperuser ``` 4. Приложение доступно: - Nginx: http://localhost (порт 80) - Django (напрямую): http://localhost:8000 - TileServer GL: http://localhost:8080 - PostgreSQL: localhost:5432 ## Основные команды ### Development ```bash # Запуск docker-compose up -d # Остановка docker-compose down # Просмотр логов docker-compose logs -f web # Выполнение команд Django docker-compose exec web python manage.py migrate docker-compose exec web python manage.py createsuperuser docker-compose exec web python manage.py shell # Пересборка после изменений в Dockerfile docker-compose up -d --build # Полная очистка (включая volumes) docker-compose down -v ``` ### Production ```bash # Запуск docker-compose -f docker-compose.prod.yaml up -d # Остановка docker-compose -f docker-compose.prod.yaml down # Просмотр логов docker-compose -f docker-compose.prod.yaml logs -f web # Выполнение команд Django docker-compose -f docker-compose.prod.yaml exec web python manage.py migrate docker-compose -f docker-compose.prod.yaml exec web python manage.py createsuperuser # Пересборка docker-compose -f docker-compose.prod.yaml up -d --build ``` ## Различия между Dev и Prod ### Development - Django development server (runserver) - DEBUG=True - Код монтируется как volume (изменения применяются сразу) - Без Nginx - Простые пароли (для локальной разработки) ### Production - Gunicorn WSGI server - DEBUG=False - Код копируется в образ (не монтируется) - Nginx как reverse proxy - Сильные пароли и SECRET_KEY - Сбор статики (collectstatic) - Оптимизированные настройки безопасности ## Переменные окружения ### Основные переменные (.env) ```bash # Django DEBUG=True/False ENVIRONMENT=development/production DJANGO_SETTINGS_MODULE=dbapp.settings.development/production SECRET_KEY=your-secret-key # Database DB_NAME=geodb DB_USER=geralt DB_PASSWORD=your-password DB_HOST=db DB_PORT=5432 # Allowed Hosts ALLOWED_HOSTS=localhost,127.0.0.1,yourdomain.com # Gunicorn (только для production) GUNICORN_WORKERS=3 GUNICORN_TIMEOUT=120 ``` ## Volumes ### Development - `postgres_data_dev` - данные PostgreSQL - `static_volume_dev` - статические файлы - `media_volume_dev` - медиа файлы - `logs_volume_dev` - логи - `./dbapp:/app` - код приложения (live reload) ### Production - `postgres_data_prod` - данные PostgreSQL - `static_volume_prod` - статические файлы - `media_volume_prod` - медиа файлы - `logs_volume_prod` - логи ## TileServer GL Для работы TileServer GL поместите ваши тайлы в директорию `./tiles/`. Пример структуры: ``` tiles/ ├── config.json └── your-tiles.mbtiles ``` ## Backup и восстановление БД ### Backup ```bash # Development docker-compose exec db pg_dump -U geralt geodb > backup.sql # Production docker-compose -f docker-compose.prod.yaml exec db pg_dump -U geralt geodb > backup.sql ``` ### Восстановление ```bash # Development docker-compose exec -T db psql -U geralt geodb < backup.sql # Production docker-compose -f docker-compose.prod.yaml exec -T db psql -U geralt geodb < backup.sql ``` ## Troubleshooting ### Проблемы с миграциями ```bash docker-compose exec web python manage.py migrate --fake-initial ``` ### Проблемы с правами доступа ```bash docker-compose exec -u root web chown -R app:app /app ``` ### Очистка всех данных ```bash docker-compose down -v docker system prune -a ``` ### Проверка логов ```bash # Все сервисы docker-compose logs -f # Конкретный сервис docker-compose logs -f web docker-compose logs -f db ``` ## Безопасность для Production 1. **Измените SECRET_KEY** - используйте длинный случайный ключ 2. **Измените пароли БД** - используйте сильные пароли 3. **Настройте ALLOWED_HOSTS** - укажите ваш домен 4. **Настройте SSL** - добавьте сертификаты в `nginx/ssl/` 5. **Ограничьте доступ к портам** - не открывайте порты БД наружу ## Генерация SECRET_KEY ```python python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())" ``` ## Мониторинг ### Проверка статуса контейнеров ```bash docker-compose ps ``` ### Использование ресурсов ```bash docker stats ``` ### Healthcheck ```bash curl http://localhost:8000/admin/ ```