Files
2024-test-rosmorport/docker-compose.prod.yml
erjemin 6093dc2021
All checks were successful
Build and Push PetClones-site / build-and-push (push) Successful in 42s
fin
2026-04-01 17:42:21 +03:00

108 lines
4.4 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
% cat docker-compose.yml
# docker-compose.prod.yml для production развертывания проекта rosmorport_tsts
# Для использование на хосте провайдера, перейдите в папку с приложением, размемтите
# его там под именем `docker-compose.yml`
#
# Запуск на продакшене:
# cd <папка-с-приложением>
# mkdir -p config/nginx media database
# sudo chmod -R 777 media database config/nginx
# sodo docker compose up -d
# version: '3.9'
services:
# Django приложение в production
web:
# Используем образ из Gitea реестра (собран в CI/CD)
image: git.cube2.ru/erjemin/2024-test-rosmorport:latest
# Имя контейнера
container_name: petclones-site--backend
# Переменные окружения
env_file:
- .env
# Переменные окружения для production
environment:
- DOCKER_ENV=1
- DEBUG=False
- PYTHONUNBUFFERED=1
# Тома для медиа, статики и БД
# ВАЖНО: Используем локальные монтирования, а не именованные тома!
# Данные должны быть доступны на хосте для nginx и резервного копирования
volumes:
# Локальная папка для media (загруженные пользователями файлы)
# Контейнер: /app/public/media → Хост: ./media
- ./media:/app/public/media:rw
# Локальная папка для базы данных (SQLite файл)
# Контейнер: /app/database → Хост: ./database
- ./database:/app/database:rw
# Volume для экспорта конфигов из контейнера на хост
# Контейнер: /tmp/nginx_configs → Хост: ./config/nginx
- ./config/nginx:/tmp/nginx_configs:rw
# Command: запуск Django приложения с миграциями
command: >
sh -c "
cd /app/rosmorport_tsts &&
echo 'Применение миграций БД...' &&
python manage.py migrate --noinput &&
echo 'Сбор статических файлов...' &&
python manage.py collectstatic --noinput &&
echo '🚀 Запуск gunicorn...' &&
gunicorn --bind 0.0.0.0:8000 --workers 1 --worker-class sync --worker-tmp-dir /dev/shm --max-requests 200 --timeout 120 --access-logfile - --error-logfile - rosmorport_tsts.wsgi:application
"
# Перенаправляем порты
ports:
- "127.0.0.1:8040:8000"
# Политика перезапуска
restart: unless-stopped
# Метки для Watchtower (авто-обновление)
labels:
- "com.centurylinklabs.watchtower.scope=petclones-site--scope"
# Ограничения ресурсов
deploy:
resources:
limits:
cpus: '0.25'
memory: 256M
# Логирование в JSON-файлы (для сбора логов через docker logs)
logging:
driver: "json-file"
options:
max-size: "5m" # больше лимит в продакшене для логирования
max-file: "1" # храним 1 файл лога
# WATCHTOWER ДЛЯ АВТОМАТИЧЕСКОГО ОБНОВЛЕНИЯ ОБРАЗОВ ИЗ РЕЕСТРА
watchtower:
image: containrrr/watchtower
container_name: petclones-site--watchtower
restart: always
volumes:
- /var/run/docker.sock:/var/run/docker.sock
# Переменные окружения
env_file:
- .env
environment:
- DOCKER_API_VERSION=1.44
# Берем учетные данные из .env файла
- REPO_USER=${REPO_USER}
- REPO_PASS=${REPO_PASS}
# Ограничиваем область видимости только этим проектом
- WATCHTOWER_SCOPE=petclones-site--scope
# Если нужно указать реестр явно (обычно watchtower сам понимает из имени образа)
# - WATCHTOWER_REGISTRY_URL=git.cube2.ru
command: --interval 1800 --cleanup # Проверять каждые 30 минут
logging:
driver: "json-file"
options:
max-size: "1m"
max-file: "1"