8.9 KiB
8.9 KiB
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 serverproduction→ Gunicorn WSGI server
docker-compose.yaml (Development)
Сервисы:
db- PostgreSQL с PostGISweb- Django приложениеtileserver- TileServer GL
Особенности:
- Код монтируется как volume (live reload)
- DEBUG=True
- Django development server
- Простые пароли для локальной разработки
docker-compose.prod.yaml (Production)
Сервисы:
db- PostgreSQL с PostGISweb- Django с Gunicorntileserver- TileServer GLnginx- Reverse proxy
Особенности:
- Код копируется в образ (не монтируется)
- DEBUG=False
- Gunicorn WSGI server
- Nginx для статики и проксирования
- Сильные пароли из .env
- Сбор статики (collectstatic)
🔐 Безопасность
Для Production обязательно:
-
Сгенерируйте SECRET_KEY:
python generate_secret_key.py -
Измените пароли БД в
.env -
Настройте ALLOWED_HOSTS:
ALLOWED_HOSTS=yourdomain.com,www.yourdomain.com -
Настройте SSL/HTTPS (рекомендуется):
- Получите сертификаты (Let's Encrypt)
- Поместите в
nginx/ssl/ - Используйте
nginx/conf.d/ssl.conf.example
-
Ограничьте доступ к портам:
- Открыть: 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 # Полная очистка
📚 Дополнительная документация
- QUICKSTART.md - Быстрый старт для нетерпеливых
- DOCKER_README.md - Подробная документация по Docker
- DEPLOYMENT_CHECKLIST.md - Чеклист для деплоя
- tiles/README.md - Настройка TileServer GL
❓ 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
🎯 Следующие шаги
- ✅ Прочитайте QUICKSTART.md
- ✅ Запустите development окружение
- ✅ Изучите DEPLOYMENT_CHECKLIST.md перед деплоем
- ✅ Настройте TileServer GL (tiles/README.md)
- ✅ Настройте SSL для production
📞 Поддержка
При возникновении проблем:
- Проверьте логи:
make dev-logsилиmake prod-logs - Изучите документацию в этой директории
- Проверьте DOCKER_README.md для подробностей