-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
134 lines (127 loc) · 4.84 KB
/
Copy pathdocker-compose.yml
File metadata and controls
134 lines (127 loc) · 4.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
x-airflow-common: &airflow-common
build:
context: ./airflow
dockerfile: Dockerfile
env_file:
- ./backend/.env
environment: &airflow-env
AIRFLOW__CORE__EXECUTOR: LocalExecutor
AIRFLOW__CORE__FERNET_KEY: ${AIRFLOW_FERNET_KEY}
AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION: "true"
AIRFLOW__CORE__LOAD_EXAMPLES: "false"
AIRFLOW__CORE__DEFAULT_TIMEZONE: UTC
AIRFLOW__CORE__DAGS_FOLDER: /opt/airflow/dags
AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: >-
postgresql+psycopg2://${POSTGRES_USER}:${POSTGRES_PASSWORD}@host.docker.internal:${POSTGRES_PORT}/${AIRFLOW_DB}
AIRFLOW__WEBSERVER__SECRET_KEY: ${AIRFLOW_SECRET_KEY}
AIRFLOW__WEBSERVER__EXPOSE_CONFIG: "true"
_AIRFLOW_WWW_USER_USERNAME: ${AIRFLOW_ADMIN_USER}
_AIRFLOW_WWW_USER_PASSWORD: ${AIRFLOW_ADMIN_PASSWORD}
SMARTSTAY_PROJECT_ROOT: /opt/smartstay
RAW_DIR: /opt/smartstay/data/raw
PROCESSED_DIR: /opt/smartstay/data/processed
PREDICTION_DIR: /opt/smartstay/data/prediction
MODELS_DIR: /opt/smartstay/data/models
LOGS_DIR: /opt/smartstay/logs/pipeline
DB_HOST: host.docker.internal
DB_PORT: ${POSTGRES_PORT}
DB_NAME: ${SMARTSTAY_DB}
DB_USER: ${POSTGRES_USER}
DB_PASSWORD: ${POSTGRES_PASSWORD}
PYTHONPATH: /opt/smartstay
AIRFLOW__LOGGING__BASE_LOG_FOLDER: /opt/airflow/logs
AIRFLOW__LOGGING__LOG_LEVEL: INFO
volumes:
- .:/opt/smartstay:ro
- ./data:/opt/smartstay/data
- ./airflow/dags:/opt/airflow/dags
- ./logs/airflow:/opt/airflow/logs
- ./airflow/plugins:/opt/airflow/plugins
extra_hosts:
- "host.docker.internal:host-gateway"
services:
# ── FastAPI Backend ─────────────────────────────────────────────────────────
backend:
build:
context: .
dockerfile: backend/Dockerfile
container_name: smartstay-backend
restart: unless-stopped
ports:
- "8000:8000"
env_file:
- ./backend/.env
environment:
DB_HOST: host.docker.internal # your local PostgreSQL
volumes:
- ./data:/app/data # models, predictions, shap, sentiment
extra_hosts:
- "host.docker.internal:host-gateway"
healthcheck:
test: ["CMD", "curl", "--fail", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 5
# ── Next.js Frontend ────────────────────────────────────────────────────────
frontend:
build:
context: ./frontend # adjust path if your Next.js lives elsewhere
dockerfile: Dockerfile
container_name: smartstay-frontend
restart: unless-stopped
ports:
- "3000:3000"
environment:
NEXT_PUBLIC_API_URL: http://backend:8000 # internal service name
depends_on:
backend:
condition: service_healthy
# ── Airflow Init ────────────────────────────────────────────────────────────
airflow-init:
<<: *airflow-common
container_name: smartstay-airflow-init
entrypoint: /bin/bash
env_file:
- ./backend/.env
command:
- -c
- |
airflow db migrate
airflow users create \
--username "$${_AIRFLOW_WWW_USER_USERNAME}" \
--password "$${_AIRFLOW_WWW_USER_PASSWORD}" \
--firstname Admin --lastname SmartStay \
--role Admin --email "admin@smartstay.local" || true
airflow variables set SMARTSTAY_PROJECT_ROOT /opt/smartstay || true
echo " Airflow init complete"
restart: "no"
# ── Airflow Webserver ───────────────────────────────────────────────────────
airflow-webserver:
<<: *airflow-common
container_name: smartstay-airflow-webserver
restart: unless-stopped
command: webserver
ports:
- "8080:8080"
env_file:
- ./backend/.env
healthcheck:
test: ["CMD", "curl", "--fail", "http://localhost:8080/health"]
interval: 30s
timeout: 10s
retries: 5
start_period: 30s
depends_on:
airflow-init:
condition: service_completed_successfully
# ── Airflow Scheduler ───────────────────────────────────────────────────────
airflow-scheduler:
<<: *airflow-common
container_name: smartstay-airflow-scheduler
env_file:
- ./backend/.env
restart: unless-stopped
command: scheduler
depends_on:
airflow-init:
condition: service_completed_successfully