@@ -140,5 +140,279 @@ docker run -d \
140
140
3 . 生产环境建议配置适当的资源限制
141
141
4 . 确保挂载的目录有正确的权限
142
142
143
+ ### 多容器部署
144
+ 多个服务独立部署,适合生产环境或集群部署。包含以下服务:
145
+ - ** mcp-gateway** : 核心服务,负责实际的网关服务,可理解为数据面
146
+ - ** web(包含apiserver)** : 管理平台及后端,可理解为控制面
147
+ - ** mock-server** : 模拟服务,提供测试用的服务
148
+
149
+ 适合在生产环境使用,可以按需部署,尤其针对` mcp-gateway ` 可以多副本部署,实现高可用
150
+
151
+ 以下展示使用Docker Compose 部署的示例,该示例:
152
+ 1 . 使用的是postgres作为数据库存储session、代理配置等信息
153
+ 2 . 采用multi即每个服务单独容器部署
154
+ 3 . 使用redis用于配置更新通知、OAuth存储等用途
155
+
156
+ 大体步骤:
157
+ 1 . 配置[ docker-compose.yaml] ( https://raw.githubusercontent.com/mcp-ecosystem/mcp-gateway/refs/heads/main/deploy/docker/multi/docker-compose.yml )
158
+ 2 . 从[ .env.example] ( https://raw.githubusercontent.com/mcp-ecosystem/mcp-gateway/refs/heads/main/.env.example ) 拷贝并配置.env
159
+ 3 . 运行` docker compose up -d `
160
+ 4 . 按需配置` Nginx ` 等LB层
161
+
162
+ #### docker-compose.yaml
163
+ 注意事项
164
+ 1 . 修改里面的db, redis相关的账号密码
165
+ 2 . 按需修改暴露的端口,需要留意目前配置方式可能会让相应端口暴露到公网
166
+
167
+ ``` yaml
168
+ services :
169
+ postgres :
170
+ image : postgres:16
171
+ environment :
172
+ POSTGRES_USER : postgres
173
+ POSTGRES_PASSWORD : " **********"
174
+ POSTGRES_DB : mcp-gateway
175
+ volumes :
176
+ - ./db:/var/lib/postgresql/data
177
+ - /etc/localtime:/etc/localtime:ro
178
+ - /etc/timezone:/etc/timezone:ro
179
+ restart : always
180
+
181
+ redis :
182
+ image : redis:7
183
+ ports :
184
+ - " 6379:6379"
185
+ volumes :
186
+ - ./redis:/data
187
+ - /etc/localtime:/etc/localtime:ro
188
+ - /etc/timezone:/etc/timezone:ro
189
+ command : redis-server --appendonly yes --save "900 1" --save "300 10" --save "60 10000" --requirepass "**********"
190
+ restart : always
191
+
192
+ web :
193
+ image : ghcr.io/mcp-ecosystem/mcp-gateway/web:latest
194
+ ports :
195
+ - " 8080:80"
196
+ - " 5234:5234"
197
+ environment :
198
+ - ENV=production
199
+ - TZ=Asia/Shanghai
200
+ volumes :
201
+ - ./.env:/app/.env
202
+ - ./data:/app/data
203
+ depends_on :
204
+ - postgres
205
+ - mcp-gateway
206
+ - mock-server
207
+ restart : always
208
+
209
+ mcp-gateway :
210
+ image : ghcr.io/mcp-ecosystem/mcp-gateway/mcp-gateway:latest
211
+ ports :
212
+ - " 5235:5235"
213
+ environment :
214
+ - ENV=production
215
+ - TZ=Asia/Shanghai
216
+ volumes :
217
+ - ./.env:/app/.env
218
+ - ./data:/app/data
219
+ depends_on :
220
+ - postgres
221
+ restart : always
222
+
223
+ mock-server :
224
+ image : ghcr.io/mcp-ecosystem/mcp-gateway/mock-server:latest
225
+ ports :
226
+ - " 5236:5236"
227
+ environment :
228
+ - ENV=production
229
+ - TZ=Asia/Shanghai
230
+ volumes :
231
+ - ./.env:/app/.env
232
+ depends_on :
233
+ - postgres
234
+ restart : always
235
+ ` ` `
236
+
237
+ #### .env
238
+ 以下只是示例配置,一定要根据你的环节和需求去调整配置!
239
+ 1. 修改相关db, redis相关的账号密码
240
+
241
+ ` ` ` bash
242
+ # Logger configuration for apiserver
243
+ APISERVER_LOGGER_LEVEL=info
244
+ APISERVER_LOGGER_FORMAT=json
245
+ APISERVER_LOGGER_OUTPUT=stdout
246
+ APISERVER_LOGGER_FILE_PATH=/var/log/mcp-gateway/apiserver.log
247
+ APISERVER_LOGGER_MAX_SIZE=100
248
+ APISERVER_LOGGER_MAX_BACKUPS=3
249
+ APISERVER_LOGGER_MAX_AGE=7
250
+ APISERVER_LOGGER_COMPRESS=true
251
+ APISERVER_LOGGER_COLOR=false
252
+ APISERVER_LOGGER_STACKTRACE=true
253
+
254
+ # Logger configuration for mcp-gateway
255
+ LOGGER_LEVEL=info
256
+ LOGGER_FORMAT=json
257
+ LOGGER_OUTPUT=stdout
258
+ LOGGER_FILE_PATH=/var/log/mcp-gateway/mcp-gateway.log
259
+ LOGGER_MAX_SIZE=100
260
+ LOGGER_MAX_BACKUPS=3
261
+ LOGGER_MAX_AGE=7
262
+ LOGGER_COMPRESS=true
263
+ LOGGER_COLOR=false
264
+ LOGGER_STACKTRACE=true
265
+
266
+ # Database Configuration
267
+ APISERVER_DB_TYPE=postgres
268
+ APISERVER_DB_HOST=postgres
269
+ APISERVER_DB_PORT=5432
270
+ APISERVER_DB_USER=unla
271
+ APISERVER_DB_PASSWORD=**********
272
+ APISERVER_DB_NAME=unla
273
+ APISERVER_DB_SSL_MODE=disable
274
+
275
+ # Gateway Configurations Storage Configuration
276
+ GATEWAY_STORAGE_TYPE=db
277
+ GATEWAY_DB_TYPE=postgres
278
+ GATEWAY_DB_HOST=postgres
279
+ GATEWAY_DB_PORT=5432
280
+ GATEWAY_DB_USER=unla
281
+ GATEWAY_DB_PASSWORD=**********
282
+ GATEWAY_DB_NAME=unla
283
+ GATEWAY_DB_SSL_MODE=disable
284
+ GATEWAY_STORAGE_DISK_PATH=
285
+ GATEWAY_STORAGE_API_URL=
286
+ GATEWAY_STORAGE_API_CONFIG_JSON_PATH=
287
+ GATEWAY_STORAGE_API_TIMEOUT=5s
288
+ GATEWAY_STORAGE_REVISION_HISTORY_LIMIT=10
289
+
290
+ # Notifier Configuration
291
+ APISERVER_NOTIFIER_ROLE=sender
292
+ APISERVER_NOTIFIER_TYPE=redis
293
+ # # Signal Notifier Settings
294
+ APISERVER_NOTIFIER_SIGNAL=SIGHUP
295
+ APISERVER_NOTIFIER_SIGNAL_PID=/var/run/mcp-gateway.pid
296
+ # # API Notifier Settings
297
+ APISERVER_NOTIFIER_API_PORT=5335
298
+ APISERVER_NOTIFIER_API_TARGET_URL=http://mcp-gateway:5335/_reload
299
+ # # Redis Notifier Settings
300
+ APISERVER_NOTIFIER_REDIS_ADDR=redis:6379
301
+ APISERVER_NOTIFIER_REDIS_PASSWORD=**********
302
+ APISERVER_NOTIFIER_REDIS_DB=0
303
+ APISERVER_NOTIFIER_REDIS_TOPIC=mcp-gateway:reload
304
+
305
+ # Notifier Configuration
306
+ NOTIFIER_ROLE=receiver
307
+ NOTIFIER_TYPE=redis
308
+ # # Signal Notifier Settings
309
+ NOTIFIER_SIGNAL=SIGHUP
310
+ NOTIFIER_SIGNAL_PID=/var/run/mcp-gateway.pid
311
+ # # API Notifier Settings
312
+ NOTIFIER_API_PORT=5335
313
+ NOTIFIER_API_TARGET_URL=http://mcp-gateway:5335/_reload
314
+ # # Redis Notifier Settings
315
+ NOTIFIER_REDIS_ADDR=redis:6379
316
+ NOTIFIER_REDIS_USERNAME=
317
+ NOTIFIER_REDIS_PASSWORD=**********
318
+ NOTIFIER_REDIS_DB=0
319
+ NOTIFIER_REDIS_TOPIC=mcp-gateway:reload
320
+
321
+ # Session storage type: memory or redis
322
+ SESSION_STORAGE_TYPE=redis
323
+ SESSION_REDIS_ADDR=redis:6379
324
+ SESSION_REDIS_USERNAME=
325
+ SESSION_REDIS_PASSWORD=**********
326
+ SESSION_REDIS_DB=0
327
+ SESSION_REDIS_TOPIC=mcp-gateway:session
328
+ SESSION_REDIS_PREFIX=
329
+ SESSION_REDIS_TTL=24h
330
+
331
+ OPENAI_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1/
332
+ OPENAI_API_KEY=sk-**********
333
+ OPENAI_MODEL=qwen-turbo-2025-04-28
334
+
335
+ MCP_GATEWAY_PID=/var/run/mcp-gateway.pid
336
+ MCP_GATEWAY_PORT=5235
337
+ MCP_GATEWAY_RELOAD_INTERVAL=600s
338
+ MCP_GATEWAY_RELOAD_SWITCH=true
339
+
340
+ VITE_API_BASE_URL=/api
341
+ VITE_WS_BASE_URL=/ws
342
+ VITE_MCP_GATEWAY_BASE_URL=/mcp
343
+ VITE_BASE_URL=/
344
+
345
+ APISERVER_JWT_SECRET_KEY=**********
346
+ APISERVER_JWT_DURATION=72h
347
+
348
+ TZ=Asia/Shanghai
349
+
350
+ SUPER_ADMIN_USERNAME=admin
351
+ SUPER_ADMIN_PASSWORD=**********
352
+
353
+ APISERVER_I18N_PATH=./configs/i18n
354
+
355
+ OAUTH2_ISSUER=https://github.com/mcp-ecosystem/mcp-gateway
356
+ OAUTH2_STORAGE_TYPE=redis
357
+ OAUTH2_REDIS_ADDR=redis:6379
358
+ OAUTH2_REDIS_PASSWORD=**********
359
+ OAUTH2_REDIS_DB=1
360
+ ```
143
361
362
+ #### nginx
363
+ 这边只提供vhosts的配置方式举例:
364
+ 1 . 按需调整你的域名
365
+ 2 . 按需调整服务到反代到上游服务器的地址
366
+
367
+ ``` nginx
368
+ server {
369
+ server_name example.docs.unla.amoylab.com;
370
+
371
+ location / {
372
+ proxy_pass http://127.0.0.1:8080;
373
+ proxy_set_header Host $host;
374
+ }
375
+
376
+ location /api/ {
377
+ proxy_pass http://127.0.0.1:5234/api/;
378
+ proxy_set_header Host $host;
379
+ proxy_set_header X-Real-IP $remote_addr;
380
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
381
+ proxy_set_header X-Forwarded-Proto $scheme;
382
+ }
383
+
384
+ location /ws/ {
385
+ proxy_pass http://127.0.0.1:5234/api/ws/;
386
+ proxy_http_version 1.1;
387
+ proxy_set_header Upgrade $http_upgrade;
388
+ proxy_set_header Connection "upgrade";
389
+ proxy_set_header Host $host;
390
+ proxy_set_header X-Real-IP $remote_addr;
391
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
392
+ proxy_set_header X-Forwarded-Proto $scheme;
393
+ }
394
+
395
+ location /gateway/ {
396
+ proxy_pass http://127.0.0.1:5235/;
397
+ proxy_set_header Host $host;
398
+ proxy_set_header X-Real-IP $remote_addr;
399
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
400
+ proxy_set_header X-Forwarded-Proto $scheme;
401
+
402
+ proxy_buffering off;
403
+ proxy_cache off;
404
+ chunked_transfer_encoding off;
405
+ proxy_read_timeout 3600s;
406
+ proxy_send_timeout 3600s;
407
+ }
408
+
409
+ location /mock/ {
410
+ proxy_pass http://127.0.0.1:5236/;
411
+ proxy_set_header Host $host;
412
+ }
413
+ }
414
+ ```
144
415
416
+ #### 重要访问URL
417
+ 1 . Web: [ https://example.docs.unla.amoylab.com/ ] ( https://example.docs.unla.amoylab.com/ )
418
+ 2 . MCP Gateway: [ https://example.docs.unla.amoylab.com/gateway/ * ] ( https://example.docs.unla.amoylab.com/gateway/* ) ,比如[ https://example.docs.unla.amoylab.com/gateway/mcp/user/mcp ] ( https://example.docs.unla.amoylab.com/gateway/mcp/user/mcp )
0 commit comments