services: postgres: image: postgres:15-alpine container_name: tienda_ilusion_postgres_prod environment: - POSTGRES_USER=${DB_USER:-tienda_ilusion_user} - POSTGRES_DB=${DB_NAME:-tienda_ilusion_prod} - POSTGRES_PASSWORD=${DB_PASSWORD:-tienda_ilusion_pass} env_file: - .env.production volumes: - postgres_data:/var/lib/postgresql/data ports: - "5432:5432" networks: - tienda_network restart: unless-stopped healthcheck: test: [ "CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-tienda_ilusion_user} -d ${POSTGRES_DB:-tienda_ilusion_prod}", ] interval: 10s timeout: 5s retries: 5 django: build: context: ./ dockerfile: django.Dockerfile container_name: tienda_ilusion_django_prod env_file: - .env.production environment: - DJANGO_ENV=production - DB_HOST=postgres - DB_USER=${DB_USER:-tienda_ilusion_user} - DB_NAME=${DB_NAME:-tienda_ilusion_prod} - DB_PASSWORD=${DB_PASSWORD:-tienda_ilusion_pass} volumes: - ./tienda_ilusion:/app/ - static_volume:/app/staticfiles - media_volume:/app/media - logs_volume:/app/logs ports: - "8000:8000" depends_on: postgres: condition: service_healthy networks: - tienda_network restart: unless-stopped 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" # Optional: Nginx reverse proxy para servir archivos estáticos # nginx: # image: nginx:alpine # container_name: tienda_ilusion_nginx # ports: # - "80:80" # - "443:443" # volumes: # - ./nginx.conf:/etc/nginx/nginx.conf:ro # - static_volume:/var/www/static:ro # - media_volume:/var/www/media:ro # - ./ssl:/etc/nginx/ssl:ro # depends_on: # - django # networks: # - tienda_network # restart: unless-stopped volumes: postgres_data: driver: local static_volume: driver: local media_volume: driver: local logs_volume: driver: local networks: tienda_network: driver: bridge