fin
All checks were successful
Build and Push PetClones-site / build-and-push (push) Successful in 42s

This commit is contained in:
2026-04-01 17:42:21 +03:00
parent 2a37e24242
commit 6093dc2021
6 changed files with 49 additions and 289 deletions

View File

@@ -1,46 +1,57 @@
% cat docker-compose.yml
# docker-compose.prod.yml для production развертывания проекта rosmorport_tsts
# Использование: docker-compose -f docker-compose.prod.yml up -d
# Для использование на хосте провайдера, перейдите в папку с приложением, размемтите
# его там под именем `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'
# 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
# Тома для медиа, статики и БД
volumes:
# Volume для media (загруженные пользователями файлы)
- media:/app/public/media:rw
# Volume для базы данных (SQLite файл)
- database:/app/database:rw
# Volume для экспорта конфигов из контейнера на хост
# Контейнер копирует nginx конфиг при запуске для настройки reverse-proxy на хосте
- ./config/nginx:/tmp/nginx_configs:rw # контейнер пишет сюда конфиги
# Command: скрипт для копирования конфигов из контейнера на хост при запуске
# Встроенный entrypoint nginx:alpine (/docker-entrypoint.sh) запустит это как команду
# Тома для медиа, статики и БД
# ВАЖНО: Используем локальные монтирования, а не именованные тома!
# Данные должны быть доступны на хосте для 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 "
echo '📋 Копирование внешнего nginx конфига на хост...' &&
cp /tmp/pet-clones--external-nginx.conf.source /tmp/nginx_configs/pet-clones--external-nginx.conf.sample &&
echo '✅ Пример nginx-конфига создан в ./config/nginx/pet-clones--external-nginx.conf.sample (свежий из контейнера)' &&
if [ ! -f /tmp/nginx_configs/pet-clones--external-nginx.conf ]; then
cp /tmp/pet-clones--external-nginx.conf.source /tmp/nginx_configs/pet-clones--external-nginx.conf &&
echo '✅ Боевой nginx-конфиг создан в ./config/nginx/pet-clones--external-nginx.conf (свежий из контейнера)'
else
echo '⏭️ Боевой nginx-конфиг оставлен без изменений.'
fi
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
"
@@ -60,7 +71,7 @@ services:
resources:
limits:
cpus: '0.25'
memory: 512M
memory: 256M
# Логирование в JSON-файлы (для сбора логов через docker logs)
logging:
@@ -69,9 +80,6 @@ services:
max-size: "5m" # больше лимит в продакшене для логирования
max-file: "1" # храним 1 файл лога
networks:
- petclones-site--network
# WATCHTOWER ДЛЯ АВТОМАТИЧЕСКОГО ОБНОВЛЕНИЯ ОБРАЗОВ ИЗ РЕЕСТРА
watchtower:
image: containrrr/watchtower
@@ -97,12 +105,3 @@ services:
options:
max-size: "1m"
max-file: "1"
networks:
- petclones-site--network
# Сеть для сервисов
networks:
default:
name: petclones-site--network
driver: bridge