6.8 KiB
6.8 KiB
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
- Скопируйте файл окружения:
cp .env.dev .env
- Запустите контейнеры:
docker-compose up -d --build
- Создайте суперпользователя:
docker-compose exec web python manage.py createsuperuser
- Приложение доступно:
- Django: http://localhost:8000
- TileServer GL: http://localhost:8080
- PostgreSQL: localhost:5432
Production
- Скопируйте и настройте файл окружения:
cp .env.prod .env
# Отредактируйте .env и измените SECRET_KEY, пароли и ALLOWED_HOSTS
- Запустите контейнеры:
docker-compose -f docker-compose.prod.yaml up -d --build
- Создайте суперпользователя:
docker-compose -f docker-compose.prod.yaml exec web python manage.py createsuperuser
- Приложение доступно:
- Nginx: http://localhost (порт 80)
- Django (напрямую): http://localhost:8000
- TileServer GL: http://localhost:8080
- PostgreSQL: localhost:5432
Основные команды
Development
# Запуск
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
# Запуск
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)
# 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- данные PostgreSQLstatic_volume_dev- статические файлыmedia_volume_dev- медиа файлыlogs_volume_dev- логи./dbapp:/app- код приложения (live reload)
Production
postgres_data_prod- данные PostgreSQLstatic_volume_prod- статические файлыmedia_volume_prod- медиа файлыlogs_volume_prod- логи
TileServer GL
Для работы TileServer GL поместите ваши тайлы в директорию ./tiles/.
Пример структуры:
tiles/
├── config.json
└── your-tiles.mbtiles
Backup и восстановление БД
Backup
# 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
Восстановление
# 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
Проблемы с миграциями
docker-compose exec web python manage.py migrate --fake-initial
Проблемы с правами доступа
docker-compose exec -u root web chown -R app:app /app
Очистка всех данных
docker-compose down -v
docker system prune -a
Проверка логов
# Все сервисы
docker-compose logs -f
# Конкретный сервис
docker-compose logs -f web
docker-compose logs -f db
Безопасность для Production
- Измените SECRET_KEY - используйте длинный случайный ключ
- Измените пароли БД - используйте сильные пароли
- Настройте ALLOWED_HOSTS - укажите ваш домен
- Настройте SSL - добавьте сертификаты в
nginx/ssl/ - Ограничьте доступ к портам - не открывайте порты БД наружу
Генерация SECRET_KEY
python -c "from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())"
Мониторинг
Проверка статуса контейнеров
docker-compose ps
Использование ресурсов
docker stats
Healthcheck
curl http://localhost:8000/admin/