services: postgres: image: postgres:15-alpine container_name: meteorisk_postgres restart: always environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres ports: - "5432:5432" volumes: - pgdata:/var/lib/postgresql/data - ./init/init-dbs.sql:/docker-entrypoint-initdb.d/init.sql networks: - MeteoRisk_Network airflow: build: context: . dockerfile: Dockerfile.airflow container_name: meteorisk_airflow restart: always environment: - AIRFLOW__CORE__LOAD_EXAMPLES=False - AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION=True - _AIRFLOW_WWW_USER_USERNAME=admin - _AIRFLOW_WWW_USER_PASSWORD=admin - PYTHONPATH=/opt/airflow - AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:airflow@postgres:5432/airflow - METEORISK_DB_URL=postgresql+psycopg2://meteorisk_user:meteorisk@postgres:5432/meteorisk_db volumes: - ./dags:/opt/airflow/dags - ./data:/opt/airflow/data - ./extraction:/opt/airflow/extraction - ./transformation:/opt/airflow/transformation - ./load:/opt/airflow/load - airflow_logs:/opt/airflow/logs ports: - "8080:8080" command: standalone depends_on: - postgres networks: - MeteoRisk_Network streamlit: build: context: . dockerfile: data_analyst/Dockerfile container_name: meteorisk_dashboard restart: always environment: - DB_HOST=postgres - DB_PORT=5432 - DB_NAME=meteorisk_db - DB_USER=meteorisk_user - DB_PASSWORD=meteorisk ports: - "8501:8501" depends_on: - postgres volumes: - ./data_analyst:/app - ./load:/app/load networks: MeteoRisk_Network: jupyter: image: quay.io/jupyter/scipy-notebook:2025-12-31 ports: - "8888:8888" volumes: - .:/home/jovyan/work command: start-notebook.py --ServerApp.root_dir=/home/jovyan/work networks: - MeteoRisk_Network depends_on: - postgres networks: MeteoRisk_Network: volumes: pgdata: airflow_logs: