65 lines
1.8 KiB
YAML
65 lines
1.8 KiB
YAML
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:
|