version: '3.9' services: # Flask service backend: container_name: backend image: backend-flask build: context: ./backend-flask volumes: - ./backend-flask:/app networks: - dev-network environment: - FLASK_DEBUG=1 - FLASK_CELERY_BROKER_URL=redis://redis:6379/0 - FLASK_CELERY_RESULT_BACKEND=redis://redis:6379/0 - DATABASE_URI=sqlite:///db.sqlite3 depends_on: - redis # ETL job (runs with the same source as the backend) celery-worker: container_name: worker command: celery -A make_celery.celery_app worker --loglevel=info --concurrency=1 -B environment: - CELERY_BROKER_URL=redis://redis:6379/0 - CELERY_RESULT_BACKEND=redis://redis:6379/0 - DATABASE_URI=sqlite:///db.sqlite3 image: backend-flask volumes: - ./backend-flask:/app networks: - dev-network depends_on: - redis # message broker redis: image: redis:alpine container_name: redis networks: - dev-network ports: - 6379:6379 # Vue + Vite service frontend: container_name: frontend build: context: ./availabili.tf environment: VITE_API_URL: http://localhost:8000 # API endpoint ports: - 5173:5173 volumes: - ./availabili.tf:/app networks: - dev-network # NGINX service nginx: image: nginx:latest ports: - "8000:80" volumes: - ./nginx/development.conf:/etc/nginx/nginx.conf depends_on: - backend - frontend networks: - dev-network networks: dev-network: driver: bridge