- docker-compose.coolify.yaml: stack postgres+django sin env_file (variables via UI de Coolify), sin puertos publicos de BD, sin nginx, expose 8000 - django.coolify.Dockerfile: copia el codigo dentro de la imagen (no toca django.Dockerfile usado por dev/staging/prod)
71 lines
2.8 KiB
YAML
71 lines
2.8 KiB
YAML
# 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: |