Files
soleprint/cfg/amar/managed/ctrl/docker-compose.yml
2026-01-20 05:31:26 -03:00

203 lines
5.3 KiB
YAML

# Amar Room - Docker Compose
#
# Creates: db, redis, backend, celery, celery-beat, frontend
# Network: Joins external network defined by NETWORK_NAME
#
# Usage:
# cd cfg/amar && docker compose up -d
#
# Required Environment Variables (from .env):
# - DEPLOYMENT_NAME: Prefix for container names
# - NETWORK_NAME: Network to join
# - BACKEND_PATH, FRONTEND_PATH: Source code paths (absolute)
# - DOCKERFILE_BACKEND, DOCKERFILE_FRONTEND: Dockerfile paths (absolute)
# - DB_DUMP: Database dump file (relative to dumps/)
# - Plus all app-specific vars (POSTGRES_*, etc.)
services:
db:
image: postgis/postgis:15-3.4
container_name: ${DEPLOYMENT_NAME}_db
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- pgdata:/var/lib/postgresql/data
# Database dump loaded on init (if volume is empty)
- ./dumps/${DB_DUMP}:/docker-entrypoint-initdb.d/dump.sql:ro
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 10s
timeout: 5s
retries: 5
networks:
- default
redis:
image: redis:7-alpine
container_name: ${DEPLOYMENT_NAME}_redis
volumes:
- redisdata:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
networks:
- default
backend:
build:
context: ${BACKEND_PATH}
dockerfile: ${DOCKERFILE_BACKEND}
target: runtime
container_name: ${DEPLOYMENT_NAME}_backend
environment:
- SECRET_KEY
- DEBUG
- ALLOWED_HOSTS
- DJANGO_ENV
- DB_NAME=${POSTGRES_DB}
- DB_USER=${POSTGRES_USER}
- DB_PASSWORD=${POSTGRES_PASSWORD}
- DB_HOST=db
- DB_PORT=5432
- CELERY_BROKER_URL=redis://redis:6379/0
- CELERY_RESULT_BACKEND=redis://redis:6379/0
- CORS_ALLOW_ALL
- CORS_ALLOWED_ORIGINS
# Uvicorn config (dev: 1 worker + reload, prod: 4 workers)
- WORKERS=${BACKEND_WORKERS:-1}
- RELOAD=${BACKEND_RELOAD:---reload}
# Google
- SUBJECT_CALENDAR
- SHEET_ID
- RANGE_NAME
- GOOGLE_MAPS_API_KEY
# Analytics
- GA4_MEASUREMENT_ID
- AMPLITUDE_API_KEY
- HOTJAR_API_KEY
# Payments
- ACCESS_TOKEN_MERCADO_PAGO
- MP_PLATFORM_ACCESS_TOKEN
- USER_ID
# Push
- WEBPUSH_VAPID_PUBLIC_KEY
- WEBPUSH_VAPID_PRIVATE_KEY
- WEBPUSH_VAPID_ADMIN_EMAIL
# Init
- USER_PASSWORD
volumes:
- ${BACKEND_PATH}:/app
- backend_static:/var/etc/static
- backend_media:/app/media
ports:
- "${BACKEND_PORT}:8000"
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
networks:
- default
command: >
sh -c "python manage.py migrate --noinput &&
uvicorn amar_django_back.asgi:application --host 0.0.0.0 --port 8000 --workers $${WORKERS:-1} $${RELOAD}"
celery:
build:
context: ${BACKEND_PATH}
dockerfile: ${DOCKERFILE_BACKEND}
target: runtime
container_name: ${DEPLOYMENT_NAME}_celery
environment:
- SECRET_KEY
- DEBUG
- DJANGO_ENV
- DB_NAME=${POSTGRES_DB}
- DB_USER=${POSTGRES_USER}
- DB_PASSWORD=${POSTGRES_PASSWORD}
- DB_HOST=db
- DB_PORT=5432
- CELERY_BROKER_URL=redis://redis:6379/0
- CELERY_RESULT_BACKEND=redis://redis:6379/0
volumes:
- ${BACKEND_PATH}:/app
- backend_media:/app/media
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
networks:
- default
command: celery -A amar_django_back worker -l INFO
celery-beat:
build:
context: ${BACKEND_PATH}
dockerfile: ${DOCKERFILE_BACKEND}
target: runtime
container_name: ${DEPLOYMENT_NAME}_celery_beat
environment:
- SECRET_KEY
- DEBUG
- DJANGO_ENV
- DB_NAME=${POSTGRES_DB}
- DB_USER=${POSTGRES_USER}
- DB_PASSWORD=${POSTGRES_PASSWORD}
- DB_HOST=db
- DB_PORT=5432
- CELERY_BROKER_URL=redis://redis:6379/0
- CELERY_RESULT_BACKEND=redis://redis:6379/0
volumes:
- ${BACKEND_PATH}:/app
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
networks:
- default
command: celery -A amar_django_back beat -l INFO
frontend:
build:
context: ${FRONTEND_PATH}
dockerfile: ${DOCKERFILE_FRONTEND}
target: development
container_name: ${DEPLOYMENT_NAME}_frontend
environment:
- NEXT_PUBLIC_APP_API_URL_BACKOFFICE
- NEXT_PUBLIC_APP_API_URL_STAGE
- NEXT_PUBLIC_IS_STAGE
- NEXT_PUBLIC_FB_PIXEL_ID
- NEXT_PUBLIC_TAG_MANAGER
- NEXT_PUBLIC_WHATSAPP_CONTACT
- NEXT_PUBLIC_API_KEY
- NEXT_PUBLIC_AMPLITUDE_API_KEY
- NEXT_PUBLIC_GMAPS_API_KEY
volumes:
- ${FRONTEND_PATH}/src:/app/src
- ${FRONTEND_PATH}/public:/app/public
ports:
- "${FRONTEND_PORT}:3000"
depends_on:
- backend
networks:
- default
# CMD from Dockerfile.frontend development stage: npm run dev
volumes:
pgdata:
redisdata:
backend_static:
backend_media:
networks:
default:
external: true
name: ${NETWORK_NAME}