Skip to content

Commit f6c319e

Browse files
author
Nikhil Suthar
committed
Remove Postgres Image
1 parent 32a7e52 commit f6c319e

File tree

5 files changed

+95
-97
lines changed

5 files changed

+95
-97
lines changed

Dockerfile

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ FROM python:3.11-slim
44
ENV PYTHONUNBUFFERED=1 PIP_NO_CACHE_DIR=1
55
WORKDIR /app
66

7-
# ---------- 2️⃣ Optional Azure CLI ----------
7+
# ---------- 2️⃣ Install System Dependencies ----------
88
ARG INSTALL_AZURE_CLI=true
99

1010
RUN apt-get update && \
@@ -13,16 +13,21 @@ RUN apt-get update && \
1313
curl \
1414
apt-transport-https \
1515
lsb-release \
16-
gnupg && \
17-
curl -sL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | tee /etc/apt/trusted.gpg.d/microsoft.gpg > /dev/null && \
18-
AZ_REPO=$(lsb_release -cs) && \
19-
echo "deb [arch=amd64 signed-by=/etc/apt/trusted.gpg.d/microsoft.gpg] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main" \
20-
> /etc/apt/sources.list.d/azure-cli.list && \
21-
apt-get update && \
22-
apt-get install -y azure-cli && \
16+
gnupg \
17+
postgresql-client \
18+
bash && \
19+
if [ "$INSTALL_AZURE_CLI" = "true" ]; then \
20+
curl -sL https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor | tee /etc/apt/trusted.gpg.d/microsoft.gpg > /dev/null && \
21+
AZ_REPO=$(lsb_release -cs) && \
22+
echo "deb [arch=amd64 signed-by=/etc/apt/trusted.gpg.d/microsoft.gpg] https://packages.microsoft.com/repos/azure-cli/ $AZ_REPO main" \
23+
> /etc/apt/sources.list.d/azure-cli.list && \
24+
apt-get update && \
25+
apt-get install -y azure-cli; \
26+
fi && \
2327
apt-get upgrade -y && \
2428
rm -rf /var/lib/apt/lists/*
25-
# ---------- 3️⃣ Python Deps ----------
29+
30+
# ---------- 3️⃣ Install Python Dependencies ----------
2631
COPY requirements.txt .
2732
RUN pip install --upgrade pip && pip install -r requirements.txt
2833

@@ -34,6 +39,10 @@ ENV PYTHONPATH="/app/src:${PYTHONPATH}"
3439
COPY docker/scripts/ /usr/local/bin/
3540
RUN chmod +x /usr/local/bin/*.sh
3641

37-
# ---------- 6️⃣ Entrypoint ----------
42+
# ---------- 6️⃣ Init SQL file (used by init_db.sh) ----------
43+
COPY docker/scripts/init.sql /usr/local/bin/init.sql
44+
RUN chmod +x /usr/local/bin/*.sql
45+
46+
# ---------- 7️⃣ Entrypoint ----------
3847
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
3948
CMD ["uvicorn", "src.airflow_copilot.app.app:app", "--host", "0.0.0.0", "--port", "3978"]

docker-compose.local.yml

Lines changed: 24 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ version: "3.9"
22

33
# ──────────────── Common env-file anchor ────────────────
44
x-env: &envfile
5-
env_file: .env # Populate from .env or .env.local
5+
env_file: .env # Loaded from .env or .env.local
66

77
networks:
88
airflow:
@@ -11,7 +11,7 @@ networks:
1111
services:
1212

1313
###########################################################################
14-
# 1) Copilot – FastAPI + LangGraph agent
14+
# 1) Copilot – FastAPI + LangGraph agent (handles DB init internally)
1515
###########################################################################
1616
copilot:
1717
image: thedatacarpenter/airflow-copilot:latest
@@ -26,65 +26,45 @@ services:
2626
retries: 5
2727
environment:
2828
USE_DOTENV: false
29+
2930
# LLM / model
3031
LLM_MODEL_PROVIDER_NAME: ${LLM_MODEL_PROVIDER_NAME}
31-
LLM_MODEL_NAME: ${LLM_MODEL_NAME}
32+
LLM_MODEL_NAME: ${LLM_MODEL_NAME}
3233

3334
# Provider keys
34-
OPENAI_API_KEY: ${OPENAI_API_KEY}
35-
GOOGLE_GENAI_API_KEY: ${GOOGLE_GENAI_API_KEY}
36-
# GROQ_API_KEY: ${GROQ_API_KEY}
37-
# ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY}
35+
OPENAI_API_KEY: ${OPENAI_API_KEY}
36+
GOOGLE_GENAI_API_KEY: ${GOOGLE_GENAI_API_KEY}
37+
# GROQ_API_KEY: ${GROQ_API_KEY}
38+
# ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY}
3839

39-
# Thresholds
40+
# Summarization thresholds
4041
MIN_MSG_TO_SUMMARIZE: ${MIN_MSG_TO_SUMMARIZE:-10}
41-
MIN_MSG_TO_RETAIN: ${MIN_MSG_TO_RETAIN:-10}
42+
MIN_MSG_TO_RETAIN: ${MIN_MSG_TO_RETAIN:-10}
4243

43-
# Airflow
44+
# Airflow connection
4445
AIRFLOW_AUTH_STRATEGY: ${AIRFLOW_AUTH_STRATEGY:-per_user}
45-
AIRFLOW_USER_NAME: ${AIRFLOW_USER_NAME:-airflow}
46+
AIRFLOW_USER_NAME: ${AIRFLOW_USER_NAME:-airflow}
4647
AIRFLOW_USER_PASSWORD: ${AIRFLOW_USER_PASSWORD:-airflow}
47-
AIRFLOW_BASE_URL: ${AIRFLOW_BASE_URL}
48+
AIRFLOW_BASE_URL: ${AIRFLOW_BASE_URL}
4849

4950
# Summarization model
5051
SUMMARIZATION_LLM_MODEL_PROVIDER_NAME: ${SUMMARIZATION_LLM_MODEL_PROVIDER_NAME}
51-
SUMMARIZATION_LLM_MODEL_NAME: ${SUMMARIZATION_LLM_MODEL_NAME}
52+
SUMMARIZATION_LLM_MODEL_NAME: ${SUMMARIZATION_LLM_MODEL_NAME}
5253

53-
# Database & Bot creds
54-
DB_URI: ${DB_URI}
55-
MICROSOFT_APP_ID: ${MICROSOFT_APP_ID}
54+
# Database & Bot
55+
DB_URI: ${DB_URI}
56+
MICROSOFT_APP_ID: ${MICROSOFT_APP_ID}
5657
MICROSOFT_APP_PASSWORD: ${MICROSOFT_APP_PASSWORD}
5758

58-
# Security
59+
# Encryption
5960
FERNET_SECRET_KEY: ${FERNET_SECRET_KEY}
6061
volumes:
6162
- .env:/app/src/.env:ro
62-
depends_on:
63-
db-init:
64-
condition: service_completed_successfully
65-
networks: [airflow]
66-
67-
###########################################################################
68-
# 2) One‑shot schema init (external Postgres or host DB)
69-
###########################################################################
70-
db-init:
71-
image: postgres:16
72-
<<: *envfile
73-
entrypoint: ["/bin/bash", "/init_db.sh"]
74-
restart: "no"
75-
extra_hosts:
76-
- "host.docker.internal:host-gateway"
77-
environment:
78-
DB_URI: ${DB_URI}
79-
volumes:
80-
- ./docker/scripts/init_db.sh:/init_db.sh:ro
81-
- ./docker/scripts/init.sql:/init.sql:ro
8263
networks: [airflow]
8364

8465
###########################################################################
85-
# 3) Ngrok – expose local FastAPI endpoint
66+
# 2) Ngrok – expose local FastAPI endpoint
8667
###########################################################################
87-
8868
ngrok:
8969
image: ngrok/ngrok:latest
9070
depends_on: [copilot]
@@ -94,8 +74,9 @@ services:
9474
ports:
9575
- "4040:4040"
9676
networks: [airflow]
77+
9778
###########################################################################
98-
# 4) Bot updater – patches Azure Bot with ngrok URL
79+
# 3) Bot updater – patches Azure Bot with ngrok URL
9980
###########################################################################
10081
bot-updater:
10182
image: thedatacarpenter/airflow-copilot:latest
@@ -107,9 +88,9 @@ services:
10788
NGROK_API: http://ngrok:4040/api/tunnels
10889
BOT_NAME: ${AZURE_BOT_NAME:-Airflow-Copilot}
10990
RESOURCE_GROUP: ${RESOURCE_GROUP}
110-
AZURE_CLIENT_ID: ${AZURE_CLIENT_ID}
111-
AZURE_TENANT_ID: ${AZURE_TENANT_ID}
91+
AZURE_CLIENT_ID: ${AZURE_CLIENT_ID}
92+
AZURE_TENANT_ID: ${AZURE_TENANT_ID}
11293
AZURE_CLIENT_SECRET: ${AZURE_CLIENT_SECRET}
11394
volumes:
11495
- .env:/app/src/.env:ro
115-
networks: [airflow]
96+
networks: [airflow]

docker-compose.prod.yml

Lines changed: 36 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,63 @@
1-
# docker-compose.prod.yml – production stack
21
version: "3.9"
32

4-
# ───── reusable anchor that mounts the real secrets file ─────
3+
# ──────────────── Common env-file anchor ────────────────
54
x-env: &envfile
6-
env_file: .env # ← use your populated .env (not .env.example)
5+
env_file: .env # Loaded from .env or .env.local
76

87
networks:
9-
airflow: {}
8+
airflow:
9+
driver: bridge
1010

1111
services:
12+
13+
###########################################################################
14+
# 1) Copilot – FastAPI + LangGraph agent (handles DB init internally)
15+
###########################################################################
1216
copilot:
1317
image: thedatacarpenter/airflow-copilot:latest
18+
container_name: copilot
19+
restart: unless-stopped
1420
ports:
1521
- "3978:3978"
16-
22+
healthcheck:
23+
test: ["CMD", "curl", "-f", "http://localhost:3978/health"]
24+
interval: 30s
25+
timeout: 60s
26+
retries: 5
1727
environment:
18-
# -------- LLM (choose ONE provider in .env) --------
19-
LLM_MODEL_PROVIDER_NAME: ${LLM_MODEL_PROVIDER_NAME}
20-
LLM_MODEL_NAME: ${LLM_MODEL_NAME}
28+
USE_DOTENV: false
2129

22-
# Provider‑specific keys (only one will be used by Copilot)
23-
OPENAI_API_KEY: ${OPENAI_API_KEY}
24-
GOOGLE_GENAI_API_KEY: ${GOOGLE_GENAI_API_KEY}
25-
# GROQ_API_KEY: ${GROQ_API_KEY}
26-
# ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY}
30+
# LLM / model
31+
LLM_MODEL_PROVIDER_NAME: ${LLM_MODEL_PROVIDER_NAME}
32+
LLM_MODEL_NAME: ${LLM_MODEL_NAME}
2733

28-
# Summarisation (leave empty to let the app fall back internally)
29-
SUMMARIZATION_LLM_MODEL_PROVIDER_NAME: ${SUMMARIZATION_LLM_MODEL_PROVIDER_NAME}
30-
SUMMARIZATION_LLM_MODEL_NAME: ${SUMMARIZATION_LLM_MODEL_NAME}
34+
# Provider keys
35+
OPENAI_API_KEY: ${OPENAI_API_KEY}
36+
GOOGLE_GENAI_API_KEY: ${GOOGLE_GENAI_API_KEY}
37+
# GROQ_API_KEY: ${GROQ_API_KEY}
38+
# ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY}
3139

32-
# -------- Thresholds --------
40+
# Summarization thresholds
3341
MIN_MSG_TO_SUMMARIZE: ${MIN_MSG_TO_SUMMARIZE:-10}
34-
MIN_MSG_TO_RETAIN: ${MIN_MSG_TO_RETAIN:-10}
42+
MIN_MSG_TO_RETAIN: ${MIN_MSG_TO_RETAIN:-10}
3543

36-
# -------- Airflow --------
44+
# Airflow connection
3745
AIRFLOW_AUTH_STRATEGY: ${AIRFLOW_AUTH_STRATEGY:-per_user}
38-
AIRFLOW_BASE_URL: ${AIRFLOW_BASE_URL}
39-
AIRFLOW_USER_NAME: ${AIRFLOW_USER_NAME:-airflow}
46+
AIRFLOW_USER_NAME: ${AIRFLOW_USER_NAME:-airflow}
4047
AIRFLOW_USER_PASSWORD: ${AIRFLOW_USER_PASSWORD:-airflow}
48+
AIRFLOW_BASE_URL: ${AIRFLOW_BASE_URL}
4149

42-
# -------- Database --------
43-
DB_URI: ${DB_URI}
50+
# Summarization model
51+
SUMMARIZATION_LLM_MODEL_PROVIDER_NAME: ${SUMMARIZATION_LLM_MODEL_PROVIDER_NAME}
52+
SUMMARIZATION_LLM_MODEL_NAME: ${SUMMARIZATION_LLM_MODEL_NAME}
4453

45-
# -------- Azure Bot --------
46-
MICROSOFT_APP_ID: ${MICROSOFT_APP_ID}
54+
# Database & Bot
55+
DB_URI: ${DB_URI}
56+
MICROSOFT_APP_ID: ${MICROSOFT_APP_ID}
4757
MICROSOFT_APP_PASSWORD: ${MICROSOFT_APP_PASSWORD}
4858

49-
# -------- Security --------
59+
# Encryption
5060
FERNET_SECRET_KEY: ${FERNET_SECRET_KEY}
5161
volumes:
5262
- .env:/app/src/.env:ro
53-
depends_on: [db-init]
5463
networks: [airflow]
55-
56-
# one‑shot Postgres schema bootstrap
57-
db-init:
58-
image: postgres:16
59-
<<: *envfile
60-
entrypoint: ["/bin/bash", "/init_db.sh"]
61-
environment:
62-
DB_URI: ${DB_URI}
63-
volumes:
64-
- ./docker/scripts/init_db.sh:/init_db.sh:ro
65-
- ./docker/scripts/init.sql:/init.sql:ro
66-
restart: "no"
67-
networks: [airflow]

docker/scripts/entrypoint.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,17 @@ case "${LLM_MODEL_PROVIDER_NAME}" in
2626
;;
2727
esac
2828

29+
30+
# ---------- Optional: Bootstrap DB schema if DB_URI is provided ----------
31+
if [[ -n "${DB_URI:-}" && -f "/usr/local/bin/init_db.sh" && -f "/usr/local/bin/init.sql" ]]; then
32+
echo "🔁 Running DB initialization script ..."
33+
bash /usr/local/bin/init_db.sh
34+
else
35+
echo "ℹ️ Skipping DB bootstrap – missing DB_URI or schema scripts."
36+
fi
37+
38+
39+
40+
2941
# ---------- launch uvicorn ----------
3042
exec "$@"

docker/scripts/init_db.sh

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@ until psql "$DB_URI" -c 'SELECT 1;' >/dev/null 2>&1; do
1515
done
1616
echo "✅ Postgres is reachable."
1717

18-
if [[ ! -f /init.sql ]]; then
19-
echo "❌ /init.sql not found inside the image. Abort."
18+
if [[ ! -f /usr/local/bin/init.sql ]]; then
19+
echo "❌ /usr/local/bin/init.sql not found inside the image. Abort."
2020
exit 1
2121
fi
2222

23-
echo "▶️ Applying schema from /init.sql"
24-
psql "$DB_URI" -v ON_ERROR_STOP=1 -f /init.sql
23+
echo "▶️ Applying schema from /usr/local/bin/init.sql"
24+
psql "$DB_URI" -v ON_ERROR_STOP=1 -f /usr/local/bin/init.sql
2525
echo "🎉 Database bootstrap complete."

0 commit comments

Comments
 (0)