commit b0fa765be8abbb6d2e4c5684f70535ee57a4d310 Author: Pavel Zhukov Date: Tue Feb 3 19:54:46 2026 +0300 Add docker-compose-public.yaml diff --git a/docker-compose-public.yaml b/docker-compose-public.yaml new file mode 100644 index 0000000..752297a --- /dev/null +++ b/docker-compose-public.yaml @@ -0,0 +1,248 @@ +# ============================================================================== +# BXVenStat - Публичная конфигурация для развёртывания из готового образа +# ============================================================================== +# Образ: gitea.archeon.io/archeon_public/bxvenstat:latest +# +# Запуск: +# docker compose -f docker-compose-public.yml up -d +# +# Переменные окружения (опционально через .env файл): +# SECRET_KEY, DB_PASSWORD, REDIS_PASSWORD, RABBITMQ_PASSWORD и др. +# ============================================================================== + +version: "3.8" + +services: + # ============================================================================== + # Инфраструктура + # ============================================================================== + + db: + image: postgres:17 + environment: + POSTGRES_DB: ${DB_NAME:-bxvenstat} + POSTGRES_USER: ${DB_USER:-postgres} + POSTGRES_PASSWORD: ${DB_PASSWORD:-pass} + volumes: + - "bxvenstat_db:/var/lib/postgresql/data" + healthcheck: + test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-postgres} -d ${DB_NAME:-bxvenstat}"] + interval: 5s + timeout: 5s + retries: 10 + restart: unless-stopped + + redis: + image: redis:7-alpine + command: redis-server --requirepass ${REDIS_PASSWORD:-pass} + volumes: + - "bxvenstat_redis:/data" + healthcheck: + test: ["CMD", "redis-cli", "--raw", "incr", "ping"] + interval: 5s + timeout: 5s + retries: 5 + restart: unless-stopped + + rabbitmq: + image: rabbitmq:3.12-management-alpine + environment: + RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER:-rabbitmq} + RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD:-pass} + RABBITMQ_DEFAULT_VHOST: ${RABBITMQ_VHOST:-/} + ports: + - "15672:15672" + volumes: + - "bxvenstat_rabbitmq:/var/lib/rabbitmq" + healthcheck: + test: rabbitmq-diagnostics -q ping + interval: 10s + timeout: 5s + retries: 5 + restart: unless-stopped + + minio: + image: minio/minio:latest + command: server /data --console-address ":9001" + environment: + MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin} + MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minioadmin} + ports: + - "9000:9000" + - "9001:9001" + volumes: + - "bxvenstat_minio:/data" + healthcheck: + test: ["CMD", "mc", "ready", "local"] + interval: 5s + timeout: 5s + retries: 5 + restart: unless-stopped + + minio-init: + image: minio/mc:latest + depends_on: + minio: + condition: service_healthy + entrypoint: > + /bin/sh -c " + /usr/bin/mc alias set local http://minio:9000 $${MINIO_ROOT_USER} $${MINIO_ROOT_PASSWORD}; + /usr/bin/mc mb local/$${MINIO_BUCKET_NAME} --ignore-existing; + /usr/bin/mc anonymous set download local/$${MINIO_BUCKET_NAME}; + echo \"Bucket $${MINIO_BUCKET_NAME} created successfully\"; + exit 0; + " + environment: + MINIO_ROOT_USER: ${MINIO_ROOT_USER:-minioadmin} + MINIO_ROOT_PASSWORD: ${MINIO_ROOT_PASSWORD:-minioadmin} + MINIO_BUCKET_NAME: ${AWS_STORAGE_BUCKET_NAME:-bxvenstat} + + # ============================================================================== + # Приложение BXVenStat (из готового образа) + # ============================================================================== + + app: + image: gitea.archeon.io/archeon_public/bxvenstat:latest + pull_policy: always + ports: + - "8000:8000" + environment: + - DEBUG=${DEBUG:-False} + - SECRET_KEY=${SECRET_KEY:-django-insecure-change-me-in-production} + - DB_HOST=db + - DB_NAME=${DB_NAME:-bxvenstat} + - DB_USER=${DB_USER:-postgres} + - DB_PASSWORD=${DB_PASSWORD:-pass} + - DB_PORT=5432 + - REDIS_HOST=redis + - REDIS_PORT=6379 + - REDIS_PASSWORD=${REDIS_PASSWORD:-pass} + - RABBITMQ_HOST=rabbitmq + - RABBITMQ_PORT=5672 + - RABBITMQ_USER=${RABBITMQ_USER:-rabbitmq} + - RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD:-pass} + - RABBITMQ_VHOST=${RABBITMQ_VHOST:-/} + - MINIO_ENDPOINT=minio:9000 + - MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY:-minioadmin} + - MINIO_SECRET_KEY=${MINIO_SECRET_KEY:-minioadmin} + - MINIO_BUCKET_NAME=${MINIO_BUCKET_NAME:-bxvenstat} + - USE_S3=${USE_S3:-True} + - ALLOWED_HOSTS=${ALLOWED_HOSTS:-localhost,127.0.0.1} + - PYTHONUNBUFFERED=1 + volumes: + - "bxvenstat_media:/app/media" + depends_on: + db: + condition: service_healthy + redis: + condition: service_healthy + rabbitmq: + condition: service_healthy + minio: + condition: service_healthy + command: > + sh -c " + python manage.py migrate && + python manage.py collectstatic --noinput && + gunicorn bxvenstat.wsgi:application --bind 0.0.0.0:8000 --workers 4 + " + restart: unless-stopped + + celery-worker: + image: gitea.archeon.io/archeon_public/bxvenstat:latest + pull_policy: always + environment: + - DEBUG=${DEBUG:-False} + - SECRET_KEY=${SECRET_KEY:-django-insecure-change-me-in-production} + - DB_HOST=db + - DB_NAME=${DB_NAME:-bxvenstat} + - DB_USER=${DB_USER:-postgres} + - DB_PASSWORD=${DB_PASSWORD:-pass} + - DB_PORT=5432 + - REDIS_HOST=redis + - REDIS_PORT=6379 + - REDIS_PASSWORD=${REDIS_PASSWORD:-pass} + - RABBITMQ_HOST=rabbitmq + - RABBITMQ_PORT=5672 + - RABBITMQ_USER=${RABBITMQ_USER:-rabbitmq} + - RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD:-pass} + - RABBITMQ_VHOST=${RABBITMQ_VHOST:-/} + - MINIO_ENDPOINT=minio:9000 + - MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY:-minioadmin} + - MINIO_SECRET_KEY=${MINIO_SECRET_KEY:-minioadmin} + - MINIO_BUCKET_NAME=${MINIO_BUCKET_NAME:-bxvenstat} + - USE_S3=${USE_S3:-True} + - PYTHONUNBUFFERED=1 + volumes: + - "bxvenstat_media:/app/media" + depends_on: + db: + condition: service_healthy + redis: + condition: service_healthy + rabbitmq: + condition: service_healthy + minio: + condition: service_healthy + command: > + sh -c " + echo 'Waiting for RabbitMQ...' && + sleep 10 && + celery -A bxvenstat worker -l info + " + restart: unless-stopped + + celery-beat: + image: gitea.archeon.io/archeon_public/bxvenstat:latest + pull_policy: always + environment: + - DEBUG=${DEBUG:-False} + - SECRET_KEY=${SECRET_KEY:-django-insecure-change-me-in-production} + - DB_HOST=db + - DB_NAME=${DB_NAME:-bxvenstat} + - DB_USER=${DB_USER:-postgres} + - DB_PASSWORD=${DB_PASSWORD:-pass} + - DB_PORT=5432 + - REDIS_HOST=redis + - REDIS_PORT=6379 + - REDIS_PASSWORD=${REDIS_PASSWORD:-pass} + - RABBITMQ_HOST=rabbitmq + - RABBITMQ_PORT=5672 + - RABBITMQ_USER=${RABBITMQ_USER:-rabbitmq} + - RABBITMQ_PASSWORD=${RABBITMQ_PASSWORD:-pass} + - RABBITMQ_VHOST=${RABBITMQ_VHOST:-/} + - MINIO_ENDPOINT=minio:9000 + - MINIO_ACCESS_KEY=${MINIO_ACCESS_KEY:-minioadmin} + - MINIO_SECRET_KEY=${MINIO_SECRET_KEY:-minioadmin} + - MINIO_BUCKET_NAME=${MINIO_BUCKET_NAME:-bxvenstat} + - USE_S3=${USE_S3:-True} + - PYTHONUNBUFFERED=1 + volumes: + - "bxvenstat_media:/app/media" + depends_on: + db: + condition: service_healthy + redis: + condition: service_healthy + rabbitmq: + condition: service_healthy + minio: + condition: service_healthy + command: > + sh -c " + echo 'Waiting for RabbitMQ...' && + sleep 15 && + celery -A bxvenstat beat -l info + " + restart: unless-stopped + +# ============================================================================== +# Volumes +# ============================================================================== + +volumes: + bxvenstat_db: + bxvenstat_redis: + bxvenstat_rabbitmq: + bxvenstat_minio: + bxvenstat_media: \ No newline at end of file