Skip to content

Commit ec26538

Browse files
authored
fix(infra): Add root_path to FastAPI app (TracecatHQ#289)
* Remove unnessary internal routes in caddyfile * Add FasdtAPI root_path env var and config * Update docker compose files * Remove trailing / in caddy api routes
1 parent 23e6ff7 commit ec26538

File tree

6 files changed

+10
-9
lines changed

6 files changed

+10
-9
lines changed

.env.example

+2
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ TRACECAT__SERVICE_KEY=your-tracecat-service-key
2121
TRACECAT__SIGNING_SECRET=your-tracecat-signing-secret
2222
# API Service URL
2323
TRACECAT__API_URL=http://api:8000
24+
# Root path to deal with extra path prefix behind the reverse proxy
25+
TRACECAT__API_ROOT_PATH=/api
2426
# Public Runner URL
2527
# This is the public URL for incoming webhooks
2628
# If you wish to expose your webhooks to the internet, you can use a tunneling service like ngrok.

Caddyfile

+1-9
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,7 @@
11
{$BASE_DOMAIN} {
22
bind {$ADDRESS} # Binds to all available network interfaces if not specified
3-
handle_path /api/* {
3+
handle_path /api* {
44
reverse_proxy http://api:8000
55
}
66
reverse_proxy http://ui:3000
77
}
8-
9-
http://api:8000 {
10-
reverse_proxy api:8000
11-
}
12-
13-
temporal:7233 {
14-
reverse_proxy temporal:7233
15-
}

docker-compose.dev.yml

+2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ services:
2323
DUMP_TRACECAT_RESULT: 0
2424
LOG_LEVEL: ${LOG_LEVEL}
2525
TRACECAT__API_URL: ${TRACECAT__API_URL}
26+
TRACECAT__API_ROOT_PATH: ${TRACECAT__API_ROOT_PATH}
2627
TRACECAT__APP_ENV: ${TRACECAT__APP_ENV}
2728
TRACECAT__DB_ENCRYPTION_KEY: ${TRACECAT__DB_ENCRYPTION_KEY} # Sensitive
2829
TRACECAT__DB_URI: ${TRACECAT__DB_URI} # Sensitive
@@ -49,6 +50,7 @@ services:
4950
DUMP_TRACECAT_RESULT: 0
5051
LOG_LEVEL: ${LOG_LEVEL}
5152
TRACECAT__API_URL: ${TRACECAT__API_URL}
53+
TRACECAT__API_ROOT_PATH: ${TRACECAT__API_ROOT_PATH}
5254
TRACECAT__APP_ENV: ${TRACECAT__APP_ENV}
5355
TRACECAT__DB_ENCRYPTION_KEY: ${TRACECAT__DB_ENCRYPTION_KEY} # Sensitive
5456
TRACECAT__DB_URI: ${TRACECAT__DB_URI} # Sensitive

docker-compose.yml

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ services:
2020
environment:
2121
LOG_LEVEL: ${LOG_LEVEL}
2222
TRACECAT__API_URL: ${TRACECAT__API_URL}
23+
TRACECAT__API_ROOT_PATH: ${TRACECAT__API_ROOT_PATH}
2324
TRACECAT__APP_ENV: ${TRACECAT__APP_ENV}
2425
TRACECAT__DB_ENCRYPTION_KEY: ${TRACECAT__DB_ENCRYPTION_KEY} # Sensitive
2526
TRACECAT__DB_URI: ${TRACECAT__DB_URI} # Sensitive
@@ -42,6 +43,7 @@ services:
4243
environment:
4344
LOG_LEVEL: ${LOG_LEVEL}
4445
TRACECAT__API_URL: ${TRACECAT__API_URL}
46+
TRACECAT__API_ROOT_PATH: ${TRACECAT__API_ROOT_PATH}
4547
TRACECAT__APP_ENV: ${TRACECAT__APP_ENV}
4648
TRACECAT__DB_ENCRYPTION_KEY: ${TRACECAT__DB_ENCRYPTION_KEY} # Sensitive
4749
TRACECAT__DB_URI: ${TRACECAT__DB_URI} # Sensitive

tracecat/api/app.py

+1
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ def create_app(**kwargs) -> FastAPI:
115115
generate_unique_id_function=custom_generate_unique_id,
116116
lifespan=lifespan,
117117
default_response_class=ORJSONResponse,
118+
root_path=config.TRACECAT__API_ROOT_PATH,
118119
**kwargs,
119120
)
120121
app.logger = logger

tracecat/config.py

+2
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@
2424
TRACECAT__DB_ENDPOINT = os.environ.get("TRACECAT__DB_ENDPOINT")
2525
TRACECAT__DB_PORT = os.environ.get("TRACECAT__DB_PORT")
2626

27+
TRACECAT__API_ROOT_PATH = os.environ.get("TRACECAT__API_ROOT_PATH", "/api")
28+
2729
# TODO: Set this as an environment variable
2830
TRACECAT__SERVICE_ROLES_WHITELIST = [
2931
"tracecat-runner",

0 commit comments

Comments
 (0)