Files
dbstorage/DOCKER_README.md

7.0 KiB
Raw Blame History

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. Скопируйте файл окружения:
cp .env.dev .env
  1. Запустите контейнеры:
docker-compose up -d --build
  1. Создайте суперпользователя:
docker-compose exec web python manage.py createsuperuser
  1. Приложение доступно:

Production

  1. Скопируйте и настройте файл окружения:
cp .env.prod .env
# Отредактируйте .env и измените SECRET_KEY, пароли и ALLOWED_HOSTS
  1. Запустите контейнеры:
docker-compose -f docker-compose.prod.yaml up -d --build
  1. Создайте суперпользователя:
docker-compose -f docker-compose.prod.yaml exec web python manage.py createsuperuser
  1. Приложение доступно:

Основные команды

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 - данные 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

# 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

  1. Измените SECRET_KEY - используйте длинный случайный ключ
  2. Измените пароли БД - используйте сильные пароли
  3. Настройте ALLOWED_HOSTS - укажите ваш домен
  4. Настройте SSL - добавьте сертификаты в nginx/ssl/
  5. Ограничьте доступ к портам - не открывайте порты БД наружу

Генерация 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/