forked from tiammomo/ModelPort
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdocker-compose.yml
More file actions
184 lines (178 loc) · 6.5 KB
/
Copy pathdocker-compose.yml
File metadata and controls
184 lines (178 loc) · 6.5 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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
name: modelport
services:
postgres:
# Starts only when using the internal database. When MODELPORT_DATABASE_URL
# is set (an external PostgreSQL), this service moves to the "internal-db"
# profile and is not started unless explicitly enabled with
# `--profile internal-db`.
profiles: ["${MODELPORT_DATABASE_URL:+internal-db}"]
image: postgres:18.4-alpine
environment:
POSTGRES_DB: ${MODELPORT_POSTGRES_DB:-modelport}
POSTGRES_USER: ${MODELPORT_POSTGRES_USER:-modelport}
POSTGRES_PASSWORD: ${MODELPORT_POSTGRES_PASSWORD:?set MODELPORT_POSTGRES_PASSWORD in .env}
PGDATA: /var/lib/postgresql/18/docker
volumes:
- modelport-postgres-18:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U \"$${POSTGRES_USER}\" -d \"$${POSTGRES_DB}\""]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
stop_grace_period: ${MODELPORT_POSTGRES_STOP_GRACE_PERIOD:-1m}
logging:
driver: json-file
options:
max-size: ${MODELPORT_LOG_MAX_SIZE:-10m}
max-file: "${MODELPORT_LOG_MAX_FILES:-5}"
modelport:
build:
context: .
dockerfile: Dockerfile
args:
MODELPORT_VERSION: ${MODELPORT_VERSION:-0.1.0}
MODELPORT_SOURCE_REVISION: ${MODELPORT_SOURCE_REVISION:-unknown}
MODELPORT_SOURCE_STATE: ${MODELPORT_SOURCE_STATE:-unknown}
MODELPORT_BUILD_DATE: ${MODELPORT_BUILD_DATE:-unknown}
image: ${MODELPORT_IMAGE:-modelport:local}
pull_policy: ${MODELPORT_PULL_POLICY:-never}
init: true
read_only: true
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
tmpfs:
- /tmp:rw,noexec,nosuid,size=64m
env_file:
- ${MODELPORT_COMPOSE_ENV_FILE:-.env}
environment:
MODELPORT_BIND: 0.0.0.0:38082
MODELPORT_ENV_FILE: /config/.env
MODELPORT_STATE_DIR: /data
MODELPORT_CONFIG: /config/config.toml
MODELPORT_DATABASE_URL: ${MODELPORT_DATABASE_URL:-postgres://${MODELPORT_POSTGRES_USER:-modelport}:${MODELPORT_POSTGRES_PASSWORD:?set MODELPORT_POSTGRES_PASSWORD in .env}@postgres:5432/${MODELPORT_POSTGRES_DB:-modelport}}
MODELPORT_TRUSTED_PROXIES: ${MODELPORT_TRUSTED_PROXIES:-127.0.0.1,::1,172.16.0.0/12}
MODELPORT_ALLOWED_ORIGINS: ${MODELPORT_ALLOWED_ORIGINS:-}
RUST_LOG: ${RUST_LOG:-model_port=info,tower_http=info}
extra_hosts:
- "host.docker.internal:host-gateway"
ports:
- "${MODELPORT_API_PUBLISH:-127.0.0.1:38082}:38082"
volumes:
- modelport-data:/data
- type: bind
source: ${MODELPORT_COMPOSE_ENV_FILE:-./.env}
target: /config/.env
read_only: true
# Optional file-based provider config:
- ./config.toml:/config/config.toml:ro
# The image-level healthcheck is liveness-only. Compose overrides it with
# authenticated storage readiness so `healthy` means the gateway may take
# traffic. Shared deployments should issue a dedicated scoped probe key.
healthcheck:
test:
- CMD-SHELL
- >-
probe_key="$${MODELPORT_HEALTHCHECK_API_KEY:-$${MODELPORT_AUTH_TOKEN:-}}";
test -n "$${probe_key}" &&
curl -fsS -H "x-api-key: $${probe_key}" http://127.0.0.1:38082/readyz >/dev/null
interval: 15s
timeout: 5s
start_period: 20s
retries: 4
restart: unless-stopped
# Default request timeout is 600s and finalizer drain is 30s. This window
# lets an ordinary in-flight request finish before Docker sends SIGKILL.
stop_grace_period: ${MODELPORT_STOP_GRACE_PERIOD:-11m}
logging:
driver: json-file
options:
max-size: ${MODELPORT_LOG_MAX_SIZE:-10m}
max-file: "${MODELPORT_LOG_MAX_FILES:-5}"
dashboard:
build:
context: .
dockerfile: dashboard/Dockerfile
args:
MODELPORT_VERSION: ${MODELPORT_VERSION:-0.1.0}
MODELPORT_SOURCE_REVISION: ${MODELPORT_SOURCE_REVISION:-unknown}
MODELPORT_SOURCE_STATE: ${MODELPORT_SOURCE_STATE:-unknown}
MODELPORT_BUILD_DATE: ${MODELPORT_BUILD_DATE:-unknown}
image: ${MODELPORT_DASHBOARD_IMAGE:-modelport-dashboard:local}
pull_policy: ${MODELPORT_PULL_POLICY:-never}
init: true
read_only: true
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
tmpfs:
- /tmp:rw,noexec,nosuid,size=32m
ports:
- "${MODELPORT_DASHBOARD_PUBLISH:-127.0.0.1:33002}:8080"
restart: unless-stopped
stop_grace_period: ${MODELPORT_DASHBOARD_STOP_GRACE_PERIOD:-30s}
logging:
driver: json-file
options:
max-size: ${MODELPORT_LOG_MAX_SIZE:-10m}
max-file: "${MODELPORT_LOG_MAX_FILES:-5}"
ops-agent:
profiles: ["ops-agent"]
build:
context: .
dockerfile: ops-agent/Dockerfile
args:
MODELPORT_VERSION: ${MODELPORT_VERSION:-0.1.0}
MODELPORT_SOURCE_REVISION: ${MODELPORT_SOURCE_REVISION:-unknown}
MODELPORT_SOURCE_STATE: ${MODELPORT_SOURCE_STATE:-unknown}
MODELPORT_BUILD_DATE: ${MODELPORT_BUILD_DATE:-unknown}
image: ${MODELPORT_OPS_AGENT_IMAGE:-modelport-ops-agent:local}
pull_policy: ${MODELPORT_PULL_POLICY:-never}
init: true
read_only: true
cap_drop:
- ALL
security_opt:
- no-new-privileges:true
cpus: ${MODELPORT_OPS_CPU_LIMIT:-0.50}
mem_limit: ${MODELPORT_OPS_MEMORY_LIMIT:-256m}
pids_limit: ${MODELPORT_OPS_PIDS_LIMIT:-128}
tmpfs:
- /tmp:rw,noexec,nosuid,size=16m
environment:
MODELPORT_OPS_BASE_URL: http://modelport:38082
MODELPORT_OPS_API_KEY: ${MODELPORT_OPS_API_KEY:-}
MODELPORT_OPS_MODEL_API_KEY: ${MODELPORT_OPS_MODEL_API_KEY:-}
MODELPORT_OPS_MODE: ${MODELPORT_OPS_MODE:-shadow}
MODELPORT_OPS_INTERVAL_SECONDS: ${MODELPORT_OPS_INTERVAL_SECONDS:-300}
MODELPORT_OPS_WEBHOOK_URL: ${MODELPORT_OPS_WEBHOOK_URL:-}
RUST_LOG: ${MODELPORT_OPS_RUST_LOG:-modelport_ops_agent=info}
volumes:
- modelport-ops-spool:/var/lib/modelport-ops
depends_on:
modelport:
condition: service_healthy
healthcheck:
test: ["CMD-SHELL", "curl -fsS http://127.0.0.1:38083/readyz >/dev/null"]
interval: 30s
timeout: 5s
start_period: 20s
retries: 4
restart: unless-stopped
stop_grace_period: 30s
logging:
driver: json-file
options:
max-size: ${MODELPORT_LOG_MAX_SIZE:-10m}
max-file: "${MODELPORT_LOG_MAX_FILES:-5}"
volumes:
modelport-data:
modelport-postgres-18:
modelport-ops-spool:
networks:
default:
name: ${MODELPORT_NETWORK_NAME:-modelport_default}
external: true