fin
All checks were successful
Build and Push PetClones-site / build-and-push (push) Successful in 42s
All checks were successful
Build and Push PetClones-site / build-and-push (push) Successful in 42s
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user