# Docker Compose para despliegue en Coolify. # Copia este stack tal cual: Coolify lo clona y parsea (Build Pack: Docker Compose). # En Coolify indica: # - Docker Compose Location: docker-compose.coolify.yaml # - Service 'django' -> Domain: https://api.tudominio.com (puerto interno 8000) # - Environment Variables se crean solas a partir de los ${VAR} de abajo. # NO usa env_file (.env.production): las variables se definen en la UI de Coolify. services: postgres: image: postgres:15-alpine restart: unless-stopped environment: - POSTGRES_USER=${DB_USER:?Define DB_USER en Coolify} - POSTGRES_PASSWORD=${DB_PASSWORD:?Define DB_PASSWORD en Coolify} - POSTGRES_DB=${DB_NAME:?Define DB_NAME en Coolify} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME}"] interval: 10s timeout: 5s retries: 5 django: build: context: ./ dockerfile: django.coolify.Dockerfile restart: unless-stopped environment: - DJANGO_ENV=production - DEBUG=${DEBUG:-False} - SECRET_KEY=${SECRET_KEY:?Define SECRET_KEY en Coolify} - ALLOWED_HOSTS=${ALLOWED_HOSTS:?Define ALLOWED_HOSTS en Coolify} - CORS_ALLOWED_ORIGINS=${CORS_ALLOWED_ORIGINS:?Define CORS_ALLOWED_ORIGINS en Coolify} - CSRF_TRUSTED_ORIGINS=${CSRF_TRUSTED_ORIGINS:?Define CSRF_TRUSTED_ORIGINS en Coolify} - DB_HOST=postgres - DB_PORT=5432 - DB_NAME=${DB_NAME:?Define DB_NAME en Coolify} - DB_USER=${DB_USER:?Define DB_USER en Coolify} - DB_PASSWORD=${DB_PASSWORD:?Define DB_PASSWORD en Coolify} - EMAIL_HOST=${EMAIL_HOST:-smtp.gmail.com} - EMAIL_PORT=${EMAIL_PORT:-587} - EMAIL_USE_TLS=${EMAIL_USE_TLS:-True} - EMAIL_HOST_USER=${EMAIL_HOST_USER:-} - EMAIL_HOST_PASSWORD=${EMAIL_HOST_PASSWORD:-} - DEFAULT_FROM_EMAIL=${DEFAULT_FROM_EMAIL:-noreply@tiendailusion.com} - ADMIN_EMAIL=${ADMIN_EMAIL:-admin@tiendailusion.com} - TRYTON_HOST=${TRYTON_HOST:?Define TRYTON_HOST en Coolify} - TRYTON_DATABASE=${TRYTON_DATABASE:?Define TRYTON_DATABASE en Coolify} - TRYTON_USERNAME=${TRYTON_USERNAME:?Define TRYTON_USERNAME en Coolify} - TRYTON_PASSWORD=${TRYTON_PASSWORD:?Define TRYTON_PASSWORD en Coolify} expose: - "8000" volumes: - static_volume:/app/staticfiles - media_volume:/app/media - logs_volume:/app/logs depends_on: postgres: condition: service_healthy command: > sh -c "python manage.py migrate && python manage.py collectstatic --noinput && gunicorn config.wsgi:application --bind 0.0.0.0:8000 --workers 4 --timeout 120" volumes: postgres_data: static_volume: media_volume: logs_volume: