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: - "127.0.0.1:9000: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 ports: - "10297:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro - static_volume:/var/www/static - media_volume:/var/www/media - ./dist:/var/www/donconfiao 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