version: '3.8' services: # Servicio de la Base de Datos PostgreSQL db: image: postgres:15 container_name: rss_db environment: - POSTGRES_DB=${DB_NAME} - POSTGRES_USER=${DB_USER} - POSTGRES_PASSWORD=${DB_PASS} volumes: # Volumen para persistir los datos de la base de datos - postgres_data:/var/lib/postgresql/data # Monta la carpeta local con los scripts SQL para inicializar la BD la primera vez - ./init-db:/docker-entrypoint-initdb.d restart: always healthcheck: # Comprueba si la base de datos está lista para aceptar conexiones test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME}"] interval: 5s timeout: 5s retries: 5 # Servicio de la Aplicación Web (Gunicorn) web: build: . container_name: rss_web command: gunicorn --bind 0.0.0.0:8000 --workers 3 app:app ports: - "8001:8000" environment: - DB_HOST=db - DB_PORT=5432 - DB_NAME=${DB_NAME} - DB_USER=${DB_USER} - DB_PASS=${DB_PASS} - SECRET_KEY=${SECRET_KEY} depends_on: db: # Espera a que el healthcheck de la base de datos sea exitoso antes de iniciar condition: service_healthy restart: always # Servicio del Planificador de Tareas (Scheduler) scheduler: build: . container_name: rss_scheduler command: python scheduler.py environment: - DB_HOST=db - DB_PORT=5432 - DB_NAME=${DB_NAME} - DB_USER=${DB_USER} - DB_PASS=${DB_PASS} - SECRET_KEY=${SECRET_KEY} depends_on: db: # También espera a que la base de datos esté saludable condition: service_healthy restart: always # Define el volumen nombrado para la persistencia de datos volumes: postgres_data: