Skip to content

Commit be36f01

Browse files
committed
build: create a docker compose with image target & fix alembic.ini doesn't exists
1 parent b659c47 commit be36f01

4 files changed

Lines changed: 156 additions & 2 deletions

File tree

app/main.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from contextlib import asynccontextmanager
22
from datetime import datetime, timezone
3+
import os
34

45
from alembic import command
56
from alembic.config import Config
@@ -37,7 +38,13 @@ async def lifespan(app: FastAPI):
3738

3839
try:
3940
logger_startup.info("Running database migrations")
40-
alembic_cfg = Config("app/alembic/alembic.ini")
41+
alembic_ini_path = "app/alembic/alembic.ini"
42+
alembic_sample_ini_path = "app/alembic/sample.alembic.ini"
43+
if not os.path.exists(alembic_ini_path):
44+
logger_startup.warning(f"{alembic_ini_path} not found. Creating from sample.")
45+
with open(alembic_sample_ini_path, "r") as src, open(alembic_ini_path, "w") as dst:
46+
dst.write(src.read())
47+
alembic_cfg = Config(alembic_ini_path)
4148
alembic_cfg.set_main_option("script_location", "app/alembic")
4249
alembic_cfg.set_main_option("sqlalchemy.url", settings.DB_URL_SYNC)
4350

build.docker-compose.yml

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
services:
2+
caddy:
3+
image: caddy:alpine
4+
restart: unless-stopped
5+
volumes:
6+
- ./Caddyfile:/etc/caddy/Caddyfile:ro
7+
depends_on:
8+
- fastapi
9+
ports:
10+
- "80:80"
11+
networks:
12+
- event-manager-network
13+
14+
15+
fastapi:
16+
build: .
17+
restart: unless-stopped
18+
volumes:
19+
- log-volume:/tmp/event-manager/logs
20+
env_file:
21+
- sample.docker-compose.env
22+
depends_on:
23+
- postgres
24+
- redis
25+
networks:
26+
- event-manager-network
27+
ports:
28+
- "8000:8000"
29+
30+
31+
postgres:
32+
image: postgres:latest
33+
restart: unless-stopped
34+
environment:
35+
- POSTGRES_USER=postgres
36+
- POSTGRES_PASSWORD=db_password
37+
- POSTGRES_DB=event-manager
38+
volumes:
39+
- pgdata:/var/lib/postgresql/data
40+
networks:
41+
- event-manager-network
42+
ports:
43+
- "5432:5432"
44+
healthcheck:
45+
test: [ "CMD-SHELL", "pg_isready -U postgres -d db_password" ]
46+
interval: 30s
47+
timeout: 10s
48+
retries: 5
49+
50+
redis:
51+
image: redis:latest
52+
container_name: dev-redis
53+
restart: unless-stopped
54+
command: redis-server --appendonly yes --requirepass redis_password
55+
ports:
56+
- "6379:6379"
57+
networks:
58+
- event-manager-network
59+
healthcheck:
60+
test: [ "CMD", "redis-cli", "auth", "redis_password", "ping" ]
61+
interval: 30s
62+
timeout: 10s
63+
retries: 5
64+
65+
loki:
66+
image: grafana/loki:3.5.3 # Recommended by Loki to lock a specific version
67+
restart: unless-stopped
68+
command: -config.file=/etc/loki/local-config.yaml
69+
user: "0"
70+
volumes:
71+
- ./visualization/loki/loki-config.yaml:/etc/loki/local-config.yaml:ro
72+
- loki-data:/loki
73+
- loki-wal:/wal
74+
ports:
75+
- "3100:3100"
76+
networks:
77+
- event-manager-network
78+
79+
promtail:
80+
image: grafana/promtail:3.5 # Recommended by Promtail to lock a specific version
81+
restart: unless-stopped
82+
volumes:
83+
- log-volume:/var/log/event-manager:ro
84+
- ./visualization/promtail/promtail-config.yaml:/etc/promtail/config.yaml:ro
85+
command: -config.file=/etc/promtail/config.yaml
86+
depends_on:
87+
- loki
88+
ports:
89+
- "9081:9080"
90+
networks:
91+
- event-manager-network
92+
93+
grafana:
94+
image: grafana/grafana:latest
95+
restart: unless-stopped
96+
environment:
97+
- GF_SECURITY_ADMIN_PASSWORD=grafana_password
98+
- GF_USERS_ALLOW_SIGN_UP=false
99+
depends_on:
100+
- loki
101+
ports:
102+
- "3000:3000"
103+
volumes:
104+
- grafana-storage:/var/lib/grafana
105+
- ./visualization/grafana/provisioning:/etc/grafana/provisioning:ro
106+
networks:
107+
- event-manager-network
108+
109+
prometheus:
110+
image: prom/prometheus:latest
111+
restart: unless-stopped
112+
volumes:
113+
- ./visualization/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml:ro
114+
ports:
115+
- "9090:9090"
116+
networks:
117+
- event-manager-network
118+
119+
volumes:
120+
log-volume:
121+
pgdata:
122+
grafana-storage:
123+
loki-wal:
124+
loki-data:
125+
126+
networks:
127+
event-manager-network:
128+
driver: bridge

docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ services:
1313

1414

1515
fastapi:
16-
build: .
16+
image: ghcr.io/tech-dex/fastapi-infra-kit:latest
1717
restart: unless-stopped
1818
volumes:
1919
- log-volume:/tmp/event-manager/logs

run_now.sh

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#!/bin/bash
2+
3+
if ! command -v docker &> /dev/null; then
4+
echo "Error: Docker is not installed. Please install Docker and try again."
5+
exit 1
6+
fi
7+
8+
if ! docker compose version &> /dev/null; then
9+
if ! command -v docker-compose &> /dev/null; then
10+
echo "Error: Docker Compose is not installed. Please install Docker Compose and try again."
11+
exit 1
12+
else
13+
docker-compose up -d --build
14+
exit $?
15+
fi
16+
fi
17+
18+
docker compose up -d --build
19+

0 commit comments

Comments
 (0)