Files
dbstorage/DOCKER_SETUP.md

9.2 KiB
Raw Blame History

Docker Setup - Полное руководство

📋 Обзор

Этот проект использует Docker для развертывания Django приложения с PostGIS и TileServer GL.

Основные компоненты:

  • Django 5.2 с PostGIS
  • PostgreSQL 17 с расширением PostGIS 3.4
  • TileServer GL для работы с картографическими тайлами
  • Nginx (только для production)
  • Gunicorn WSGI сервер (production)

🚀 Быстрый старт

Development

cp .env.dev .env
make dev-up
make createsuperuser

Откройте http://localhost:8000

Production

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:

    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

📊 Мониторинг

Логи

# Development
make dev-logs

# Production
make prod-logs

# Конкретный сервис
docker-compose logs -f web
docker-compose logs -f db

Статус

make status              # Development
make prod-status         # Production
docker stats             # Использование ресурсов

Healthcheck

curl http://localhost:8000/admin/

💾 Backup и восстановление

Backup

make backup
# или
docker-compose exec db pg_dump -U geralt geodb > backup_$(date +%Y%m%d).sql

Восстановление

docker-compose exec -T db psql -U geralt geodb < backup.sql

Автоматический backup (cron)

# Добавьте в crontab
0 2 * * * cd /path/to/project && make backup

🔄 Обновление

Development

git pull
make dev-build

Production

git pull
make prod-build
make prod-migrate

🗺️ TileServer GL

Поместите .mbtiles файлы в директорию tiles/:

tiles/
├── world.mbtiles
└── satellite.mbtiles

Доступ: http://localhost:8080

Подробнее: tiles/README.md

🛠️ Makefile команды

Development

make dev-up              # Запустить
make dev-down            # Остановить
make dev-build           # Пересобрать
make dev-logs            # Логи
make dev-restart         # Перезапустить web

Production

make prod-up             # Запустить
make prod-down           # Остановить
make prod-build          # Пересобрать
make prod-logs           # Логи
make prod-restart        # Перезапустить web

Django

make shell               # Django shell
make migrate             # Миграции
make makemigrations      # Создать миграции
make createsuperuser     # Создать суперпользователя
make collectstatic       # Собрать статику

Утилиты

make backup              # Backup БД
make status              # Статус контейнеров
make clean               # Очистка (с volumes)
make clean-all           # Полная очистка

📚 Дополнительная документация

Troubleshooting

Контейнеры не запускаются

docker-compose logs
docker-compose config

База данных недоступна

docker-compose exec db pg_isready -U geralt
docker-compose logs db

Статические файлы не загружаются

docker-compose exec web python manage.py collectstatic --noinput
docker-compose exec web ls -la /app/staticfiles

502 Bad Gateway

docker-compose ps web
docker-compose logs web
docker-compose exec nginx nginx -t

🎯 Следующие шаги

  1. Прочитайте QUICKSTART.md
  2. Запустите development окружение
  3. Изучите DEPLOYMENT_CHECKLIST.md перед деплоем
  4. Настройте TileServer GL (tiles/README.md)
  5. Настройте SSL для production

📞 Поддержка

При возникновении проблем:

  1. Проверьте логи: make dev-logs или make prod-logs
  2. Изучите документацию в этой директории
  3. Проверьте DOCKER_README.md для подробностей