All checks were successful
Build and Push PetClones-site / build-and-push (push) Successful in 42s
108 lines
4.4 KiB
YAML
108 lines
4.4 KiB
YAML
% 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"
|