mirror of
https://github.com/labring/FastGPT.git
synced 2025-12-25 20:02:47 +00:00
perf: deploy docs; docker-compose (#5722)
* docs: https://localhost => http://localhost * chore: docker compose; deploy/dev docs * chore: quick-start page * chore: add comment & remove leading space of vector config * chore: remove redundant install.sh scripts * chore: adjust milvus and ob, image dyanmic config; readme.md * chore: update pnpm-lock.yaml
This commit is contained in:
parent
5a2ba5a340
commit
32a3b9216b
|
|
@ -0,0 +1,66 @@
|
|||
## 更新 docker compose 脚本
|
||||
|
||||
### 正常更新(不动服务,只改版本)
|
||||
1. 更新 `args.json` 中的版本号
|
||||
2. 在 `FastGPT` 目录执行 `pnpm run gen:deploy` 即可
|
||||
|
||||
### 加服务
|
||||
比如要添加 `example` 服务:
|
||||
1. init.mjs 的 Services Enum 中添加 example
|
||||
2. 更新 templates/docker-compose.[dev|prod].yml 文件,把服务的相关配置加进去,并且:服务的 image 改为 ${{example.image}}:${{example.tag}}
|
||||
3. 在 `args.json` 中添加 image 和 tag, 注意名字要和 `Service Enum` 中声明的一样才能被正确替换
|
||||
|
||||
### 加向量库
|
||||
比如添加 `exampleDB` 向量库:
|
||||
1. 添加 vector service 配置在 `templates/vector` 下面,例如 `templates/vector/exampleDB.txt` 内容可以参考其他 txt,注意缩进,image 名字也要替换成 ${{exampleDB.image}}:${{exampleDB:tag}}
|
||||
2. 在 `args.json` 中添加 `exampleDB` 的配置
|
||||
3. init.mjs vector enum 中添加 `vector`
|
||||
4. init.mjs 中添加 vector 的相关配置:
|
||||
```ts
|
||||
const vector = {
|
||||
// pg, milvus, ob ...
|
||||
vector: {
|
||||
db: '', // 空即可
|
||||
config: `/
|
||||
VECTOR_URL:vectordb://xxxxx
|
||||
`, //注意 第一行反引号后面的 / 不能少(去除首个换行符); 左边的两个空格的缩进不能变,否则会语法错误
|
||||
extra: `` // 额外的配置,可以看 ob 的那个,需要一个 config 字段引入 init.sql
|
||||
}
|
||||
}
|
||||
```
|
||||
5. init.mjs 读入 vector 配置
|
||||
```json
|
||||
{ // 这是个块作用域, 直接搜 read in Vectors
|
||||
// read in Vectors
|
||||
// pg, ob ....
|
||||
const vectordb = fs.readFileSync(path.join(process.cwd(), 'templates', 'vector', 'vector.txt'));
|
||||
vector.vector.db = String(vectordb);
|
||||
}
|
||||
```
|
||||
6. init.mjs 最后生成的时候,需要添加
|
||||
```ts
|
||||
fs.promises.writeFile(
|
||||
path.join(process.cwd(), 'docker', 'cn', 'docker-compose.vector.yml'),
|
||||
replace(template, 'cn', VectorEnum.vector)
|
||||
),
|
||||
fs.promises.writeFile(
|
||||
path.join(process.cwd(), 'docker', 'global', 'docker-compose.ziliiz.yml'),
|
||||
replace(template, 'global', VectorEnum.vector)
|
||||
),
|
||||
```
|
||||
|
||||
## yaml 的锚点和引用
|
||||
|
||||
`&` 标志一个锚点
|
||||
|
||||
```yaml
|
||||
x-share-config: &x-share-config 'I am the config content'
|
||||
x-share-config-list: &x-share-config-list
|
||||
key1: value
|
||||
key2: value
|
||||
```
|
||||
|
||||
`*` 引用一个锚点
|
||||
```yaml
|
||||
some_other_example: *x-share-config-list
|
||||
```
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
{
|
||||
"tags": {
|
||||
"fastgpt": "v4.13.0",
|
||||
"fastgpt-sandbox": "v4.13.0",
|
||||
"fastgpt-mcp_server": "v4.13.0",
|
||||
"fastgpt-plugin": "v0.2.0",
|
||||
"aiproxy": "v0.3.2",
|
||||
"aiproxy-pg": "0.8.0-pg15",
|
||||
"mongo": "5.0.18",
|
||||
"redis": "7.2-alpine",
|
||||
"minio": "RELEASE.2025-09-07T16-13-09Z",
|
||||
"pg": "0.8.0-pg15",
|
||||
"milvus-minio": "RELEASE.2023-03-20T20-16-18Z",
|
||||
"milvus-etcd": "v3.5.5",
|
||||
"milvus-standalone": "v2.4.3",
|
||||
"oceanbase": "4.3.5-lts"
|
||||
},
|
||||
"images": {
|
||||
"cn": {
|
||||
"fastgpt": "registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt",
|
||||
"fastgpt-plugin": "registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-plugin",
|
||||
"fastgpt-sandbox": "registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox",
|
||||
"fastgpt-mcp_server": "registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server",
|
||||
"aiproxy": "registry.cn-hangzhou.aliyuncs.com/labring/aiproxy",
|
||||
"aiproxy-pg": "registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector",
|
||||
"mongo": "registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo",
|
||||
"redis": "redis",
|
||||
"minio": "minio/minio",
|
||||
"pg": "registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector",
|
||||
"milvus-minio": "minio/minio",
|
||||
"milvus-etcd": "quay.io/coreos/etcd",
|
||||
"milvus-standalone": "milvusdb/milvus",
|
||||
"oceanbase": "oceanbase/oceanbase-ce"
|
||||
},
|
||||
"global": {
|
||||
"fastgpt": "ghcr.io/labring/fastgpt",
|
||||
"fastgpt-plugin": "ghcr.io/labring/fastgpt-plugin",
|
||||
"fastgpt-sandbox": "ghcr.io/labring/fastgpt-sandbox",
|
||||
"fastgpt-mcp_server": "ghcr.io/labring/fastgpt-mcp_server",
|
||||
"aiproxy": "ghcr.io/labring/aiproxy",
|
||||
"aiproxy-pg": "pgvector/pgvector",
|
||||
"mongo": "mongo",
|
||||
"redis": "redis",
|
||||
"minio": "minio/minio",
|
||||
"pg": "pgvector/pgvector",
|
||||
"milvus-minio": "minio/minio",
|
||||
"milvus-etcd": "quay.io/coreos/etcd",
|
||||
"milvus-standalone": "milvusdb/milvus",
|
||||
"oceanbase": "oceanbase/oceanbase-ce"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
*
|
||||
!.gitignore
|
||||
!docker-compose.yml
|
||||
!docker-compose.cn.yml
|
||||
|
|
@ -0,0 +1,212 @@
|
|||
# 用于开发的 docker-compose 文件:
|
||||
# - 只包含 FastGPT 的最小化运行条件
|
||||
# - 没有 FastGPT 本体
|
||||
# - 所有端口都映射到外层
|
||||
# - pg: 5432
|
||||
# - mongo: 27017
|
||||
# - redis: 6379
|
||||
# - fastgpt-sandbox: 3002
|
||||
# - fastgpt-plugin: 3003
|
||||
# - aiproxy: 3010
|
||||
# - 使用 pgvector 作为默认的向量库
|
||||
|
||||
services:
|
||||
# Vector DB
|
||||
pg:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:0.8.0-pg15
|
||||
container_name: pg
|
||||
restart: always
|
||||
ports: # 生产环境建议不要暴露
|
||||
- 5432:5432
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
|
||||
- POSTGRES_USER=username
|
||||
- POSTGRES_PASSWORD=password
|
||||
- POSTGRES_DB=postgres
|
||||
volumes:
|
||||
- ./pg/data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'username', '-d', 'postgres']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
|
||||
# DB
|
||||
mongo:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # cpu 不支持 AVX 时候使用 4.4.29
|
||||
container_name: mongo
|
||||
restart: always
|
||||
ports:
|
||||
- 27017:27017
|
||||
networks:
|
||||
- fastgpt
|
||||
command: mongod --keyFile /data/mongodb.key --replSet rs0
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=myusername
|
||||
- MONGO_INITDB_ROOT_PASSWORD=mypassword
|
||||
volumes:
|
||||
- ./mongo/data:/data/db
|
||||
entrypoint:
|
||||
- bash
|
||||
- -c
|
||||
- |
|
||||
openssl rand -base64 128 > /data/mongodb.key
|
||||
chmod 400 /data/mongodb.key
|
||||
chown 999:999 /data/mongodb.key
|
||||
echo 'const isInited = rs.status().ok === 1
|
||||
if(!isInited){
|
||||
rs.initiate({
|
||||
_id: "rs0",
|
||||
members: [
|
||||
{ _id: 0, host: "mongo:27017" }
|
||||
]
|
||||
})
|
||||
}' > /data/initReplicaSet.js
|
||||
# 启动MongoDB服务
|
||||
exec docker-entrypoint.sh "$$@" &
|
||||
|
||||
# 等待MongoDB服务启动
|
||||
until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')"; do
|
||||
echo "Waiting for MongoDB to start..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# 执行初始化副本集的脚本
|
||||
mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js
|
||||
|
||||
# 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
|
||||
wait $$!
|
||||
redis:
|
||||
image: redis:7.2-alpine
|
||||
container_name: redis
|
||||
ports:
|
||||
- 6379:6379
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
command: |
|
||||
redis-server --requirepass mypassword --loglevel warning --maxclients 10000 --appendonly yes --save 60 10 --maxmemory 4gb --maxmemory-policy noeviction
|
||||
healthcheck:
|
||||
test: ['CMD', 'redis-cli', '-a', 'mypassword', 'ping']
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
volumes:
|
||||
- ./redis/data:/data
|
||||
fastgpt-minio:
|
||||
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
|
||||
container_name: fastgpt-minio
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
ports:
|
||||
- '9000:9000'
|
||||
- '9001:9001'
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
volumes:
|
||||
- ./fastgpt-minio:/data
|
||||
command: server /data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
sandbox:
|
||||
container_name: sandbox
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.13.0
|
||||
ports:
|
||||
- 3002:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
fastgpt-mcp-server:
|
||||
container_name: fastgpt-mcp-server
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.13.0
|
||||
ports:
|
||||
- 3005:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
environment:
|
||||
- FASTGPT_ENDPOINT=http://fastgpt:3000
|
||||
fastgpt-plugin:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-plugin:v0.2.0
|
||||
container_name: fastgpt-plugin
|
||||
restart: always
|
||||
ports:
|
||||
- 3003:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
- AUTH_TOKEN=token
|
||||
- S3_ENDPOINT=fastgpt-minio
|
||||
- S3_PORT=9000
|
||||
- S3_USE_SSL=false
|
||||
- S3_ACCESS_KEY=minioadmin
|
||||
- S3_SECRET_KEY=minioadmin
|
||||
- S3_BUCKET=fastgpt-plugins
|
||||
- S3_TOOL_BUCKET=fastgpt-tool # 系统工具,创建的临时文件,存储的桶,要求公开读私有写。
|
||||
- S3_PLUGIN_BUCKET=fastgpt-plugin # 系统插件热安装文件的桶,私有读写。
|
||||
- RETENTION_DAYS=15 # 系统工具临时文件保存天数
|
||||
- MONGODB_URI=mongodb://myusername:mypassword@mongo:27017/fastgpt?authSource=admin&directConnection=true
|
||||
- REDIS_URL=redis://default:mypassword@redis:6379
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
# AI Proxy
|
||||
aiproxy:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.3.2
|
||||
container_name: aiproxy
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 3010:3000
|
||||
depends_on:
|
||||
aiproxy_pg:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
# 对应 fastgpt 里的AIPROXY_API_TOKEN
|
||||
- ADMIN_KEY=aiproxy
|
||||
# 错误日志详情保存时间(小时)
|
||||
- LOG_DETAIL_STORAGE_HOURS=1
|
||||
# 数据库连接地址
|
||||
- SQL_DSN=postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
# 最大重试次数
|
||||
- RETRY_TIMES=3
|
||||
# 不需要计费
|
||||
- BILLING_ENABLED=false
|
||||
# 不需要严格检测模型
|
||||
- DISABLE_MODEL_CONFIG=true
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/api/status']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
aiproxy_pg:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:0.8.0-pg15 # docker hub
|
||||
restart: unless-stopped
|
||||
container_name: aiproxy_pg
|
||||
volumes:
|
||||
- ./aiproxy_pg:/var/lib/postgresql/data
|
||||
networks:
|
||||
- aiproxy
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: aiproxy
|
||||
POSTGRES_PASSWORD: aiproxy
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'postgres', '-d', 'aiproxy']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
networks:
|
||||
fastgpt:
|
||||
aiproxy:
|
||||
|
|
@ -0,0 +1,212 @@
|
|||
# 用于开发的 docker-compose 文件:
|
||||
# - 只包含 FastGPT 的最小化运行条件
|
||||
# - 没有 FastGPT 本体
|
||||
# - 所有端口都映射到外层
|
||||
# - pg: 5432
|
||||
# - mongo: 27017
|
||||
# - redis: 6379
|
||||
# - fastgpt-sandbox: 3002
|
||||
# - fastgpt-plugin: 3003
|
||||
# - aiproxy: 3010
|
||||
# - 使用 pgvector 作为默认的向量库
|
||||
|
||||
services:
|
||||
# Vector DB
|
||||
pg:
|
||||
image: pgvector/pgvector:0.8.0-pg15
|
||||
container_name: pg
|
||||
restart: always
|
||||
ports: # 生产环境建议不要暴露
|
||||
- 5432:5432
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
|
||||
- POSTGRES_USER=username
|
||||
- POSTGRES_PASSWORD=password
|
||||
- POSTGRES_DB=postgres
|
||||
volumes:
|
||||
- ./pg/data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'username', '-d', 'postgres']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
|
||||
# DB
|
||||
mongo:
|
||||
image: mongo:5.0.18 # cpu 不支持 AVX 时候使用 4.4.29
|
||||
container_name: mongo
|
||||
restart: always
|
||||
ports:
|
||||
- 27017:27017
|
||||
networks:
|
||||
- fastgpt
|
||||
command: mongod --keyFile /data/mongodb.key --replSet rs0
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=myusername
|
||||
- MONGO_INITDB_ROOT_PASSWORD=mypassword
|
||||
volumes:
|
||||
- ./mongo/data:/data/db
|
||||
entrypoint:
|
||||
- bash
|
||||
- -c
|
||||
- |
|
||||
openssl rand -base64 128 > /data/mongodb.key
|
||||
chmod 400 /data/mongodb.key
|
||||
chown 999:999 /data/mongodb.key
|
||||
echo 'const isInited = rs.status().ok === 1
|
||||
if(!isInited){
|
||||
rs.initiate({
|
||||
_id: "rs0",
|
||||
members: [
|
||||
{ _id: 0, host: "mongo:27017" }
|
||||
]
|
||||
})
|
||||
}' > /data/initReplicaSet.js
|
||||
# 启动MongoDB服务
|
||||
exec docker-entrypoint.sh "$$@" &
|
||||
|
||||
# 等待MongoDB服务启动
|
||||
until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')"; do
|
||||
echo "Waiting for MongoDB to start..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# 执行初始化副本集的脚本
|
||||
mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js
|
||||
|
||||
# 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
|
||||
wait $$!
|
||||
redis:
|
||||
image: redis:7.2-alpine
|
||||
container_name: redis
|
||||
ports:
|
||||
- 6379:6379
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
command: |
|
||||
redis-server --requirepass mypassword --loglevel warning --maxclients 10000 --appendonly yes --save 60 10 --maxmemory 4gb --maxmemory-policy noeviction
|
||||
healthcheck:
|
||||
test: ['CMD', 'redis-cli', '-a', 'mypassword', 'ping']
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
volumes:
|
||||
- ./redis/data:/data
|
||||
fastgpt-minio:
|
||||
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
|
||||
container_name: fastgpt-minio
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
ports:
|
||||
- '9000:9000'
|
||||
- '9001:9001'
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
volumes:
|
||||
- ./fastgpt-minio:/data
|
||||
command: server /data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
sandbox:
|
||||
container_name: sandbox
|
||||
image: ghcr.io/labring/fastgpt-sandbox:v4.13.0
|
||||
ports:
|
||||
- 3002:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
fastgpt-mcp-server:
|
||||
container_name: fastgpt-mcp-server
|
||||
image: ghcr.io/labring/fastgpt-mcp_server:v4.13.0
|
||||
ports:
|
||||
- 3005:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
environment:
|
||||
- FASTGPT_ENDPOINT=http://fastgpt:3000
|
||||
fastgpt-plugin:
|
||||
image: ghcr.io/labring/fastgpt-plugin:v0.2.0
|
||||
container_name: fastgpt-plugin
|
||||
restart: always
|
||||
ports:
|
||||
- 3003:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
- AUTH_TOKEN=token
|
||||
- S3_ENDPOINT=fastgpt-minio
|
||||
- S3_PORT=9000
|
||||
- S3_USE_SSL=false
|
||||
- S3_ACCESS_KEY=minioadmin
|
||||
- S3_SECRET_KEY=minioadmin
|
||||
- S3_BUCKET=fastgpt-plugins
|
||||
- S3_TOOL_BUCKET=fastgpt-tool # 系统工具,创建的临时文件,存储的桶,要求公开读私有写。
|
||||
- S3_PLUGIN_BUCKET=fastgpt-plugin # 系统插件热安装文件的桶,私有读写。
|
||||
- RETENTION_DAYS=15 # 系统工具临时文件保存天数
|
||||
- MONGODB_URI=mongodb://myusername:mypassword@mongo:27017/fastgpt?authSource=admin&directConnection=true
|
||||
- REDIS_URL=redis://default:mypassword@redis:6379
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
# AI Proxy
|
||||
aiproxy:
|
||||
image: ghcr.io/labring/aiproxy:v0.3.2
|
||||
container_name: aiproxy
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 3010:3000
|
||||
depends_on:
|
||||
aiproxy_pg:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
# 对应 fastgpt 里的AIPROXY_API_TOKEN
|
||||
- ADMIN_KEY=aiproxy
|
||||
# 错误日志详情保存时间(小时)
|
||||
- LOG_DETAIL_STORAGE_HOURS=1
|
||||
# 数据库连接地址
|
||||
- SQL_DSN=postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
# 最大重试次数
|
||||
- RETRY_TIMES=3
|
||||
# 不需要计费
|
||||
- BILLING_ENABLED=false
|
||||
# 不需要严格检测模型
|
||||
- DISABLE_MODEL_CONFIG=true
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/api/status']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
aiproxy_pg:
|
||||
image: pgvector/pgvector:0.8.0-pg15 # docker hub
|
||||
restart: unless-stopped
|
||||
container_name: aiproxy_pg
|
||||
volumes:
|
||||
- ./aiproxy_pg:/var/lib/postgresql/data
|
||||
networks:
|
||||
- aiproxy
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: aiproxy
|
||||
POSTGRES_PASSWORD: aiproxy
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'postgres', '-d', 'aiproxy']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
networks:
|
||||
fastgpt:
|
||||
aiproxy:
|
||||
|
|
@ -0,0 +1,300 @@
|
|||
# 用于部署的 docker-compose 文件:
|
||||
# - 向量库为 Pgvector
|
||||
# - FastGPT 端口映射为 3000:3000
|
||||
# - FastGPT-mcp-server 端口映射 3005:3000
|
||||
# - 建议修改账密后再运行
|
||||
|
||||
# plugin auth token
|
||||
x-plugin-auth-token: &x-plugin-auth-token token
|
||||
# aiproxy token
|
||||
x-aiproxy-token: &x-aiproxy-token token
|
||||
# 数据库连接相关配置
|
||||
x-share-db-config: &x-share-db-config
|
||||
MONGODB_URI: mongodb://username:password@mongo:27017/fastgpt?authSource=admin
|
||||
DB_MAX_LINK: 30
|
||||
REDIS_URL: redis://default:mypassword@redis:6379
|
||||
S3_ENDPOINT: fastgpt-minio
|
||||
S3_PORT: 9000
|
||||
S3_USE_SSL: false
|
||||
S3_ACCESS_KEY: minioadmin
|
||||
S3_SECRET_KEY: minioadmin
|
||||
|
||||
# 向量库相关配置
|
||||
x-vec-config: &x-vec-config
|
||||
MILVUS_ADDRESS: http://milvusStandalone:19530
|
||||
MILVUS_TOKEN: none
|
||||
|
||||
|
||||
version: '3.3'
|
||||
services:
|
||||
# Vector DB
|
||||
milvus-minio:
|
||||
container_name: milvus-minio
|
||||
image: minio/minio:RELEASE.2023-03-20T20-16-18Z
|
||||
environment:
|
||||
MINIO_ACCESS_KEY: minioadmin
|
||||
MINIO_SECRET_KEY: minioadmin
|
||||
networks:
|
||||
- vector
|
||||
volumes:
|
||||
- ./milvus-minio:/minio_data
|
||||
command: minio server /minio_data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
# milvus
|
||||
milvus-etcd:
|
||||
container_name: milvus-etcd
|
||||
image:
|
||||
image: quay.io/coreos/etcd:v3.5.5
|
||||
environment:
|
||||
- ETCD_AUTO_COMPACTION_MODE=revision
|
||||
- ETCD_AUTO_COMPACTION_RETENTION=1000
|
||||
- ETCD_QUOTA_BACKEND_BYTES=4294967296
|
||||
- ETCD_SNAPSHOT_COUNT=50000
|
||||
networks:
|
||||
- vector
|
||||
volumes:
|
||||
- ./milvus/etcd:/etcd
|
||||
command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
|
||||
healthcheck:
|
||||
test: ['CMD', 'etcdctl', 'endpoint', 'health']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
milvusStandalone:
|
||||
container_name: milvusStandalone
|
||||
image: milvusdb/milvus:v2.4.3
|
||||
command: ['milvus', 'run', 'standalone']
|
||||
security_opt:
|
||||
- seccomp:unconfined
|
||||
environment:
|
||||
ETCD_ENDPOINTS: milvus-etcd:2379
|
||||
MINIO_ADDRESS: milvus-minio:9000
|
||||
networks:
|
||||
- fastgpt
|
||||
- vector
|
||||
volumes:
|
||||
- ./milvus/data:/var/lib/milvus
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9091/healthz']
|
||||
interval: 30s
|
||||
start_period: 90s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
depends_on:
|
||||
- 'milvus-etcd'
|
||||
- 'milvus-minio'
|
||||
|
||||
|
||||
mongo:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # cpu 不支持 AVX 时候使用 4.4.29
|
||||
container_name: mongo
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
command: mongod --keyFile /data/mongodb.key --replSet rs0
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=myusername
|
||||
- MONGO_INITDB_ROOT_PASSWORD=mypassword
|
||||
volumes:
|
||||
- ./mongo/data:/data/db
|
||||
entrypoint:
|
||||
- bash
|
||||
- -c
|
||||
- |
|
||||
openssl rand -base64 128 > /data/mongodb.key
|
||||
chmod 400 /data/mongodb.key
|
||||
chown 999:999 /data/mongodb.key
|
||||
echo 'const isInited = rs.status().ok === 1
|
||||
if(!isInited){
|
||||
rs.initiate({
|
||||
_id: "rs0",
|
||||
members: [
|
||||
{ _id: 0, host: "mongo:27017" }
|
||||
]
|
||||
})
|
||||
}' > /data/initReplicaSet.js
|
||||
# 启动MongoDB服务
|
||||
exec docker-entrypoint.sh "$$@" &
|
||||
|
||||
# 等待MongoDB服务启动
|
||||
until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')"; do
|
||||
echo "Waiting for MongoDB to start..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# 执行初始化副本集的脚本
|
||||
mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js
|
||||
|
||||
# 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
|
||||
wait $$!
|
||||
redis:
|
||||
image: redis:7.2-alpine
|
||||
container_name: redis
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
command: |
|
||||
redis-server --requirepass mypassword --loglevel warning --maxclients 10000 --appendonly yes --save 60 10 --maxmemory 4gb --maxmemory-policy noeviction
|
||||
healthcheck:
|
||||
test: ['CMD', 'redis-cli', '-a', 'mypassword', 'ping']
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
volumes:
|
||||
- ./redis/data:/data
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.13.0 # git
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
- pg
|
||||
restart: always
|
||||
environment:
|
||||
<<: [*x-share-db-config, *x-vec-config]
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
FE_DOMAIN:
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
DEFAULT_ROOT_PSW: 1234
|
||||
# 登录凭证密钥
|
||||
TOKEN_KEY: any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
ROOT_KEY: root_key
|
||||
# 文件阅读加密
|
||||
FILE_TOKEN_KEY: filetoken
|
||||
# 密钥加密key
|
||||
AES256_SECRET_KEY: fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
PLUGIN_BASE_URL: http://fastgpt-plugin:3000
|
||||
PLUGIN_TOKEN: *x-plugin-auth-token
|
||||
# sandbox 地址
|
||||
SANDBOX_URL: http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
AIPROXY_API_ENDPOINT: http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 数据库最大连接数
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
WORKFLOW_MAX_LOOP_TIMES: 100
|
||||
# 对话文件过期天数
|
||||
CHAT_FILE_EXPIRE_TIME: 7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
|
||||
fastgpt-minio:
|
||||
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
|
||||
container_name: fastgpt-minio
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
volumes:
|
||||
- ./fastgpt-minio:/data
|
||||
command: server /data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
sandbox:
|
||||
container_name: sandbox
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
fastgpt-mcp-server:
|
||||
container_name: fastgpt-mcp-server
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
ports:
|
||||
- 3005:3000
|
||||
restart: always
|
||||
environment:
|
||||
- FASTGPT_ENDPOINT=http://fastgpt:3000
|
||||
fastgpt-plugin:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-plugin:v0.2.0
|
||||
container_name: fastgpt-plugin
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
<<: *x-share-db-config
|
||||
AUTH_TOKEN: *x-plugin-auth-token
|
||||
S3_BUCKET: fastgpt-plugins
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
# AI Proxy
|
||||
aiproxy:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.3.2
|
||||
container_name: aiproxy
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
aiproxy_pg:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
# 对应 fastgpt 里的AIPROXY_API_TOKEN
|
||||
ADMIN_KEY: *x-aiproxy-token
|
||||
# 错误日志详情保存时间(小时)
|
||||
LOG_DETAIL_STORAGE_HOURS: 1
|
||||
# 数据库连接地址
|
||||
SQL_DSN: postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
# 最大重试次数
|
||||
RETRY_TIMES: 3
|
||||
# 不需要计费
|
||||
BILLING_ENABLED: false
|
||||
# 不需要严格检测模型
|
||||
DISABLE_MODEL_CONFIG: true
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/api/status']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
aiproxy_pg:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:0.8.0-pg15 # docker hub
|
||||
restart: unless-stopped
|
||||
container_name: aiproxy_pg
|
||||
volumes:
|
||||
- ./aiproxy_pg:/var/lib/postgresql/data
|
||||
networks:
|
||||
- aiproxy
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: aiproxy
|
||||
POSTGRES_PASSWORD: aiproxy
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'postgres', '-d', 'aiproxy']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
networks:
|
||||
fastgpt:
|
||||
aiproxy:
|
||||
vector:
|
||||
|
||||
|
|
@ -0,0 +1,280 @@
|
|||
# 用于部署的 docker-compose 文件:
|
||||
# - 向量库为 Pgvector
|
||||
# - FastGPT 端口映射为 3000:3000
|
||||
# - FastGPT-mcp-server 端口映射 3005:3000
|
||||
# - 建议修改账密后再运行
|
||||
|
||||
# plugin auth token
|
||||
x-plugin-auth-token: &x-plugin-auth-token token
|
||||
# aiproxy token
|
||||
x-aiproxy-token: &x-aiproxy-token token
|
||||
# 数据库连接相关配置
|
||||
x-share-db-config: &x-share-db-config
|
||||
MONGODB_URI: mongodb://username:password@mongo:27017/fastgpt?authSource=admin
|
||||
DB_MAX_LINK: 30
|
||||
REDIS_URL: redis://default:mypassword@redis:6379
|
||||
S3_ENDPOINT: fastgpt-minio
|
||||
S3_PORT: 9000
|
||||
S3_USE_SSL: false
|
||||
S3_ACCESS_KEY: minioadmin
|
||||
S3_SECRET_KEY: minioadmin
|
||||
|
||||
# 向量库相关配置
|
||||
x-vec-config: &x-vec-config
|
||||
undefined
|
||||
|
||||
version: '3.3'
|
||||
services:
|
||||
# Vector DB
|
||||
ob:
|
||||
image: oceanbase/oceanbase-ce:4.3.5-lts
|
||||
container_name: ob
|
||||
restart: always
|
||||
# ports: # 生产环境建议不要暴露
|
||||
# - 2881:2881
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
|
||||
- OB_SYS_PASSWORD=obsyspassword
|
||||
# 不同于传统数据库,OceanBase 数据库的账号包含更多字段,包括用户名、租户名和集群名。经典格式为"用户名@租户名#集群名"
|
||||
# 比如用mysql客户端连接时,根据本文件的默认配置,应该指定 "-uroot@tenantname"
|
||||
- OB_TENANT_NAME=tenantname
|
||||
- OB_TENANT_PASSWORD=tenantpassword
|
||||
# MODE分为MINI和NORMAL, 后者会最大程度使用主机资源
|
||||
- MODE=MINI
|
||||
- OB_SERVER_IP=127.0.0.1
|
||||
# 更多环境变量配置见oceanbase官方文档: https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002013494
|
||||
volumes:
|
||||
- ../ob/data:/root/ob
|
||||
- ../ob/config:/root/.obd/cluster
|
||||
configs:
|
||||
- source: init_sql
|
||||
target: /root/boot/init.d/init.sql
|
||||
healthcheck:
|
||||
# obclient -h127.0.0.1 -P2881 -uroot@tenantname -ptenantpassword -e "SELECT 1;"
|
||||
test:
|
||||
[
|
||||
"CMD-SHELL",
|
||||
'obclient -h$${OB_SERVER_IP} -P2881 -uroot@$${OB_TENANT_NAME} -p$${OB_TENANT_PASSWORD} -e "SELECT 1;"',
|
||||
]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 1000
|
||||
start_period: 10s
|
||||
|
||||
|
||||
mongo:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # cpu 不支持 AVX 时候使用 4.4.29
|
||||
container_name: mongo
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
command: mongod --keyFile /data/mongodb.key --replSet rs0
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=myusername
|
||||
- MONGO_INITDB_ROOT_PASSWORD=mypassword
|
||||
volumes:
|
||||
- ./mongo/data:/data/db
|
||||
entrypoint:
|
||||
- bash
|
||||
- -c
|
||||
- |
|
||||
openssl rand -base64 128 > /data/mongodb.key
|
||||
chmod 400 /data/mongodb.key
|
||||
chown 999:999 /data/mongodb.key
|
||||
echo 'const isInited = rs.status().ok === 1
|
||||
if(!isInited){
|
||||
rs.initiate({
|
||||
_id: "rs0",
|
||||
members: [
|
||||
{ _id: 0, host: "mongo:27017" }
|
||||
]
|
||||
})
|
||||
}' > /data/initReplicaSet.js
|
||||
# 启动MongoDB服务
|
||||
exec docker-entrypoint.sh "$$@" &
|
||||
|
||||
# 等待MongoDB服务启动
|
||||
until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')"; do
|
||||
echo "Waiting for MongoDB to start..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# 执行初始化副本集的脚本
|
||||
mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js
|
||||
|
||||
# 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
|
||||
wait $$!
|
||||
redis:
|
||||
image: redis:7.2-alpine
|
||||
container_name: redis
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
command: |
|
||||
redis-server --requirepass mypassword --loglevel warning --maxclients 10000 --appendonly yes --save 60 10 --maxmemory 4gb --maxmemory-policy noeviction
|
||||
healthcheck:
|
||||
test: ['CMD', 'redis-cli', '-a', 'mypassword', 'ping']
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
volumes:
|
||||
- ./redis/data:/data
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.13.0 # git
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
- pg
|
||||
restart: always
|
||||
environment:
|
||||
<<: [*x-share-db-config, *x-vec-config]
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
FE_DOMAIN:
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
DEFAULT_ROOT_PSW: 1234
|
||||
# 登录凭证密钥
|
||||
TOKEN_KEY: any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
ROOT_KEY: root_key
|
||||
# 文件阅读加密
|
||||
FILE_TOKEN_KEY: filetoken
|
||||
# 密钥加密key
|
||||
AES256_SECRET_KEY: fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
PLUGIN_BASE_URL: http://fastgpt-plugin:3000
|
||||
PLUGIN_TOKEN: *x-plugin-auth-token
|
||||
# sandbox 地址
|
||||
SANDBOX_URL: http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
AIPROXY_API_ENDPOINT: http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 数据库最大连接数
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
WORKFLOW_MAX_LOOP_TIMES: 100
|
||||
# 对话文件过期天数
|
||||
CHAT_FILE_EXPIRE_TIME: 7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
|
||||
fastgpt-minio:
|
||||
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
|
||||
container_name: fastgpt-minio
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
volumes:
|
||||
- ./fastgpt-minio:/data
|
||||
command: server /data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
sandbox:
|
||||
container_name: sandbox
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
fastgpt-mcp-server:
|
||||
container_name: fastgpt-mcp-server
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
ports:
|
||||
- 3005:3000
|
||||
restart: always
|
||||
environment:
|
||||
- FASTGPT_ENDPOINT=http://fastgpt:3000
|
||||
fastgpt-plugin:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-plugin:v0.2.0
|
||||
container_name: fastgpt-plugin
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
<<: *x-share-db-config
|
||||
AUTH_TOKEN: *x-plugin-auth-token
|
||||
S3_BUCKET: fastgpt-plugins
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
# AI Proxy
|
||||
aiproxy:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.3.2
|
||||
container_name: aiproxy
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
aiproxy_pg:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
# 对应 fastgpt 里的AIPROXY_API_TOKEN
|
||||
ADMIN_KEY: *x-aiproxy-token
|
||||
# 错误日志详情保存时间(小时)
|
||||
LOG_DETAIL_STORAGE_HOURS: 1
|
||||
# 数据库连接地址
|
||||
SQL_DSN: postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
# 最大重试次数
|
||||
RETRY_TIMES: 3
|
||||
# 不需要计费
|
||||
BILLING_ENABLED: false
|
||||
# 不需要严格检测模型
|
||||
DISABLE_MODEL_CONFIG: true
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/api/status']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
aiproxy_pg:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:0.8.0-pg15 # docker hub
|
||||
restart: unless-stopped
|
||||
container_name: aiproxy_pg
|
||||
volumes:
|
||||
- ./aiproxy_pg:/var/lib/postgresql/data
|
||||
networks:
|
||||
- aiproxy
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: aiproxy
|
||||
POSTGRES_PASSWORD: aiproxy
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'postgres', '-d', 'aiproxy']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
networks:
|
||||
fastgpt:
|
||||
aiproxy:
|
||||
vector:
|
||||
configs:
|
||||
init_sql:
|
||||
name: init_sql
|
||||
content: |
|
||||
ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30;
|
||||
|
||||
|
|
@ -0,0 +1,257 @@
|
|||
# 用于部署的 docker-compose 文件:
|
||||
# - 向量库为 Pgvector
|
||||
# - FastGPT 端口映射为 3000:3000
|
||||
# - FastGPT-mcp-server 端口映射 3005:3000
|
||||
# - 建议修改账密后再运行
|
||||
|
||||
# plugin auth token
|
||||
x-plugin-auth-token: &x-plugin-auth-token token
|
||||
# aiproxy token
|
||||
x-aiproxy-token: &x-aiproxy-token token
|
||||
# 数据库连接相关配置
|
||||
x-share-db-config: &x-share-db-config
|
||||
MONGODB_URI: mongodb://username:password@mongo:27017/fastgpt?authSource=admin
|
||||
DB_MAX_LINK: 30
|
||||
REDIS_URL: redis://default:mypassword@redis:6379
|
||||
S3_ENDPOINT: fastgpt-minio
|
||||
S3_PORT: 9000
|
||||
S3_USE_SSL: false
|
||||
S3_ACCESS_KEY: minioadmin
|
||||
S3_SECRET_KEY: minioadmin
|
||||
|
||||
# 向量库相关配置
|
||||
x-vec-config: &x-vec-config
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres
|
||||
|
||||
version: '3.3'
|
||||
services:
|
||||
# Vector DB
|
||||
pg:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:0.8.0-pg15
|
||||
container_name: pg
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
|
||||
- POSTGRES_USER=username
|
||||
- POSTGRES_PASSWORD=password
|
||||
- POSTGRES_DB=postgres
|
||||
volumes:
|
||||
- ./pg/data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'username', '-d', 'postgres']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
|
||||
|
||||
mongo:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # cpu 不支持 AVX 时候使用 4.4.29
|
||||
container_name: mongo
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
command: mongod --keyFile /data/mongodb.key --replSet rs0
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=myusername
|
||||
- MONGO_INITDB_ROOT_PASSWORD=mypassword
|
||||
volumes:
|
||||
- ./mongo/data:/data/db
|
||||
entrypoint:
|
||||
- bash
|
||||
- -c
|
||||
- |
|
||||
openssl rand -base64 128 > /data/mongodb.key
|
||||
chmod 400 /data/mongodb.key
|
||||
chown 999:999 /data/mongodb.key
|
||||
echo 'const isInited = rs.status().ok === 1
|
||||
if(!isInited){
|
||||
rs.initiate({
|
||||
_id: "rs0",
|
||||
members: [
|
||||
{ _id: 0, host: "mongo:27017" }
|
||||
]
|
||||
})
|
||||
}' > /data/initReplicaSet.js
|
||||
# 启动MongoDB服务
|
||||
exec docker-entrypoint.sh "$$@" &
|
||||
|
||||
# 等待MongoDB服务启动
|
||||
until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')"; do
|
||||
echo "Waiting for MongoDB to start..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# 执行初始化副本集的脚本
|
||||
mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js
|
||||
|
||||
# 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
|
||||
wait $$!
|
||||
redis:
|
||||
image: redis:7.2-alpine
|
||||
container_name: redis
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
command: |
|
||||
redis-server --requirepass mypassword --loglevel warning --maxclients 10000 --appendonly yes --save 60 10 --maxmemory 4gb --maxmemory-policy noeviction
|
||||
healthcheck:
|
||||
test: ['CMD', 'redis-cli', '-a', 'mypassword', 'ping']
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
volumes:
|
||||
- ./redis/data:/data
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.13.0 # git
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
- pg
|
||||
restart: always
|
||||
environment:
|
||||
<<: [*x-share-db-config, *x-vec-config]
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
FE_DOMAIN:
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
DEFAULT_ROOT_PSW: 1234
|
||||
# 登录凭证密钥
|
||||
TOKEN_KEY: any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
ROOT_KEY: root_key
|
||||
# 文件阅读加密
|
||||
FILE_TOKEN_KEY: filetoken
|
||||
# 密钥加密key
|
||||
AES256_SECRET_KEY: fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
PLUGIN_BASE_URL: http://fastgpt-plugin:3000
|
||||
PLUGIN_TOKEN: *x-plugin-auth-token
|
||||
# sandbox 地址
|
||||
SANDBOX_URL: http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
AIPROXY_API_ENDPOINT: http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 数据库最大连接数
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
WORKFLOW_MAX_LOOP_TIMES: 100
|
||||
# 对话文件过期天数
|
||||
CHAT_FILE_EXPIRE_TIME: 7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
|
||||
fastgpt-minio:
|
||||
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
|
||||
container_name: fastgpt-minio
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
volumes:
|
||||
- ./fastgpt-minio:/data
|
||||
command: server /data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
sandbox:
|
||||
container_name: sandbox
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
fastgpt-mcp-server:
|
||||
container_name: fastgpt-mcp-server
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
ports:
|
||||
- 3005:3000
|
||||
restart: always
|
||||
environment:
|
||||
- FASTGPT_ENDPOINT=http://fastgpt:3000
|
||||
fastgpt-plugin:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-plugin:v0.2.0
|
||||
container_name: fastgpt-plugin
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
<<: *x-share-db-config
|
||||
AUTH_TOKEN: *x-plugin-auth-token
|
||||
S3_BUCKET: fastgpt-plugins
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
# AI Proxy
|
||||
aiproxy:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.3.2
|
||||
container_name: aiproxy
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
aiproxy_pg:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
# 对应 fastgpt 里的AIPROXY_API_TOKEN
|
||||
ADMIN_KEY: *x-aiproxy-token
|
||||
# 错误日志详情保存时间(小时)
|
||||
LOG_DETAIL_STORAGE_HOURS: 1
|
||||
# 数据库连接地址
|
||||
SQL_DSN: postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
# 最大重试次数
|
||||
RETRY_TIMES: 3
|
||||
# 不需要计费
|
||||
BILLING_ENABLED: false
|
||||
# 不需要严格检测模型
|
||||
DISABLE_MODEL_CONFIG: true
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/api/status']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
aiproxy_pg:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:0.8.0-pg15 # docker hub
|
||||
restart: unless-stopped
|
||||
container_name: aiproxy_pg
|
||||
volumes:
|
||||
- ./aiproxy_pg:/var/lib/postgresql/data
|
||||
networks:
|
||||
- aiproxy
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: aiproxy
|
||||
POSTGRES_PASSWORD: aiproxy
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'postgres', '-d', 'aiproxy']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
networks:
|
||||
fastgpt:
|
||||
aiproxy:
|
||||
vector:
|
||||
|
||||
|
|
@ -0,0 +1,240 @@
|
|||
# 用于部署的 docker-compose 文件:
|
||||
# - 向量库为 Pgvector
|
||||
# - FastGPT 端口映射为 3000:3000
|
||||
# - FastGPT-mcp-server 端口映射 3005:3000
|
||||
# - 建议修改账密后再运行
|
||||
|
||||
# plugin auth token
|
||||
x-plugin-auth-token: &x-plugin-auth-token token
|
||||
# aiproxy token
|
||||
x-aiproxy-token: &x-aiproxy-token token
|
||||
# 数据库连接相关配置
|
||||
x-share-db-config: &x-share-db-config
|
||||
MONGODB_URI: mongodb://username:password@mongo:27017/fastgpt?authSource=admin
|
||||
DB_MAX_LINK: 30
|
||||
REDIS_URL: redis://default:mypassword@redis:6379
|
||||
S3_ENDPOINT: fastgpt-minio
|
||||
S3_PORT: 9000
|
||||
S3_USE_SSL: false
|
||||
S3_ACCESS_KEY: minioadmin
|
||||
S3_SECRET_KEY: minioadmin
|
||||
|
||||
# 向量库相关配置
|
||||
x-vec-config: &x-vec-config
|
||||
MILVUS_ADDRESS: zilliz_cloud_address
|
||||
MILVUS_TOKEN: zilliz_cloud_token
|
||||
|
||||
version: '3.3'
|
||||
services:
|
||||
# Vector DB
|
||||
|
||||
|
||||
mongo:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # cpu 不支持 AVX 时候使用 4.4.29
|
||||
container_name: mongo
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
command: mongod --keyFile /data/mongodb.key --replSet rs0
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=myusername
|
||||
- MONGO_INITDB_ROOT_PASSWORD=mypassword
|
||||
volumes:
|
||||
- ./mongo/data:/data/db
|
||||
entrypoint:
|
||||
- bash
|
||||
- -c
|
||||
- |
|
||||
openssl rand -base64 128 > /data/mongodb.key
|
||||
chmod 400 /data/mongodb.key
|
||||
chown 999:999 /data/mongodb.key
|
||||
echo 'const isInited = rs.status().ok === 1
|
||||
if(!isInited){
|
||||
rs.initiate({
|
||||
_id: "rs0",
|
||||
members: [
|
||||
{ _id: 0, host: "mongo:27017" }
|
||||
]
|
||||
})
|
||||
}' > /data/initReplicaSet.js
|
||||
# 启动MongoDB服务
|
||||
exec docker-entrypoint.sh "$$@" &
|
||||
|
||||
# 等待MongoDB服务启动
|
||||
until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')"; do
|
||||
echo "Waiting for MongoDB to start..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# 执行初始化副本集的脚本
|
||||
mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js
|
||||
|
||||
# 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
|
||||
wait $$!
|
||||
redis:
|
||||
image: redis:7.2-alpine
|
||||
container_name: redis
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
command: |
|
||||
redis-server --requirepass mypassword --loglevel warning --maxclients 10000 --appendonly yes --save 60 10 --maxmemory 4gb --maxmemory-policy noeviction
|
||||
healthcheck:
|
||||
test: ['CMD', 'redis-cli', '-a', 'mypassword', 'ping']
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
volumes:
|
||||
- ./redis/data:/data
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.13.0 # git
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
- pg
|
||||
restart: always
|
||||
environment:
|
||||
<<: [*x-share-db-config, *x-vec-config]
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
FE_DOMAIN:
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
DEFAULT_ROOT_PSW: 1234
|
||||
# 登录凭证密钥
|
||||
TOKEN_KEY: any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
ROOT_KEY: root_key
|
||||
# 文件阅读加密
|
||||
FILE_TOKEN_KEY: filetoken
|
||||
# 密钥加密key
|
||||
AES256_SECRET_KEY: fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
PLUGIN_BASE_URL: http://fastgpt-plugin:3000
|
||||
PLUGIN_TOKEN: *x-plugin-auth-token
|
||||
# sandbox 地址
|
||||
SANDBOX_URL: http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
AIPROXY_API_ENDPOINT: http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 数据库最大连接数
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
WORKFLOW_MAX_LOOP_TIMES: 100
|
||||
# 对话文件过期天数
|
||||
CHAT_FILE_EXPIRE_TIME: 7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
|
||||
fastgpt-minio:
|
||||
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
|
||||
container_name: fastgpt-minio
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
volumes:
|
||||
- ./fastgpt-minio:/data
|
||||
command: server /data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
sandbox:
|
||||
container_name: sandbox
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
fastgpt-mcp-server:
|
||||
container_name: fastgpt-mcp-server
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
ports:
|
||||
- 3005:3000
|
||||
restart: always
|
||||
environment:
|
||||
- FASTGPT_ENDPOINT=http://fastgpt:3000
|
||||
fastgpt-plugin:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-plugin:v0.2.0
|
||||
container_name: fastgpt-plugin
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
<<: *x-share-db-config
|
||||
AUTH_TOKEN: *x-plugin-auth-token
|
||||
S3_BUCKET: fastgpt-plugins
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
# AI Proxy
|
||||
aiproxy:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.3.2
|
||||
container_name: aiproxy
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
aiproxy_pg:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
# 对应 fastgpt 里的AIPROXY_API_TOKEN
|
||||
ADMIN_KEY: *x-aiproxy-token
|
||||
# 错误日志详情保存时间(小时)
|
||||
LOG_DETAIL_STORAGE_HOURS: 1
|
||||
# 数据库连接地址
|
||||
SQL_DSN: postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
# 最大重试次数
|
||||
RETRY_TIMES: 3
|
||||
# 不需要计费
|
||||
BILLING_ENABLED: false
|
||||
# 不需要严格检测模型
|
||||
DISABLE_MODEL_CONFIG: true
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/api/status']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
aiproxy_pg:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:0.8.0-pg15 # docker hub
|
||||
restart: unless-stopped
|
||||
container_name: aiproxy_pg
|
||||
volumes:
|
||||
- ./aiproxy_pg:/var/lib/postgresql/data
|
||||
networks:
|
||||
- aiproxy
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: aiproxy
|
||||
POSTGRES_PASSWORD: aiproxy
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'postgres', '-d', 'aiproxy']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
networks:
|
||||
fastgpt:
|
||||
aiproxy:
|
||||
vector:
|
||||
|
||||
|
|
@ -1,2 +0,0 @@
|
|||
ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30;
|
||||
|
||||
|
|
@ -1,7 +1,29 @@
|
|||
# 数据库的默认账号和密码仅首次运行时设置有效
|
||||
# 如果修改了账号密码,记得改数据库和项目连接参数,别只改一处~
|
||||
# 该配置文件只是给快速启动,测试使用。正式使用,记得务必修改账号密码,以及调整合适的知识库参数,共享内存等。
|
||||
# 如何无法访问 dockerhub 和 git,可以用阿里云(阿里云没有arm包)
|
||||
# 用于部署的 docker-compose 文件:
|
||||
# - 向量库为 Pgvector
|
||||
# - FastGPT 端口映射为 3000:3000
|
||||
# - FastGPT-mcp-server 端口映射 3005:3000
|
||||
# - 建议修改账密后再运行
|
||||
|
||||
# plugin auth token
|
||||
x-plugin-auth-token: &x-plugin-auth-token token
|
||||
# aiproxy token
|
||||
x-aiproxy-token: &x-aiproxy-token token
|
||||
# 数据库连接相关配置
|
||||
x-share-db-config: &x-share-db-config
|
||||
MONGODB_URI: mongodb://username:password@mongo:27017/fastgpt?authSource=admin
|
||||
DB_MAX_LINK: 30
|
||||
REDIS_URL: redis://default:mypassword@redis:6379
|
||||
S3_ENDPOINT: fastgpt-minio
|
||||
S3_PORT: 9000
|
||||
S3_USE_SSL: false
|
||||
S3_ACCESS_KEY: minioadmin
|
||||
S3_SECRET_KEY: minioadmin
|
||||
|
||||
# 向量库相关配置
|
||||
x-vec-config: &x-vec-config
|
||||
MILVUS_ADDRESS: http://milvusStandalone:19530
|
||||
MILVUS_TOKEN: none
|
||||
|
||||
|
||||
version: '3.3'
|
||||
services:
|
||||
|
|
@ -12,11 +34,8 @@ services:
|
|||
environment:
|
||||
MINIO_ACCESS_KEY: minioadmin
|
||||
MINIO_SECRET_KEY: minioadmin
|
||||
# ports:
|
||||
# - '9001:9001'
|
||||
# - '9000:9000'
|
||||
networks:
|
||||
- fastgpt
|
||||
- vector
|
||||
volumes:
|
||||
- ./milvus-minio:/minio_data
|
||||
command: minio server /minio_data --console-address ":9001"
|
||||
|
|
@ -26,8 +45,9 @@ services:
|
|||
timeout: 20s
|
||||
retries: 3
|
||||
# milvus
|
||||
milvusEtcd:
|
||||
container_name: milvusEtcd
|
||||
milvus-etcd:
|
||||
container_name: milvus-etcd
|
||||
image:
|
||||
image: quay.io/coreos/etcd:v3.5.5
|
||||
environment:
|
||||
- ETCD_AUTO_COMPACTION_MODE=revision
|
||||
|
|
@ -35,7 +55,7 @@ services:
|
|||
- ETCD_QUOTA_BACKEND_BYTES=4294967296
|
||||
- ETCD_SNAPSHOT_COUNT=50000
|
||||
networks:
|
||||
- fastgpt
|
||||
- vector
|
||||
volumes:
|
||||
- ./milvus/etcd:/etcd
|
||||
command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
|
||||
|
|
@ -51,10 +71,11 @@ services:
|
|||
security_opt:
|
||||
- seccomp:unconfined
|
||||
environment:
|
||||
ETCD_ENDPOINTS: milvusEtcd:2379
|
||||
ETCD_ENDPOINTS: milvus-etcd:2379
|
||||
MINIO_ADDRESS: milvus-minio:9000
|
||||
networks:
|
||||
- fastgpt
|
||||
- vector
|
||||
volumes:
|
||||
- ./milvus/data:/var/lib/milvus
|
||||
healthcheck:
|
||||
|
|
@ -64,14 +85,12 @@ services:
|
|||
timeout: 20s
|
||||
retries: 3
|
||||
depends_on:
|
||||
- 'milvusEtcd'
|
||||
- 'milvus-etcd'
|
||||
- 'milvus-minio'
|
||||
|
||||
# DB
|
||||
|
||||
mongo:
|
||||
image: mongo:5.0.18 # dockerhub
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # 阿里云
|
||||
# image: mongo:4.4.29 # cpu不支持AVX时候使用
|
||||
image: mongo:5.0.18 # cpu 不支持 AVX 时候使用 4.4.29
|
||||
container_name: mongo
|
||||
restart: always
|
||||
networks:
|
||||
|
|
@ -128,15 +147,65 @@ services:
|
|||
start_period: 30s
|
||||
volumes:
|
||||
- ./redis/data:/data
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: ghcr.io/labring/fastgpt:v4.13.0 # git
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
- pg
|
||||
restart: always
|
||||
environment:
|
||||
<<: [*x-share-db-config, *x-vec-config]
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
FE_DOMAIN:
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
DEFAULT_ROOT_PSW: 1234
|
||||
# 登录凭证密钥
|
||||
TOKEN_KEY: any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
ROOT_KEY: root_key
|
||||
# 文件阅读加密
|
||||
FILE_TOKEN_KEY: filetoken
|
||||
# 密钥加密key
|
||||
AES256_SECRET_KEY: fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
PLUGIN_BASE_URL: http://fastgpt-plugin:3000
|
||||
PLUGIN_TOKEN: *x-plugin-auth-token
|
||||
# sandbox 地址
|
||||
SANDBOX_URL: http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
AIPROXY_API_ENDPOINT: http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 数据库最大连接数
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
WORKFLOW_MAX_LOOP_TIMES: 100
|
||||
# 对话文件过期天数
|
||||
CHAT_FILE_EXPIRE_TIME: 7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
|
||||
fastgpt-minio:
|
||||
image: minio/minio:latest
|
||||
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
|
||||
container_name: fastgpt-minio
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
ports: # comment out if you do not need to expose the port (in production environment, you should not expose the port)
|
||||
- '9000:9000'
|
||||
- '9001:9001'
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
|
|
@ -148,112 +217,38 @@ services:
|
|||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: ghcr.io/labring/fastgpt:v4.12.4 # git
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.12.4 # 阿里云
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
- milvusStandalone
|
||||
restart: always
|
||||
environment:
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
- FE_DOMAIN=
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
- DEFAULT_ROOT_PSW=1234
|
||||
# 登录凭证密钥
|
||||
- TOKEN_KEY=any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
- ROOT_KEY=root_key
|
||||
# 文件阅读加密
|
||||
- FILE_TOKEN_KEY=filetoken
|
||||
# 密钥加密key
|
||||
- AES256_SECRET_KEY=fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
- PLUGIN_BASE_URL=http://fastgpt-plugin:3000
|
||||
- PLUGIN_TOKEN=xxxxxx
|
||||
# sandbox 地址
|
||||
- SANDBOX_URL=http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
- AIPROXY_API_ENDPOINT=http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
- AIPROXY_API_TOKEN=aiproxy
|
||||
|
||||
# 数据库最大连接数
|
||||
- DB_MAX_LINK=30
|
||||
# MongoDB 连接参数. 用户名myusername,密码mypassword。
|
||||
- MONGODB_URI=mongodb://myusername:mypassword@mongo:27017/fastgpt?authSource=admin
|
||||
# Redis 连接参数
|
||||
- REDIS_URL=redis://default:mypassword@redis:6379
|
||||
# 向量库 连接参数
|
||||
- MILVUS_ADDRESS=http://milvusStandalone:19530
|
||||
- MILVUS_TOKEN=none
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
- LOG_LEVEL=info
|
||||
- STORE_LOG_LEVEL=warn
|
||||
# 工作流最大运行次数
|
||||
- WORKFLOW_MAX_RUN_TIMES=1000
|
||||
# 批量执行节点,最大输入长度
|
||||
- WORKFLOW_MAX_LOOP_TIMES=100
|
||||
# 对话文件过期天数
|
||||
- CHAT_FILE_EXPIRE_TIME=7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
sandbox:
|
||||
container_name: sandbox
|
||||
image: ghcr.io/labring/fastgpt-sandbox:v4.12.4 # git
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.12.4 # 阿里云
|
||||
image: ghcr.io/labring/fastgpt-sandbox:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
fastgpt-mcp-server:
|
||||
container_name: fastgpt-mcp-server
|
||||
image: ghcr.io/labring/fastgpt-mcp_server:v4.12.4 # git
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.12.4 # 阿里云
|
||||
ports:
|
||||
- 3005:3000
|
||||
image: ghcr.io/labring/fastgpt-mcp_server:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
ports:
|
||||
- 3005:3000
|
||||
restart: always
|
||||
environment:
|
||||
- FASTGPT_ENDPOINT=http://fastgpt:3000
|
||||
fastgpt-plugin:
|
||||
image: ghcr.io/labring/fastgpt-plugin:v0.1.13 # git
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-plugin:v0.1.13 # 阿里云
|
||||
image: ghcr.io/labring/fastgpt-plugin:v0.2.0
|
||||
container_name: fastgpt-plugin
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
- AUTH_TOKEN=xxxxxx # 如果不需要鉴权可以直接去掉这个环境变量
|
||||
|
||||
# 改成 minio 可访问地址,例如 http://192.168.2.2:9000/fastgpt-plugins
|
||||
# 必须指向 Minio 的桶的地址
|
||||
# 如果 Minio 可以直接通过外网访问,可以不设置这个环境变量
|
||||
# - MINIO_CUSTOM_ENDPOINT=http://192.168.2.2:9000
|
||||
|
||||
- MINIO_ENDPOINT=fastgpt-minio
|
||||
- MINIO_PORT=9000
|
||||
- MINIO_USE_SSL=false
|
||||
- MINIO_ACCESS_KEY=minioadmin
|
||||
- MINIO_SECRET_KEY=minioadmin
|
||||
- MINIO_BUCKET=fastgpt-plugins
|
||||
<<: *x-share-db-config
|
||||
AUTH_TOKEN: *x-plugin-auth-token
|
||||
S3_BUCKET: fastgpt-plugins
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
|
||||
# AI Proxy
|
||||
aiproxy:
|
||||
image: ghcr.io/labring/aiproxy:v0.3.2
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.3.2 # 阿里云
|
||||
container_name: aiproxy
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
|
|
@ -261,19 +256,20 @@ services:
|
|||
condition: service_healthy
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
# 对应 fastgpt 里的AIPROXY_API_TOKEN
|
||||
- ADMIN_KEY=aiproxy
|
||||
ADMIN_KEY: *x-aiproxy-token
|
||||
# 错误日志详情保存时间(小时)
|
||||
- LOG_DETAIL_STORAGE_HOURS=1
|
||||
LOG_DETAIL_STORAGE_HOURS: 1
|
||||
# 数据库连接地址
|
||||
- SQL_DSN=postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
SQL_DSN: postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
# 最大重试次数
|
||||
- RETRY_TIMES=3
|
||||
RETRY_TIMES: 3
|
||||
# 不需要计费
|
||||
- BILLING_ENABLED=false
|
||||
BILLING_ENABLED: false
|
||||
# 不需要严格检测模型
|
||||
- DISABLE_MODEL_CONFIG=true
|
||||
DISABLE_MODEL_CONFIG: true
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/api/status']
|
||||
interval: 5s
|
||||
|
|
@ -281,13 +277,12 @@ services:
|
|||
retries: 10
|
||||
aiproxy_pg:
|
||||
image: pgvector/pgvector:0.8.0-pg15 # docker hub
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.8.0-pg15 # 阿里云
|
||||
restart: unless-stopped
|
||||
container_name: aiproxy_pg
|
||||
volumes:
|
||||
- ./aiproxy_pg:/var/lib/postgresql/data
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
POSTGRES_USER: postgres
|
||||
|
|
@ -300,3 +295,6 @@ services:
|
|||
retries: 10
|
||||
networks:
|
||||
fastgpt:
|
||||
aiproxy:
|
||||
vector:
|
||||
|
||||
|
|
@ -1,14 +1,33 @@
|
|||
# 数据库的默认账号和密码仅首次运行时设置有效
|
||||
# 如果修改了账号密码,记得改数据库和项目连接参数,别只改一处~
|
||||
# 该配置文件只是给快速启动,测试使用。正式使用,记得务必修改账号密码,以及调整合适的知识库参数,共享内存等。
|
||||
# 如何无法访问 dockerhub 和 git,可以用阿里云(阿里云没有arm包)
|
||||
# 用于部署的 docker-compose 文件:
|
||||
# - 向量库为 Pgvector
|
||||
# - FastGPT 端口映射为 3000:3000
|
||||
# - FastGPT-mcp-server 端口映射 3005:3000
|
||||
# - 建议修改账密后再运行
|
||||
|
||||
# plugin auth token
|
||||
x-plugin-auth-token: &x-plugin-auth-token token
|
||||
# aiproxy token
|
||||
x-aiproxy-token: &x-aiproxy-token token
|
||||
# 数据库连接相关配置
|
||||
x-share-db-config: &x-share-db-config
|
||||
MONGODB_URI: mongodb://username:password@mongo:27017/fastgpt?authSource=admin
|
||||
DB_MAX_LINK: 30
|
||||
REDIS_URL: redis://default:mypassword@redis:6379
|
||||
S3_ENDPOINT: fastgpt-minio
|
||||
S3_PORT: 9000
|
||||
S3_USE_SSL: false
|
||||
S3_ACCESS_KEY: minioadmin
|
||||
S3_SECRET_KEY: minioadmin
|
||||
|
||||
# 向量库相关配置
|
||||
x-vec-config: &x-vec-config
|
||||
undefined
|
||||
|
||||
version: '3.3'
|
||||
services:
|
||||
# Vector DB
|
||||
ob:
|
||||
image: oceanbase/oceanbase-ce:4.3.5-lts # docker hub
|
||||
# image: quay.io/oceanbase/oceanbase-ce:4.3.5-lts # 镜像
|
||||
image: oceanbase/oceanbase-ce:4.3.5-lts
|
||||
container_name: ob
|
||||
restart: always
|
||||
# ports: # 生产环境建议不要暴露
|
||||
|
|
@ -27,26 +46,26 @@ services:
|
|||
- OB_SERVER_IP=127.0.0.1
|
||||
# 更多环境变量配置见oceanbase官方文档: https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002013494
|
||||
volumes:
|
||||
- ./ob/data:/root/ob
|
||||
- ./ob/config:/root/.obd/cluster
|
||||
- ./init.sql:/root/boot/init.d/init.sql
|
||||
- ../ob/data:/root/ob
|
||||
- ../ob/config:/root/.obd/cluster
|
||||
configs:
|
||||
- source: init_sql
|
||||
target: /root/boot/init.d/init.sql
|
||||
healthcheck:
|
||||
# obclient -h127.0.0.1 -P2881 -uroot@tenantname -ptenantpassword -e "SELECT 1;"
|
||||
test:
|
||||
[
|
||||
'CMD-SHELL',
|
||||
'obclient -h$${OB_SERVER_IP} -P2881 -uroot@$${OB_TENANT_NAME} -p$${OB_TENANT_PASSWORD} -e "SELECT 1;"'
|
||||
"CMD-SHELL",
|
||||
'obclient -h$${OB_SERVER_IP} -P2881 -uroot@$${OB_TENANT_NAME} -p$${OB_TENANT_PASSWORD} -e "SELECT 1;"',
|
||||
]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 1000
|
||||
start_period: 10s
|
||||
|
||||
# DB
|
||||
|
||||
mongo:
|
||||
image: mongo:5.0.18 # dockerhub
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # 阿里云
|
||||
# image: mongo:4.4.29 # cpu不支持AVX时候使用
|
||||
image: mongo:5.0.18 # cpu 不支持 AVX 时候使用 4.4.29
|
||||
container_name: mongo
|
||||
restart: always
|
||||
networks:
|
||||
|
|
@ -103,15 +122,65 @@ services:
|
|||
start_period: 30s
|
||||
volumes:
|
||||
- ./redis/data:/data
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: ghcr.io/labring/fastgpt:v4.13.0 # git
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
- pg
|
||||
restart: always
|
||||
environment:
|
||||
<<: [*x-share-db-config, *x-vec-config]
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
FE_DOMAIN:
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
DEFAULT_ROOT_PSW: 1234
|
||||
# 登录凭证密钥
|
||||
TOKEN_KEY: any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
ROOT_KEY: root_key
|
||||
# 文件阅读加密
|
||||
FILE_TOKEN_KEY: filetoken
|
||||
# 密钥加密key
|
||||
AES256_SECRET_KEY: fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
PLUGIN_BASE_URL: http://fastgpt-plugin:3000
|
||||
PLUGIN_TOKEN: *x-plugin-auth-token
|
||||
# sandbox 地址
|
||||
SANDBOX_URL: http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
AIPROXY_API_ENDPOINT: http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 数据库最大连接数
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
WORKFLOW_MAX_LOOP_TIMES: 100
|
||||
# 对话文件过期天数
|
||||
CHAT_FILE_EXPIRE_TIME: 7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
|
||||
fastgpt-minio:
|
||||
image: minio/minio:latest
|
||||
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
|
||||
container_name: fastgpt-minio
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
ports: # comment out if you do not need to expose the port (in production environment, you should not expose the port)
|
||||
- '9000:9000'
|
||||
- '9001:9001'
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
|
|
@ -123,111 +192,38 @@ services:
|
|||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: ghcr.io/labring/fastgpt:v4.12.4 # git
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.12.4 # 阿里云
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
- ob
|
||||
restart: always
|
||||
environment:
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
- FE_DOMAIN=
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
- DEFAULT_ROOT_PSW=1234
|
||||
# 登录凭证密钥
|
||||
- TOKEN_KEY=any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
- ROOT_KEY=root_key
|
||||
# 文件阅读加密
|
||||
- FILE_TOKEN_KEY=filetoken
|
||||
# 密钥加密key
|
||||
- AES256_SECRET_KEY=fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
- PLUGIN_BASE_URL=http://fastgpt-plugin:3000
|
||||
- PLUGIN_TOKEN=xxxxxx
|
||||
# sandbox 地址
|
||||
- SANDBOX_URL=http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
- AIPROXY_API_ENDPOINT=http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
- AIPROXY_API_TOKEN=aiproxy
|
||||
|
||||
# 数据库最大连接数
|
||||
- DB_MAX_LINK=30
|
||||
# MongoDB 连接参数. 用户名myusername,密码mypassword。
|
||||
- MONGODB_URI=mongodb://myusername:mypassword@mongo:27017/fastgpt?authSource=admin
|
||||
# Redis 连接参数
|
||||
- REDIS_URL=redis://default:mypassword@redis:6379
|
||||
# 向量库 连接参数
|
||||
- OCEANBASE_URL=mysql://root%40tenantname:tenantpassword@ob:2881/test
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
- LOG_LEVEL=info
|
||||
- STORE_LOG_LEVEL=warn
|
||||
# 工作流最大运行次数
|
||||
- WORKFLOW_MAX_RUN_TIMES=1000
|
||||
# 批量执行节点,最大输入长度
|
||||
- WORKFLOW_MAX_LOOP_TIMES=100
|
||||
# 对话文件过期天数
|
||||
- CHAT_FILE_EXPIRE_TIME=7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
sandbox:
|
||||
container_name: sandbox
|
||||
image: ghcr.io/labring/fastgpt-sandbox:v4.12.4 # git
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.12.4 # 阿里云
|
||||
image: ghcr.io/labring/fastgpt-sandbox:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
fastgpt-mcp-server:
|
||||
container_name: fastgpt-mcp-server
|
||||
image: ghcr.io/labring/fastgpt-mcp_server:v4.12.4 # git
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.12.4 # 阿里云
|
||||
ports:
|
||||
- 3005:3000
|
||||
image: ghcr.io/labring/fastgpt-mcp_server:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
ports:
|
||||
- 3005:3000
|
||||
restart: always
|
||||
environment:
|
||||
- FASTGPT_ENDPOINT=http://fastgpt:3000
|
||||
fastgpt-plugin:
|
||||
image: ghcr.io/labring/fastgpt-plugin:v0.1.13 # git
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-plugin:v0.1.13 # 阿里云
|
||||
image: ghcr.io/labring/fastgpt-plugin:v0.2.0
|
||||
container_name: fastgpt-plugin
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
- AUTH_TOKEN=xxxxxx # 如果不需要鉴权可以直接去掉这个环境变量
|
||||
|
||||
# 改成 minio 可访问地址,例如 http://192.168.2.2:9000/fastgpt-plugins
|
||||
# 必须指向 Minio 的桶的地址
|
||||
# 如果 Minio 可以直接通过外网访问,可以不设置这个环境变量
|
||||
# - MINIO_CUSTOM_ENDPOINT=http://192.168.2.2:9000
|
||||
|
||||
- MINIO_ENDPOINT=fastgpt-minio
|
||||
- MINIO_PORT=9000
|
||||
- MINIO_USE_SSL=false
|
||||
- MINIO_ACCESS_KEY=minioadmin
|
||||
- MINIO_SECRET_KEY=minioadmin
|
||||
- MINIO_BUCKET=fastgpt-plugins
|
||||
<<: *x-share-db-config
|
||||
AUTH_TOKEN: *x-plugin-auth-token
|
||||
S3_BUCKET: fastgpt-plugins
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
|
||||
# AI Proxy
|
||||
aiproxy:
|
||||
image: ghcr.io/labring/aiproxy:v0.3.2
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.3.2 # 阿里云
|
||||
container_name: aiproxy
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
|
|
@ -235,19 +231,20 @@ services:
|
|||
condition: service_healthy
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
# 对应 fastgpt 里的AIPROXY_API_TOKEN
|
||||
- ADMIN_KEY=aiproxy
|
||||
ADMIN_KEY: *x-aiproxy-token
|
||||
# 错误日志详情保存时间(小时)
|
||||
- LOG_DETAIL_STORAGE_HOURS=1
|
||||
LOG_DETAIL_STORAGE_HOURS: 1
|
||||
# 数据库连接地址
|
||||
- SQL_DSN=postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
SQL_DSN: postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
# 最大重试次数
|
||||
- RETRY_TIMES=3
|
||||
RETRY_TIMES: 3
|
||||
# 不需要计费
|
||||
- BILLING_ENABLED=false
|
||||
BILLING_ENABLED: false
|
||||
# 不需要严格检测模型
|
||||
- DISABLE_MODEL_CONFIG=true
|
||||
DISABLE_MODEL_CONFIG: true
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/api/status']
|
||||
interval: 5s
|
||||
|
|
@ -255,13 +252,12 @@ services:
|
|||
retries: 10
|
||||
aiproxy_pg:
|
||||
image: pgvector/pgvector:0.8.0-pg15 # docker hub
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.8.0-pg15 # 阿里云
|
||||
restart: unless-stopped
|
||||
container_name: aiproxy_pg
|
||||
volumes:
|
||||
- ./aiproxy_pg:/var/lib/postgresql/data
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
POSTGRES_USER: postgres
|
||||
|
|
@ -274,3 +270,11 @@ services:
|
|||
retries: 10
|
||||
networks:
|
||||
fastgpt:
|
||||
aiproxy:
|
||||
vector:
|
||||
configs:
|
||||
init_sql:
|
||||
name: init_sql
|
||||
content: |
|
||||
ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30;
|
||||
|
||||
|
|
@ -1,18 +1,35 @@
|
|||
# 数据库的默认账号和密码仅首次运行时设置有效
|
||||
# 如果修改了账号密码,记得改数据库和项目连接参数,别只改一处~
|
||||
# 该配置文件只是给快速启动,测试使用。正式使用,记得务必修改账号密码,以及调整合适的知识库参数,共享内存等。
|
||||
# 如何无法访问 dockerhub 和 git,可以用阿里云(阿里云没有arm包)
|
||||
# 用于部署的 docker-compose 文件:
|
||||
# - 向量库为 Pgvector
|
||||
# - FastGPT 端口映射为 3000:3000
|
||||
# - FastGPT-mcp-server 端口映射 3005:3000
|
||||
# - 建议修改账密后再运行
|
||||
|
||||
# plugin auth token
|
||||
x-plugin-auth-token: &x-plugin-auth-token token
|
||||
# aiproxy token
|
||||
x-aiproxy-token: &x-aiproxy-token token
|
||||
# 数据库连接相关配置
|
||||
x-share-db-config: &x-share-db-config
|
||||
MONGODB_URI: mongodb://username:password@mongo:27017/fastgpt?authSource=admin
|
||||
DB_MAX_LINK: 30
|
||||
REDIS_URL: redis://default:mypassword@redis:6379
|
||||
S3_ENDPOINT: fastgpt-minio
|
||||
S3_PORT: 9000
|
||||
S3_USE_SSL: false
|
||||
S3_ACCESS_KEY: minioadmin
|
||||
S3_SECRET_KEY: minioadmin
|
||||
|
||||
# 向量库相关配置
|
||||
x-vec-config: &x-vec-config
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres
|
||||
|
||||
version: '3.3'
|
||||
services:
|
||||
# Vector DB
|
||||
pg:
|
||||
image: pgvector/pgvector:0.8.0-pg15 # docker hub
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.8.0-pg15 # 阿里云
|
||||
image: pgvector/pgvector:0.8.0-pg15
|
||||
container_name: pg
|
||||
restart: always
|
||||
# ports: # 生产环境建议不要暴露
|
||||
# - 5432:5432
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
|
|
@ -28,11 +45,9 @@ services:
|
|||
timeout: 5s
|
||||
retries: 10
|
||||
|
||||
# DB
|
||||
|
||||
mongo:
|
||||
image: mongo:5.0.18 # dockerhub
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # 阿里云
|
||||
# image: mongo:4.4.29 # cpu不支持AVX时候使用
|
||||
image: mongo:5.0.18 # cpu 不支持 AVX 时候使用 4.4.29
|
||||
container_name: mongo
|
||||
restart: always
|
||||
networks:
|
||||
|
|
@ -89,15 +104,65 @@ services:
|
|||
start_period: 30s
|
||||
volumes:
|
||||
- ./redis/data:/data
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: ghcr.io/labring/fastgpt:v4.13.0 # git
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
- pg
|
||||
restart: always
|
||||
environment:
|
||||
<<: [*x-share-db-config, *x-vec-config]
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
FE_DOMAIN:
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
DEFAULT_ROOT_PSW: 1234
|
||||
# 登录凭证密钥
|
||||
TOKEN_KEY: any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
ROOT_KEY: root_key
|
||||
# 文件阅读加密
|
||||
FILE_TOKEN_KEY: filetoken
|
||||
# 密钥加密key
|
||||
AES256_SECRET_KEY: fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
PLUGIN_BASE_URL: http://fastgpt-plugin:3000
|
||||
PLUGIN_TOKEN: *x-plugin-auth-token
|
||||
# sandbox 地址
|
||||
SANDBOX_URL: http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
AIPROXY_API_ENDPOINT: http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 数据库最大连接数
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
WORKFLOW_MAX_LOOP_TIMES: 100
|
||||
# 对话文件过期天数
|
||||
CHAT_FILE_EXPIRE_TIME: 7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
|
||||
fastgpt-minio:
|
||||
image: minio/minio:latest
|
||||
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
|
||||
container_name: fastgpt-minio
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
ports: # comment out if you do not need to expose the port (in production environment, you should not expose the port)
|
||||
- '9000:9000'
|
||||
- '9001:9001'
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
|
|
@ -109,111 +174,38 @@ services:
|
|||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: ghcr.io/labring/fastgpt:v4.12.4 # git
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.12.4 # 阿里云
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
- pg
|
||||
restart: always
|
||||
environment:
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
- FE_DOMAIN=
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
- DEFAULT_ROOT_PSW=1234
|
||||
# 登录凭证密钥
|
||||
- TOKEN_KEY=any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
- ROOT_KEY=root_key
|
||||
# 文件阅读加密
|
||||
- FILE_TOKEN_KEY=filetoken
|
||||
# 密钥加密key
|
||||
- AES256_SECRET_KEY=fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
- PLUGIN_BASE_URL=http://fastgpt-plugin:3000
|
||||
- PLUGIN_TOKEN=xxxxxx
|
||||
# sandbox 地址
|
||||
- SANDBOX_URL=http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
- AIPROXY_API_ENDPOINT=http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
- AIPROXY_API_TOKEN=aiproxy
|
||||
|
||||
# 数据库最大连接数
|
||||
- DB_MAX_LINK=30
|
||||
# MongoDB 连接参数. 用户名myusername,密码mypassword。
|
||||
- MONGODB_URI=mongodb://myusername:mypassword@mongo:27017/fastgpt?authSource=admin
|
||||
# Redis 连接参数
|
||||
- REDIS_URL=redis://default:mypassword@redis:6379
|
||||
# 向量库 连接参数
|
||||
- PG_URL=postgresql://username:password@pg:5432/postgres
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
- LOG_LEVEL=info
|
||||
- STORE_LOG_LEVEL=warn
|
||||
# 工作流最大运行次数
|
||||
- WORKFLOW_MAX_RUN_TIMES=1000
|
||||
# 批量执行节点,最大输入长度
|
||||
- WORKFLOW_MAX_LOOP_TIMES=100
|
||||
# 对话文件过期天数
|
||||
- CHAT_FILE_EXPIRE_TIME=7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
sandbox:
|
||||
container_name: sandbox
|
||||
image: ghcr.io/labring/fastgpt-sandbox:v4.12.4 # git
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.12.4 # 阿里云
|
||||
image: ghcr.io/labring/fastgpt-sandbox:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
fastgpt-mcp-server:
|
||||
container_name: fastgpt-mcp-server
|
||||
image: ghcr.io/labring/fastgpt-mcp_server:v4.12.4 # git
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.12.4 # 阿里云
|
||||
ports:
|
||||
- 3005:3000
|
||||
image: ghcr.io/labring/fastgpt-mcp_server:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
ports:
|
||||
- 3005:3000
|
||||
restart: always
|
||||
environment:
|
||||
- FASTGPT_ENDPOINT=http://fastgpt:3000
|
||||
fastgpt-plugin:
|
||||
image: ghcr.io/labring/fastgpt-plugin:v0.1.13 # git
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-plugin:v0.1.13 # 阿里云
|
||||
image: ghcr.io/labring/fastgpt-plugin:v0.2.0
|
||||
container_name: fastgpt-plugin
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
- AUTH_TOKEN=xxxxxx # 如果不需要鉴权可以直接去掉这个环境变量
|
||||
|
||||
# 改成 minio 可访问地址,例如 http://192.168.2.2:9000/fastgpt-plugins
|
||||
# 必须指向 Minio 的桶的地址
|
||||
# 如果 Minio 可以直接通过外网访问,可以不设置这个环境变量
|
||||
# - MINIO_CUSTOM_ENDPOINT=http://192.168.2.2:9000
|
||||
|
||||
- MINIO_ENDPOINT=fastgpt-minio
|
||||
- MINIO_PORT=9000
|
||||
- MINIO_USE_SSL=false
|
||||
- MINIO_ACCESS_KEY=minioadmin
|
||||
- MINIO_SECRET_KEY=minioadmin
|
||||
- MINIO_BUCKET=fastgpt-plugins
|
||||
<<: *x-share-db-config
|
||||
AUTH_TOKEN: *x-plugin-auth-token
|
||||
S3_BUCKET: fastgpt-plugins
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
|
||||
# AI Proxy
|
||||
aiproxy:
|
||||
image: ghcr.io/labring/aiproxy:v0.3.2
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.3.2 # 阿里云
|
||||
container_name: aiproxy
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
|
|
@ -221,19 +213,20 @@ services:
|
|||
condition: service_healthy
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
# 对应 fastgpt 里的AIPROXY_API_TOKEN
|
||||
- ADMIN_KEY=aiproxy
|
||||
ADMIN_KEY: *x-aiproxy-token
|
||||
# 错误日志详情保存时间(小时)
|
||||
- LOG_DETAIL_STORAGE_HOURS=1
|
||||
LOG_DETAIL_STORAGE_HOURS: 1
|
||||
# 数据库连接地址
|
||||
- SQL_DSN=postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
SQL_DSN: postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
# 最大重试次数
|
||||
- RETRY_TIMES=3
|
||||
RETRY_TIMES: 3
|
||||
# 不需要计费
|
||||
- BILLING_ENABLED=false
|
||||
BILLING_ENABLED: false
|
||||
# 不需要严格检测模型
|
||||
- DISABLE_MODEL_CONFIG=true
|
||||
DISABLE_MODEL_CONFIG: true
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/api/status']
|
||||
interval: 5s
|
||||
|
|
@ -241,13 +234,12 @@ services:
|
|||
retries: 10
|
||||
aiproxy_pg:
|
||||
image: pgvector/pgvector:0.8.0-pg15 # docker hub
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.8.0-pg15 # 阿里云
|
||||
restart: unless-stopped
|
||||
container_name: aiproxy_pg
|
||||
volumes:
|
||||
- ./aiproxy_pg:/var/lib/postgresql/data
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
POSTGRES_USER: postgres
|
||||
|
|
@ -260,3 +252,6 @@ services:
|
|||
retries: 10
|
||||
networks:
|
||||
fastgpt:
|
||||
aiproxy:
|
||||
vector:
|
||||
|
||||
|
|
@ -0,0 +1,240 @@
|
|||
# 用于部署的 docker-compose 文件:
|
||||
# - 向量库为 Pgvector
|
||||
# - FastGPT 端口映射为 3000:3000
|
||||
# - FastGPT-mcp-server 端口映射 3005:3000
|
||||
# - 建议修改账密后再运行
|
||||
|
||||
# plugin auth token
|
||||
x-plugin-auth-token: &x-plugin-auth-token token
|
||||
# aiproxy token
|
||||
x-aiproxy-token: &x-aiproxy-token token
|
||||
# 数据库连接相关配置
|
||||
x-share-db-config: &x-share-db-config
|
||||
MONGODB_URI: mongodb://username:password@mongo:27017/fastgpt?authSource=admin
|
||||
DB_MAX_LINK: 30
|
||||
REDIS_URL: redis://default:mypassword@redis:6379
|
||||
S3_ENDPOINT: fastgpt-minio
|
||||
S3_PORT: 9000
|
||||
S3_USE_SSL: false
|
||||
S3_ACCESS_KEY: minioadmin
|
||||
S3_SECRET_KEY: minioadmin
|
||||
|
||||
# 向量库相关配置
|
||||
x-vec-config: &x-vec-config
|
||||
MILVUS_ADDRESS: zilliz_cloud_address
|
||||
MILVUS_TOKEN: zilliz_cloud_token
|
||||
|
||||
version: '3.3'
|
||||
services:
|
||||
# Vector DB
|
||||
|
||||
|
||||
mongo:
|
||||
image: mongo:5.0.18 # cpu 不支持 AVX 时候使用 4.4.29
|
||||
container_name: mongo
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
command: mongod --keyFile /data/mongodb.key --replSet rs0
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=myusername
|
||||
- MONGO_INITDB_ROOT_PASSWORD=mypassword
|
||||
volumes:
|
||||
- ./mongo/data:/data/db
|
||||
entrypoint:
|
||||
- bash
|
||||
- -c
|
||||
- |
|
||||
openssl rand -base64 128 > /data/mongodb.key
|
||||
chmod 400 /data/mongodb.key
|
||||
chown 999:999 /data/mongodb.key
|
||||
echo 'const isInited = rs.status().ok === 1
|
||||
if(!isInited){
|
||||
rs.initiate({
|
||||
_id: "rs0",
|
||||
members: [
|
||||
{ _id: 0, host: "mongo:27017" }
|
||||
]
|
||||
})
|
||||
}' > /data/initReplicaSet.js
|
||||
# 启动MongoDB服务
|
||||
exec docker-entrypoint.sh "$$@" &
|
||||
|
||||
# 等待MongoDB服务启动
|
||||
until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')"; do
|
||||
echo "Waiting for MongoDB to start..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# 执行初始化副本集的脚本
|
||||
mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js
|
||||
|
||||
# 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
|
||||
wait $$!
|
||||
redis:
|
||||
image: redis:7.2-alpine
|
||||
container_name: redis
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
command: |
|
||||
redis-server --requirepass mypassword --loglevel warning --maxclients 10000 --appendonly yes --save 60 10 --maxmemory 4gb --maxmemory-policy noeviction
|
||||
healthcheck:
|
||||
test: ['CMD', 'redis-cli', '-a', 'mypassword', 'ping']
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
volumes:
|
||||
- ./redis/data:/data
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: ghcr.io/labring/fastgpt:v4.13.0 # git
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
- pg
|
||||
restart: always
|
||||
environment:
|
||||
<<: [*x-share-db-config, *x-vec-config]
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
FE_DOMAIN:
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
DEFAULT_ROOT_PSW: 1234
|
||||
# 登录凭证密钥
|
||||
TOKEN_KEY: any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
ROOT_KEY: root_key
|
||||
# 文件阅读加密
|
||||
FILE_TOKEN_KEY: filetoken
|
||||
# 密钥加密key
|
||||
AES256_SECRET_KEY: fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
PLUGIN_BASE_URL: http://fastgpt-plugin:3000
|
||||
PLUGIN_TOKEN: *x-plugin-auth-token
|
||||
# sandbox 地址
|
||||
SANDBOX_URL: http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
AIPROXY_API_ENDPOINT: http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 数据库最大连接数
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
WORKFLOW_MAX_LOOP_TIMES: 100
|
||||
# 对话文件过期天数
|
||||
CHAT_FILE_EXPIRE_TIME: 7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
|
||||
fastgpt-minio:
|
||||
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
|
||||
container_name: fastgpt-minio
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
volumes:
|
||||
- ./fastgpt-minio:/data
|
||||
command: server /data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
sandbox:
|
||||
container_name: sandbox
|
||||
image: ghcr.io/labring/fastgpt-sandbox:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
fastgpt-mcp-server:
|
||||
container_name: fastgpt-mcp-server
|
||||
image: ghcr.io/labring/fastgpt-mcp_server:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
ports:
|
||||
- 3005:3000
|
||||
restart: always
|
||||
environment:
|
||||
- FASTGPT_ENDPOINT=http://fastgpt:3000
|
||||
fastgpt-plugin:
|
||||
image: ghcr.io/labring/fastgpt-plugin:v0.2.0
|
||||
container_name: fastgpt-plugin
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
<<: *x-share-db-config
|
||||
AUTH_TOKEN: *x-plugin-auth-token
|
||||
S3_BUCKET: fastgpt-plugins
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
# AI Proxy
|
||||
aiproxy:
|
||||
image: ghcr.io/labring/aiproxy:v0.3.2
|
||||
container_name: aiproxy
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
aiproxy_pg:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
# 对应 fastgpt 里的AIPROXY_API_TOKEN
|
||||
ADMIN_KEY: *x-aiproxy-token
|
||||
# 错误日志详情保存时间(小时)
|
||||
LOG_DETAIL_STORAGE_HOURS: 1
|
||||
# 数据库连接地址
|
||||
SQL_DSN: postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
# 最大重试次数
|
||||
RETRY_TIMES: 3
|
||||
# 不需要计费
|
||||
BILLING_ENABLED: false
|
||||
# 不需要严格检测模型
|
||||
DISABLE_MODEL_CONFIG: true
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/api/status']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
aiproxy_pg:
|
||||
image: pgvector/pgvector:0.8.0-pg15 # docker hub
|
||||
restart: unless-stopped
|
||||
container_name: aiproxy_pg
|
||||
volumes:
|
||||
- ./aiproxy_pg:/var/lib/postgresql/data
|
||||
networks:
|
||||
- aiproxy
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: aiproxy
|
||||
POSTGRES_PASSWORD: aiproxy
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'postgres', '-d', 'aiproxy']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
networks:
|
||||
fastgpt:
|
||||
aiproxy:
|
||||
vector:
|
||||
|
||||
|
|
@ -1,19 +0,0 @@
|
|||
#!/bin/bash
|
||||
docker-compose pull
|
||||
docker-compose up -d
|
||||
|
||||
echo "Docker Compose 重新拉取镜像完成!"
|
||||
|
||||
# 删除本地旧镜像
|
||||
images=$(docker images --format "{{.ID}} {{.Repository}}" | grep fastgpt)
|
||||
|
||||
# 将镜像 ID 和名称放入数组中
|
||||
IFS=$'\n' read -rd '' -a image_array <<<"$images"
|
||||
|
||||
# 遍历数组并删除所有旧的镜像
|
||||
for ((i=1; i<${#image_array[@]}; i++))
|
||||
do
|
||||
image=${image_array[$i]}
|
||||
image_id=${image%% *}
|
||||
docker rmi $image_id
|
||||
done
|
||||
|
|
@ -1,398 +0,0 @@
|
|||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const template = `# 数据库的默认账号和密码仅首次运行时设置有效
|
||||
# 如果修改了账号密码,记得改数据库和项目连接参数,别只改一处~
|
||||
# 该配置文件只是给快速启动,测试使用。正式使用,记得务必修改账号密码,以及调整合适的知识库参数,共享内存等。
|
||||
# 如何无法访问 dockerhub 和 git,可以用阿里云(阿里云没有arm包)
|
||||
|
||||
version: '3.3'
|
||||
services:
|
||||
# Vector DB
|
||||
{{Vector_DB_Service}}
|
||||
|
||||
# DB
|
||||
mongo:
|
||||
image: mongo:5.0.18 # dockerhub
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # 阿里云
|
||||
# image: mongo:4.4.29 # cpu不支持AVX时候使用
|
||||
container_name: mongo
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
command: mongod --keyFile /data/mongodb.key --replSet rs0
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=myusername
|
||||
- MONGO_INITDB_ROOT_PASSWORD=mypassword
|
||||
volumes:
|
||||
- ./mongo/data:/data/db
|
||||
entrypoint:
|
||||
- bash
|
||||
- -c
|
||||
- |
|
||||
openssl rand -base64 128 > /data/mongodb.key
|
||||
chmod 400 /data/mongodb.key
|
||||
chown 999:999 /data/mongodb.key
|
||||
echo 'const isInited = rs.status().ok === 1
|
||||
if(!isInited){
|
||||
rs.initiate({
|
||||
_id: "rs0",
|
||||
members: [
|
||||
{ _id: 0, host: "mongo:27017" }
|
||||
]
|
||||
})
|
||||
}' > /data/initReplicaSet.js
|
||||
# 启动MongoDB服务
|
||||
exec docker-entrypoint.sh "$$@" &
|
||||
|
||||
# 等待MongoDB服务启动
|
||||
until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')"; do
|
||||
echo "Waiting for MongoDB to start..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# 执行初始化副本集的脚本
|
||||
mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js
|
||||
|
||||
# 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
|
||||
wait $$!
|
||||
redis:
|
||||
image: redis:7.2-alpine
|
||||
container_name: redis
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
command: |
|
||||
redis-server --requirepass mypassword --loglevel warning --maxclients 10000 --appendonly yes --save 60 10 --maxmemory 4gb --maxmemory-policy noeviction
|
||||
healthcheck:
|
||||
test: ['CMD', 'redis-cli', '-a', 'mypassword', 'ping']
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
volumes:
|
||||
- ./redis/data:/data
|
||||
fastgpt-minio:
|
||||
image: minio/minio:latest
|
||||
container_name: fastgpt-minio
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
ports: # comment out if you do not need to expose the port (in production environment, you should not expose the port)
|
||||
- '9000:9000'
|
||||
- '9001:9001'
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
volumes:
|
||||
- ./fastgpt-minio:/data
|
||||
command: server /data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: ghcr.io/labring/fastgpt:v4.12.4 # git
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.12.4 # 阿里云
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
{{Vector_DB_Depends}}
|
||||
restart: always
|
||||
environment:
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
- FE_DOMAIN=
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
- DEFAULT_ROOT_PSW=1234
|
||||
# 登录凭证密钥
|
||||
- TOKEN_KEY=any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
- ROOT_KEY=root_key
|
||||
# 文件阅读加密
|
||||
- FILE_TOKEN_KEY=filetoken
|
||||
# 密钥加密key
|
||||
- AES256_SECRET_KEY=fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
- PLUGIN_BASE_URL=http://fastgpt-plugin:3000
|
||||
- PLUGIN_TOKEN=xxxxxx
|
||||
# sandbox 地址
|
||||
- SANDBOX_URL=http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
- AIPROXY_API_ENDPOINT=http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
- AIPROXY_API_TOKEN=aiproxy
|
||||
|
||||
# 数据库最大连接数
|
||||
- DB_MAX_LINK=30
|
||||
# MongoDB 连接参数. 用户名myusername,密码mypassword。
|
||||
- MONGODB_URI=mongodb://myusername:mypassword@mongo:27017/fastgpt?authSource=admin
|
||||
# Redis 连接参数
|
||||
- REDIS_URL=redis://default:mypassword@redis:6379
|
||||
# 向量库 连接参数
|
||||
{{Vector_DB_ENV}}
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
- LOG_LEVEL=info
|
||||
- STORE_LOG_LEVEL=warn
|
||||
# 工作流最大运行次数
|
||||
- WORKFLOW_MAX_RUN_TIMES=1000
|
||||
# 批量执行节点,最大输入长度
|
||||
- WORKFLOW_MAX_LOOP_TIMES=100
|
||||
# 对话文件过期天数
|
||||
- CHAT_FILE_EXPIRE_TIME=7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
sandbox:
|
||||
container_name: sandbox
|
||||
image: ghcr.io/labring/fastgpt-sandbox:v4.12.4 # git
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.12.4 # 阿里云
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
fastgpt-mcp-server:
|
||||
container_name: fastgpt-mcp-server
|
||||
image: ghcr.io/labring/fastgpt-mcp_server:v4.12.4 # git
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.12.4 # 阿里云
|
||||
ports:
|
||||
- 3005:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
environment:
|
||||
- FASTGPT_ENDPOINT=http://fastgpt:3000
|
||||
fastgpt-plugin:
|
||||
image: ghcr.io/labring/fastgpt-plugin:v0.1.13 # git
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-plugin:v0.1.13 # 阿里云
|
||||
container_name: fastgpt-plugin
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
- AUTH_TOKEN=xxxxxx # 如果不需要鉴权可以直接去掉这个环境变量
|
||||
|
||||
# 改成 minio 可访问地址,例如 http://192.168.2.2:9000/fastgpt-plugins
|
||||
# 必须指向 Minio 的桶的地址
|
||||
# 如果 Minio 可以直接通过外网访问,可以不设置这个环境变量
|
||||
# - MINIO_CUSTOM_ENDPOINT=http://192.168.2.2:9000
|
||||
|
||||
- MINIO_ENDPOINT=fastgpt-minio
|
||||
- MINIO_PORT=9000
|
||||
- MINIO_USE_SSL=false
|
||||
- MINIO_ACCESS_KEY=minioadmin
|
||||
- MINIO_SECRET_KEY=minioadmin
|
||||
- MINIO_BUCKET=fastgpt-plugins
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
|
||||
# AI Proxy
|
||||
aiproxy:
|
||||
image: ghcr.io/labring/aiproxy:v0.3.2
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.3.2 # 阿里云
|
||||
container_name: aiproxy
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
aiproxy_pg:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
# 对应 fastgpt 里的AIPROXY_API_TOKEN
|
||||
- ADMIN_KEY=aiproxy
|
||||
# 错误日志详情保存时间(小时)
|
||||
- LOG_DETAIL_STORAGE_HOURS=1
|
||||
# 数据库连接地址
|
||||
- SQL_DSN=postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
# 最大重试次数
|
||||
- RETRY_TIMES=3
|
||||
# 不需要计费
|
||||
- BILLING_ENABLED=false
|
||||
# 不需要严格检测模型
|
||||
- DISABLE_MODEL_CONFIG=true
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/api/status']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
aiproxy_pg:
|
||||
image: pgvector/pgvector:0.8.0-pg15 # docker hub
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.8.0-pg15 # 阿里云
|
||||
restart: unless-stopped
|
||||
container_name: aiproxy_pg
|
||||
volumes:
|
||||
- ./aiproxy_pg:/var/lib/postgresql/data
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: aiproxy
|
||||
POSTGRES_PASSWORD: aiproxy
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'postgres', '-d', 'aiproxy']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
networks:
|
||||
fastgpt:
|
||||
`;
|
||||
|
||||
const list = [
|
||||
{
|
||||
filename: './docker-compose-pgvector.yml',
|
||||
depends: `- pg`,
|
||||
service: `pg:
|
||||
image: pgvector/pgvector:0.8.0-pg15 # docker hub
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.8.0-pg15 # 阿里云
|
||||
container_name: pg
|
||||
restart: always
|
||||
# ports: # 生产环境建议不要暴露
|
||||
# - 5432:5432
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
|
||||
- POSTGRES_USER=username
|
||||
- POSTGRES_PASSWORD=password
|
||||
- POSTGRES_DB=postgres
|
||||
volumes:
|
||||
- ./pg/data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'username', '-d', 'postgres']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10`,
|
||||
env: `- PG_URL=postgresql://username:password@pg:5432/postgres`
|
||||
},
|
||||
{
|
||||
filename: './docker-compose-zilliz.yml',
|
||||
depends: ``,
|
||||
service: ``,
|
||||
env: `# zilliz 连接参数
|
||||
- MILVUS_ADDRESS=zilliz_cloud_address
|
||||
- MILVUS_TOKEN=zilliz_cloud_token`
|
||||
},
|
||||
{
|
||||
filename: './docker-compose-milvus.yml',
|
||||
depends: `- milvusStandalone`,
|
||||
service: `milvus-minio:
|
||||
container_name: milvus-minio
|
||||
image: minio/minio:RELEASE.2023-03-20T20-16-18Z
|
||||
environment:
|
||||
MINIO_ACCESS_KEY: minioadmin
|
||||
MINIO_SECRET_KEY: minioadmin
|
||||
# ports:
|
||||
# - '9001:9001'
|
||||
# - '9000:9000'
|
||||
networks:
|
||||
- fastgpt
|
||||
volumes:
|
||||
- ./milvus-minio:/minio_data
|
||||
command: minio server /minio_data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
# milvus
|
||||
milvusEtcd:
|
||||
container_name: milvusEtcd
|
||||
image: quay.io/coreos/etcd:v3.5.5
|
||||
environment:
|
||||
- ETCD_AUTO_COMPACTION_MODE=revision
|
||||
- ETCD_AUTO_COMPACTION_RETENTION=1000
|
||||
- ETCD_QUOTA_BACKEND_BYTES=4294967296
|
||||
- ETCD_SNAPSHOT_COUNT=50000
|
||||
networks:
|
||||
- fastgpt
|
||||
volumes:
|
||||
- ./milvus/etcd:/etcd
|
||||
command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
|
||||
healthcheck:
|
||||
test: ['CMD', 'etcdctl', 'endpoint', 'health']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
milvusStandalone:
|
||||
container_name: milvusStandalone
|
||||
image: milvusdb/milvus:v2.4.3
|
||||
command: ['milvus', 'run', 'standalone']
|
||||
security_opt:
|
||||
- seccomp:unconfined
|
||||
environment:
|
||||
ETCD_ENDPOINTS: milvusEtcd:2379
|
||||
MINIO_ADDRESS: milvus-minio:9000
|
||||
networks:
|
||||
- fastgpt
|
||||
volumes:
|
||||
- ./milvus/data:/var/lib/milvus
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9091/healthz']
|
||||
interval: 30s
|
||||
start_period: 90s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
depends_on:
|
||||
- 'milvusEtcd'
|
||||
- 'milvus-minio'`,
|
||||
env: `- MILVUS_ADDRESS=http://milvusStandalone:19530
|
||||
- MILVUS_TOKEN=none`
|
||||
},
|
||||
{
|
||||
filename: './docker-compose-oceanbase/docker-compose.yml',
|
||||
depends: `- ob`,
|
||||
service: `ob:
|
||||
image: oceanbase/oceanbase-ce:4.3.5-lts # docker hub
|
||||
# image: quay.io/oceanbase/oceanbase-ce:4.3.5-lts # 镜像
|
||||
container_name: ob
|
||||
restart: always
|
||||
# ports: # 生产环境建议不要暴露
|
||||
# - 2881:2881
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
|
||||
- OB_SYS_PASSWORD=obsyspassword
|
||||
# 不同于传统数据库,OceanBase 数据库的账号包含更多字段,包括用户名、租户名和集群名。经典格式为"用户名@租户名#集群名"
|
||||
# 比如用mysql客户端连接时,根据本文件的默认配置,应该指定 "-uroot@tenantname"
|
||||
- OB_TENANT_NAME=tenantname
|
||||
- OB_TENANT_PASSWORD=tenantpassword
|
||||
# MODE分为MINI和NORMAL, 后者会最大程度使用主机资源
|
||||
- MODE=MINI
|
||||
- OB_SERVER_IP=127.0.0.1
|
||||
# 更多环境变量配置见oceanbase官方文档: https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002013494
|
||||
volumes:
|
||||
- ./ob/data:/root/ob
|
||||
- ./ob/config:/root/.obd/cluster
|
||||
- ./init.sql:/root/boot/init.d/init.sql
|
||||
healthcheck:
|
||||
# obclient -h127.0.0.1 -P2881 -uroot@tenantname -ptenantpassword -e "SELECT 1;"
|
||||
test:
|
||||
[
|
||||
'CMD-SHELL',
|
||||
'obclient -h\$\$\$\${OB_SERVER_IP} -P2881 -uroot@\$\$\$\${OB_TENANT_NAME} -p\$\$\$\${OB_TENANT_PASSWORD} -e "SELECT 1;"'
|
||||
]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 1000
|
||||
start_period: 10s`,
|
||||
env: `- OCEANBASE_URL=mysql://root%40tenantname:tenantpassword@ob:2881/test`
|
||||
}
|
||||
];
|
||||
|
||||
list.forEach((item) => {
|
||||
const { filename, service, env, depends } = item;
|
||||
const content = template
|
||||
.replace('{{Vector_DB_Service}}', service)
|
||||
.replace('{{Vector_DB_ENV}}', env)
|
||||
.replace('{{Vector_DB_Depends}}', depends);
|
||||
fs.writeFileSync(path.join(__dirname, filename), content, 'utf-8');
|
||||
});
|
||||
|
|
@ -0,0 +1,228 @@
|
|||
#!/usr/bin/env node
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
|
||||
/**
|
||||
* @enum {String} RegionEnum
|
||||
*/
|
||||
const RegionEnum = {
|
||||
cn: 'cn',
|
||||
global: 'global'
|
||||
};
|
||||
|
||||
/**
|
||||
* @enum {String} VectorEnum
|
||||
*/
|
||||
const VectorEnum = {
|
||||
pg: 'pg',
|
||||
milvus: 'milvus',
|
||||
zilliz: 'zilliz',
|
||||
ob: 'ob'
|
||||
};
|
||||
|
||||
/**
|
||||
* @enum {string} Services
|
||||
*/
|
||||
const Services = {
|
||||
fastgpt: 'fastgpt',
|
||||
fastgptPlugin: 'fastgpt-plugin',
|
||||
fastgptSandbox: 'fastgpt-sandbox',
|
||||
fastgptMcpServer: 'fastgpt-mcp_server',
|
||||
minio: 'minio',
|
||||
mongo: 'mongo',
|
||||
redis: 'redis',
|
||||
aiproxy: 'aiproxy',
|
||||
aiproxyPg: 'aiproxy-pg',
|
||||
// vectors
|
||||
pg: 'pg',
|
||||
milvusMinio: 'milvus-minio',
|
||||
milvusEtcd: 'milvus-etcd',
|
||||
milvusStandalone: 'milvus-standalone',
|
||||
oceanbase: 'oceanbase'
|
||||
};
|
||||
|
||||
// make sure the cwd
|
||||
const basePath = process.cwd();
|
||||
if (!basePath.endsWith('deploy')) {
|
||||
process.chdir('deploy');
|
||||
}
|
||||
|
||||
/**
|
||||
* @typedef {{ tag: String, image: {cn: String, global: String} }} ArgItemType
|
||||
*/
|
||||
/** format the args
|
||||
* @type {Record<Services, ArgItemType>}
|
||||
*/
|
||||
const args = (() => {
|
||||
/**
|
||||
* @type {{tags: Record<Services, string>, images: Record<Services, Record<string, string>>}}
|
||||
*/
|
||||
const obj = JSON.parse(fs.readFileSync(path.join(process.cwd(), 'args.json')));
|
||||
const args = {};
|
||||
for (const key of Object.keys(obj.tags)) {
|
||||
args[key] = {
|
||||
tag: obj.tags[key],
|
||||
image: {
|
||||
cn: obj.images.cn[key],
|
||||
global: obj.images.global[key]
|
||||
}
|
||||
};
|
||||
}
|
||||
return args;
|
||||
})();
|
||||
|
||||
const vector = {
|
||||
pg: {
|
||||
db: '',
|
||||
config: `\
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres`,
|
||||
extra: ''
|
||||
},
|
||||
milvus: {
|
||||
db: '',
|
||||
config: `\
|
||||
MILVUS_ADDRESS: http://milvusStandalone:19530
|
||||
MILVUS_TOKEN: none
|
||||
`,
|
||||
extra: ''
|
||||
},
|
||||
zilliz: {
|
||||
db: '',
|
||||
config: `\
|
||||
MILVUS_ADDRESS: zilliz_cloud_address
|
||||
MILVUS_TOKEN: zilliz_cloud_token`,
|
||||
extra: ''
|
||||
},
|
||||
ob: {
|
||||
db: '',
|
||||
cofig: `\
|
||||
OCEANBASE_URL: mysql://root%40tenantname:tenantpassword@ob:2881/test
|
||||
`,
|
||||
extra: `\
|
||||
configs:
|
||||
init_sql:
|
||||
name: init_sql
|
||||
content: |
|
||||
ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30;
|
||||
`
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* replace all ${{}}
|
||||
* @param {string} source
|
||||
* @param {RegionEnum} region
|
||||
* @param {VectorEnum} vec
|
||||
* @returns {string}
|
||||
*/
|
||||
const replace = (source, region, vec) => {
|
||||
// Match ${{expr}}, capture "expr" inside {{}}
|
||||
return source.replace(/\$\{\{([^}]*)\}\}/g, (_, expr) => {
|
||||
// expr: a.b
|
||||
/**
|
||||
* @type {String}
|
||||
*/
|
||||
const [a, b] = expr.split('.');
|
||||
if (a === 'vec') {
|
||||
if (b === 'db') {
|
||||
return replace(vector[vec].db, region, vec);
|
||||
} else {
|
||||
return vector[vec][b];
|
||||
}
|
||||
}
|
||||
|
||||
if (b === 'tag') {
|
||||
return args[a].tag;
|
||||
} else if (b === 'image') {
|
||||
return args[a].image[region];
|
||||
}
|
||||
});
|
||||
};
|
||||
{
|
||||
// read in Vectors
|
||||
const pg = fs.readFileSync(path.join(process.cwd(), 'templates', 'vector', 'pg.txt'));
|
||||
vector.pg.db = String(pg);
|
||||
|
||||
const milvus = fs.readFileSync(path.join(process.cwd(), 'templates', 'vector', 'milvus.txt'));
|
||||
vector.milvus.db = String(milvus);
|
||||
|
||||
const ob = fs.readFileSync(path.join(process.cwd(), 'templates', 'vector', 'ob.txt'));
|
||||
vector.ob.db = String(ob);
|
||||
}
|
||||
|
||||
const generateDevFile = async () => {
|
||||
console.log('generating dev/docker-compose.yml');
|
||||
// 1. read template
|
||||
const template = await fs.promises.readFile(
|
||||
path.join(process.cwd(), 'templates', 'docker-compose.dev.yml'),
|
||||
'utf8'
|
||||
);
|
||||
|
||||
await Promise.all([
|
||||
fs.promises.writeFile(
|
||||
path.join(process.cwd(), 'dev', 'docker-compose.cn.yml'),
|
||||
replace(template, 'cn')
|
||||
),
|
||||
fs.promises.writeFile(
|
||||
path.join(process.cwd(), 'dev', 'docker-compose.yml'),
|
||||
replace(template, 'global')
|
||||
)
|
||||
]);
|
||||
|
||||
console.log('success geenrate dev files');
|
||||
};
|
||||
|
||||
const generateProdFile = async () => {
|
||||
console.log('generating prod/docker-compose.yml');
|
||||
const template = await fs.promises.readFile(
|
||||
path.join(process.cwd(), 'templates', 'docker-compose.prod.yml'),
|
||||
'utf8'
|
||||
);
|
||||
|
||||
await Promise.all([
|
||||
fs.promises.writeFile(
|
||||
path.join(process.cwd(), 'docker', 'cn', 'docker-compose.pg.yml'),
|
||||
replace(template, 'cn', VectorEnum.pg)
|
||||
),
|
||||
fs.promises.writeFile(
|
||||
path.join(process.cwd(), 'docker', 'global', 'docker-compose.pg.yml'),
|
||||
replace(template, 'global', VectorEnum.pg)
|
||||
),
|
||||
fs.promises.writeFile(
|
||||
path.join(process.cwd(), 'docker', 'cn', 'docker-compose.milvus.yml'),
|
||||
replace(template, 'cn', VectorEnum.milvus)
|
||||
),
|
||||
fs.promises.writeFile(
|
||||
path.join(process.cwd(), 'docker', 'global', 'docker-compose.milvus.yml'),
|
||||
replace(template, 'global', VectorEnum.milvus)
|
||||
),
|
||||
fs.promises.writeFile(
|
||||
path.join(process.cwd(), 'docker', 'cn', 'docker-compose.zilliz.yml'),
|
||||
replace(template, 'cn', VectorEnum.zilliz)
|
||||
),
|
||||
fs.promises.writeFile(
|
||||
path.join(process.cwd(), 'docker', 'global', 'docker-compose.ziliiz.yml'),
|
||||
replace(template, 'global', VectorEnum.zilliz)
|
||||
),
|
||||
fs.promises.writeFile(
|
||||
path.join(process.cwd(), 'docker', 'cn', 'docker-compose.oceanbase.yml'),
|
||||
replace(template, 'cn', VectorEnum.ob)
|
||||
),
|
||||
fs.promises.writeFile(
|
||||
path.join(process.cwd(), 'docker', 'global', 'docker-compose.oceanbase.yml'),
|
||||
replace(template, 'global', VectorEnum.ob)
|
||||
)
|
||||
]);
|
||||
|
||||
console.log('success geenrate prod files');
|
||||
};
|
||||
|
||||
await Promise.all([generateDevFile(), generateProdFile()]);
|
||||
|
||||
console.log('copy the docker dir to ../document/public');
|
||||
|
||||
await fs.promises.cp(
|
||||
path.join(process.cwd(), 'docker'),
|
||||
path.join(process.cwd(), '..', 'document', 'public', 'deploy', 'docker'),
|
||||
{ recursive: true }
|
||||
);
|
||||
|
|
@ -0,0 +1,212 @@
|
|||
# 用于开发的 docker-compose 文件:
|
||||
# - 只包含 FastGPT 的最小化运行条件
|
||||
# - 没有 FastGPT 本体
|
||||
# - 所有端口都映射到外层
|
||||
# - pg: 5432
|
||||
# - mongo: 27017
|
||||
# - redis: 6379
|
||||
# - fastgpt-sandbox: 3002
|
||||
# - fastgpt-plugin: 3003
|
||||
# - aiproxy: 3010
|
||||
# - 使用 pgvector 作为默认的向量库
|
||||
|
||||
services:
|
||||
# Vector DB
|
||||
pg:
|
||||
image: ${{pg.image}}:${{pg.tag}}
|
||||
container_name: pg
|
||||
restart: always
|
||||
ports: # 生产环境建议不要暴露
|
||||
- 5432:5432
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
|
||||
- POSTGRES_USER=username
|
||||
- POSTGRES_PASSWORD=password
|
||||
- POSTGRES_DB=postgres
|
||||
volumes:
|
||||
- ./pg/data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'username', '-d', 'postgres']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
|
||||
# DB
|
||||
mongo:
|
||||
image: ${{mongo.image}}:${{mongo.tag}} # cpu 不支持 AVX 时候使用 4.4.29
|
||||
container_name: mongo
|
||||
restart: always
|
||||
ports:
|
||||
- 27017:27017
|
||||
networks:
|
||||
- fastgpt
|
||||
command: mongod --keyFile /data/mongodb.key --replSet rs0
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=myusername
|
||||
- MONGO_INITDB_ROOT_PASSWORD=mypassword
|
||||
volumes:
|
||||
- ./mongo/data:/data/db
|
||||
entrypoint:
|
||||
- bash
|
||||
- -c
|
||||
- |
|
||||
openssl rand -base64 128 > /data/mongodb.key
|
||||
chmod 400 /data/mongodb.key
|
||||
chown 999:999 /data/mongodb.key
|
||||
echo 'const isInited = rs.status().ok === 1
|
||||
if(!isInited){
|
||||
rs.initiate({
|
||||
_id: "rs0",
|
||||
members: [
|
||||
{ _id: 0, host: "mongo:27017" }
|
||||
]
|
||||
})
|
||||
}' > /data/initReplicaSet.js
|
||||
# 启动MongoDB服务
|
||||
exec docker-entrypoint.sh "$$@" &
|
||||
|
||||
# 等待MongoDB服务启动
|
||||
until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')"; do
|
||||
echo "Waiting for MongoDB to start..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# 执行初始化副本集的脚本
|
||||
mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js
|
||||
|
||||
# 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
|
||||
wait $$!
|
||||
redis:
|
||||
image: ${{redis.image}}:${{redis.tag}}
|
||||
container_name: redis
|
||||
ports:
|
||||
- 6379:6379
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
command: |
|
||||
redis-server --requirepass mypassword --loglevel warning --maxclients 10000 --appendonly yes --save 60 10 --maxmemory 4gb --maxmemory-policy noeviction
|
||||
healthcheck:
|
||||
test: ['CMD', 'redis-cli', '-a', 'mypassword', 'ping']
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
volumes:
|
||||
- ./redis/data:/data
|
||||
fastgpt-minio:
|
||||
image: ${{minio.image}}:${{minio.tag}}
|
||||
container_name: fastgpt-minio
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
ports:
|
||||
- '9000:9000'
|
||||
- '9001:9001'
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
volumes:
|
||||
- ./fastgpt-minio:/data
|
||||
command: server /data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
sandbox:
|
||||
container_name: sandbox
|
||||
image: ${{fastgpt-sandbox.image}}:${{fastgpt-sandbox.tag}}
|
||||
ports:
|
||||
- 3002:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
fastgpt-mcp-server:
|
||||
container_name: fastgpt-mcp-server
|
||||
image: ${{fastgpt-mcp_server.image}}:${{fastgpt-mcp_server.tag}}
|
||||
ports:
|
||||
- 3005:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
environment:
|
||||
- FASTGPT_ENDPOINT=http://fastgpt:3000
|
||||
fastgpt-plugin:
|
||||
image: ${{fastgpt-plugin.image}}:${{fastgpt-plugin.tag}}
|
||||
container_name: fastgpt-plugin
|
||||
restart: always
|
||||
ports:
|
||||
- 3003:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
- AUTH_TOKEN=token
|
||||
- S3_ENDPOINT=fastgpt-minio
|
||||
- S3_PORT=9000
|
||||
- S3_USE_SSL=false
|
||||
- S3_ACCESS_KEY=minioadmin
|
||||
- S3_SECRET_KEY=minioadmin
|
||||
- S3_BUCKET=fastgpt-plugins
|
||||
- S3_TOOL_BUCKET=fastgpt-tool # 系统工具,创建的临时文件,存储的桶,要求公开读私有写。
|
||||
- S3_PLUGIN_BUCKET=fastgpt-plugin # 系统插件热安装文件的桶,私有读写。
|
||||
- RETENTION_DAYS=15 # 系统工具临时文件保存天数
|
||||
- MONGODB_URI=mongodb://myusername:mypassword@mongo:27017/fastgpt?authSource=admin&directConnection=true
|
||||
- REDIS_URL=redis://default:mypassword@redis:6379
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
# AI Proxy
|
||||
aiproxy:
|
||||
image: ${{aiproxy.image}}:${{aiproxy.tag}}
|
||||
container_name: aiproxy
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- 3010:3000
|
||||
depends_on:
|
||||
aiproxy_pg:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
# 对应 fastgpt 里的AIPROXY_API_TOKEN
|
||||
- ADMIN_KEY=aiproxy
|
||||
# 错误日志详情保存时间(小时)
|
||||
- LOG_DETAIL_STORAGE_HOURS=1
|
||||
# 数据库连接地址
|
||||
- SQL_DSN=postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
# 最大重试次数
|
||||
- RETRY_TIMES=3
|
||||
# 不需要计费
|
||||
- BILLING_ENABLED=false
|
||||
# 不需要严格检测模型
|
||||
- DISABLE_MODEL_CONFIG=true
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/api/status']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
aiproxy_pg:
|
||||
image: ${{aiproxy-pg.image}}:${{aiproxy-pg.tag}} # docker hub
|
||||
restart: unless-stopped
|
||||
container_name: aiproxy_pg
|
||||
volumes:
|
||||
- ./aiproxy_pg:/var/lib/postgresql/data
|
||||
networks:
|
||||
- aiproxy
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: aiproxy
|
||||
POSTGRES_PASSWORD: aiproxy
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'postgres', '-d', 'aiproxy']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
networks:
|
||||
fastgpt:
|
||||
aiproxy:
|
||||
|
|
@ -0,0 +1,239 @@
|
|||
# 用于部署的 docker-compose 文件:
|
||||
# - 向量库为 Pgvector
|
||||
# - FastGPT 端口映射为 3000:3000
|
||||
# - FastGPT-mcp-server 端口映射 3005:3000
|
||||
# - 建议修改账密后再运行
|
||||
|
||||
# plugin auth token
|
||||
x-plugin-auth-token: &x-plugin-auth-token token
|
||||
# aiproxy token
|
||||
x-aiproxy-token: &x-aiproxy-token token
|
||||
# 数据库连接相关配置
|
||||
x-share-db-config: &x-share-db-config
|
||||
MONGODB_URI: mongodb://username:password@mongo:27017/fastgpt?authSource=admin
|
||||
DB_MAX_LINK: 30
|
||||
REDIS_URL: redis://default:mypassword@redis:6379
|
||||
S3_ENDPOINT: fastgpt-minio
|
||||
S3_PORT: 9000
|
||||
S3_USE_SSL: false
|
||||
S3_ACCESS_KEY: minioadmin
|
||||
S3_SECRET_KEY: minioadmin
|
||||
|
||||
# 向量库相关配置
|
||||
x-vec-config: &x-vec-config
|
||||
${{vec.config}}
|
||||
|
||||
version: '3.3'
|
||||
services:
|
||||
# Vector DB
|
||||
${{vec.db}}
|
||||
|
||||
mongo:
|
||||
image: ${{mongo.image}}:${{mongo.tag}} # cpu 不支持 AVX 时候使用 4.4.29
|
||||
container_name: mongo
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
command: mongod --keyFile /data/mongodb.key --replSet rs0
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=myusername
|
||||
- MONGO_INITDB_ROOT_PASSWORD=mypassword
|
||||
volumes:
|
||||
- ./mongo/data:/data/db
|
||||
entrypoint:
|
||||
- bash
|
||||
- -c
|
||||
- |
|
||||
openssl rand -base64 128 > /data/mongodb.key
|
||||
chmod 400 /data/mongodb.key
|
||||
chown 999:999 /data/mongodb.key
|
||||
echo 'const isInited = rs.status().ok === 1
|
||||
if(!isInited){
|
||||
rs.initiate({
|
||||
_id: "rs0",
|
||||
members: [
|
||||
{ _id: 0, host: "mongo:27017" }
|
||||
]
|
||||
})
|
||||
}' > /data/initReplicaSet.js
|
||||
# 启动MongoDB服务
|
||||
exec docker-entrypoint.sh "$$@" &
|
||||
|
||||
# 等待MongoDB服务启动
|
||||
until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')"; do
|
||||
echo "Waiting for MongoDB to start..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# 执行初始化副本集的脚本
|
||||
mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js
|
||||
|
||||
# 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
|
||||
wait $$!
|
||||
redis:
|
||||
image: ${{redis.image}}:${{redis.tag}}
|
||||
container_name: redis
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
command: |
|
||||
redis-server --requirepass mypassword --loglevel warning --maxclients 10000 --appendonly yes --save 60 10 --maxmemory 4gb --maxmemory-policy noeviction
|
||||
healthcheck:
|
||||
test: ['CMD', 'redis-cli', '-a', 'mypassword', 'ping']
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
volumes:
|
||||
- ./redis/data:/data
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: ${{fastgpt.image}}:${{fastgpt.tag}} # git
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
- pg
|
||||
restart: always
|
||||
environment:
|
||||
<<: [*x-share-db-config, *x-vec-config]
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
FE_DOMAIN:
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
DEFAULT_ROOT_PSW: 1234
|
||||
# 登录凭证密钥
|
||||
TOKEN_KEY: any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
ROOT_KEY: root_key
|
||||
# 文件阅读加密
|
||||
FILE_TOKEN_KEY: filetoken
|
||||
# 密钥加密key
|
||||
AES256_SECRET_KEY: fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
PLUGIN_BASE_URL: http://fastgpt-plugin:3000
|
||||
PLUGIN_TOKEN: *x-plugin-auth-token
|
||||
# sandbox 地址
|
||||
SANDBOX_URL: http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
AIPROXY_API_ENDPOINT: http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 数据库最大连接数
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
WORKFLOW_MAX_LOOP_TIMES: 100
|
||||
# 对话文件过期天数
|
||||
CHAT_FILE_EXPIRE_TIME: 7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
|
||||
fastgpt-minio:
|
||||
image: ${{minio.image}}:${{minio.tag}}
|
||||
container_name: fastgpt-minio
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
volumes:
|
||||
- ./fastgpt-minio:/data
|
||||
command: server /data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
sandbox:
|
||||
container_name: sandbox
|
||||
image: ${{fastgpt-sandbox.image}}:${{fastgpt-sandbox.tag}}
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
fastgpt-mcp-server:
|
||||
container_name: fastgpt-mcp-server
|
||||
image: ${{fastgpt-mcp_server.image}}:${{fastgpt-mcp_server.tag}}
|
||||
networks:
|
||||
- fastgpt
|
||||
ports:
|
||||
- 3005:3000
|
||||
restart: always
|
||||
environment:
|
||||
- FASTGPT_ENDPOINT=http://fastgpt:3000
|
||||
fastgpt-plugin:
|
||||
image: ${{fastgpt-plugin.image}}:${{fastgpt-plugin.tag}}
|
||||
container_name: fastgpt-plugin
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
<<: *x-share-db-config
|
||||
AUTH_TOKEN: *x-plugin-auth-token
|
||||
S3_BUCKET: fastgpt-plugins
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
# AI Proxy
|
||||
aiproxy:
|
||||
image: ${{aiproxy.image}}:${{aiproxy.tag}}
|
||||
container_name: aiproxy
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
aiproxy_pg:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
# 对应 fastgpt 里的AIPROXY_API_TOKEN
|
||||
ADMIN_KEY: *x-aiproxy-token
|
||||
# 错误日志详情保存时间(小时)
|
||||
LOG_DETAIL_STORAGE_HOURS: 1
|
||||
# 数据库连接地址
|
||||
SQL_DSN: postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
# 最大重试次数
|
||||
RETRY_TIMES: 3
|
||||
# 不需要计费
|
||||
BILLING_ENABLED: false
|
||||
# 不需要严格检测模型
|
||||
DISABLE_MODEL_CONFIG: true
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/api/status']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
aiproxy_pg:
|
||||
image: ${{aiproxy-pg.image}}:${{aiproxy-pg.tag}} # docker hub
|
||||
restart: unless-stopped
|
||||
container_name: aiproxy_pg
|
||||
volumes:
|
||||
- ./aiproxy_pg:/var/lib/postgresql/data
|
||||
networks:
|
||||
- aiproxy
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: aiproxy
|
||||
POSTGRES_PASSWORD: aiproxy
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'postgres', '-d', 'aiproxy']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
networks:
|
||||
fastgpt:
|
||||
aiproxy:
|
||||
vector:
|
||||
${{vec.extra}}
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
milvus-minio:
|
||||
container_name: milvus-minio
|
||||
image: ${{milvus-minio.image}}:${{milvus-minio.tag}}
|
||||
environment:
|
||||
MINIO_ACCESS_KEY: minioadmin
|
||||
MINIO_SECRET_KEY: minioadmin
|
||||
networks:
|
||||
- vector
|
||||
volumes:
|
||||
- ./milvus-minio:/minio_data
|
||||
command: minio server /minio_data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
# milvus
|
||||
milvus-etcd:
|
||||
container_name: milvus-etcd
|
||||
image:
|
||||
image: ${{milvus-etcd.image}}:${{milvus-etcd.tag}}
|
||||
environment:
|
||||
- ETCD_AUTO_COMPACTION_MODE=revision
|
||||
- ETCD_AUTO_COMPACTION_RETENTION=1000
|
||||
- ETCD_QUOTA_BACKEND_BYTES=4294967296
|
||||
- ETCD_SNAPSHOT_COUNT=50000
|
||||
networks:
|
||||
- vector
|
||||
volumes:
|
||||
- ./milvus/etcd:/etcd
|
||||
command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
|
||||
healthcheck:
|
||||
test: ['CMD', 'etcdctl', 'endpoint', 'health']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
milvusStandalone:
|
||||
container_name: milvusStandalone
|
||||
image: ${{milvus-standalone.image}}:${{milvus-standalone.tag}}
|
||||
command: ['milvus', 'run', 'standalone']
|
||||
security_opt:
|
||||
- seccomp:unconfined
|
||||
environment:
|
||||
ETCD_ENDPOINTS: milvus-etcd:2379
|
||||
MINIO_ADDRESS: milvus-minio:9000
|
||||
networks:
|
||||
- fastgpt
|
||||
- vector
|
||||
volumes:
|
||||
- ./milvus/data:/var/lib/milvus
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9091/healthz']
|
||||
interval: 30s
|
||||
start_period: 90s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
depends_on:
|
||||
- 'milvus-etcd'
|
||||
- 'milvus-minio'
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
ob:
|
||||
image: ${{oceanbase.image}}:${{oceanbase.tag}}
|
||||
container_name: ob
|
||||
restart: always
|
||||
# ports: # 生产环境建议不要暴露
|
||||
# - 2881:2881
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
|
||||
- OB_SYS_PASSWORD=obsyspassword
|
||||
# 不同于传统数据库,OceanBase 数据库的账号包含更多字段,包括用户名、租户名和集群名。经典格式为"用户名@租户名#集群名"
|
||||
# 比如用mysql客户端连接时,根据本文件的默认配置,应该指定 "-uroot@tenantname"
|
||||
- OB_TENANT_NAME=tenantname
|
||||
- OB_TENANT_PASSWORD=tenantpassword
|
||||
# MODE分为MINI和NORMAL, 后者会最大程度使用主机资源
|
||||
- MODE=MINI
|
||||
- OB_SERVER_IP=127.0.0.1
|
||||
# 更多环境变量配置见oceanbase官方文档: https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002013494
|
||||
volumes:
|
||||
- ../ob/data:/root/ob
|
||||
- ../ob/config:/root/.obd/cluster
|
||||
configs:
|
||||
- source: init_sql
|
||||
target: /root/boot/init.d/init.sql
|
||||
healthcheck:
|
||||
# obclient -h127.0.0.1 -P2881 -uroot@tenantname -ptenantpassword -e "SELECT 1;"
|
||||
test:
|
||||
[
|
||||
"CMD-SHELL",
|
||||
'obclient -h$${OB_SERVER_IP} -P2881 -uroot@$${OB_TENANT_NAME} -p$${OB_TENANT_PASSWORD} -e "SELECT 1;"',
|
||||
]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 1000
|
||||
start_period: 10s
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
pg:
|
||||
image: ${{pg.image}}:${{pg.tag}}
|
||||
container_name: pg
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
|
||||
- POSTGRES_USER=username
|
||||
- POSTGRES_PASSWORD=password
|
||||
- POSTGRES_DB=postgres
|
||||
volumes:
|
||||
- ./pg/data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'username', '-d', 'postgres']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
|
|
@ -1,16 +0,0 @@
|
|||
---
|
||||
title: 加入社区
|
||||
description: ' 加入 FastGPT 开发者社区和我们一起成长'
|
||||
---
|
||||
|
||||
FastGPT 是一个由用户和贡献者参与推动的开源项目,如果您对产品使用存在疑问和建议,可尝试以下方式寻求支持。我们的团队与社区会竭尽所能为您提供帮助。
|
||||
|
||||
- 📱 扫码加入飞书交流群👇
|
||||
|
||||
<img
|
||||
width="400px"
|
||||
src="https://oss.laf.run/otnvvf-imgs/fastgpt-feishu1.png"
|
||||
className="medium-zoom-image"
|
||||
/>
|
||||
|
||||
- 🐞 请将任何 FastGPT 的 Bug、问题和需求提交到 [GitHub Issue](https://github.com/labring/fastgpt/issues/new/choose)。
|
||||
|
|
@ -19,8 +19,8 @@ import { Alert } from '@/components/docs/Alert';
|
|||
<Alert icon="🤖" context="success">
|
||||
|
||||
- MongoDB:用于存储除了向量外的各类数据
|
||||
- PostgreSQL/Milvus:存储向量数据
|
||||
- OneAPI: 聚合各类 AI API,支持多模型调用 (任何模型问题,先自行通过 OneAPI 测试校验)
|
||||
- PostgreSQL/Milvus/Oceanbase:存储向量数据
|
||||
- AIProxy: 聚合各类 AI API,支持多模型调用 (任何模型问题,先自行通过 OneAPI 测试校验)
|
||||
|
||||
</Alert>
|
||||
|
||||
|
|
@ -99,12 +99,91 @@ brew install orbstack
|
|||
|
||||
## 开始部署
|
||||
|
||||
### 1. 下载 docker-compose.yml
|
||||
### 1. 获取 `docker-compose.yml` 和 `config.json` 配置文件
|
||||
|
||||
非 Linux 环境或无法访问外网环境,可手动创建一个目录,并下载配置文件和对应版本的`docker-compose.yml`,在这个文件夹中依据下载的配置文件运行docker,若作为本地开发使用推荐`docker-compose-pgvector`版本,并且自行拉取并运行`sandbox`和`fastgpt`,并在docker配置文件中注释掉`sandbox`和`fastgpt`的部分
|
||||
#### 方法一:使用脚本部署
|
||||
|
||||
- [config.json](https://raw.githubusercontent.com/labring/FastGPT/refs/heads/main/projects/app/data/config.json)
|
||||
- [docker-compose.yml](https://github.com/labring/FastGPT/blob/main/deploy/docker) (注意,不同向量库版本的文件不一样)
|
||||
<Tabs items={['PgVector版本','Oceanbase版本','Milvus版本','Zilliz版本']}>
|
||||
<Tab value="PgVector版本">
|
||||
国内镜像(阿里云)
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=cn --vector=pg
|
||||
```
|
||||
|
||||
非国内镜像(dockhub, ghcr)
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=global --vector=pg
|
||||
```
|
||||
需要在 Linux/MacOS/Windows WSL 环境下执行
|
||||
</Tab>
|
||||
|
||||
<Tab value="Oceanbase版本">
|
||||
国内镜像(阿里云)
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=cn --vector=oceanbase
|
||||
```
|
||||
|
||||
非国内镜像(dockhub, ghcr)
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=global --vector=oceanbase
|
||||
```
|
||||
需要在 Linux/MacOS/Windows WSL 环境下执行
|
||||
</Tab>
|
||||
<Tab value="Milvus版本">
|
||||
国内镜像(阿里云)
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=cn --vector=milvus
|
||||
```
|
||||
|
||||
非国内镜像(dockhub, ghcr)
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=global --vector=milvus
|
||||
```
|
||||
需要在 Linux/MacOS/Windows WSL 环境下执行
|
||||
</Tab>
|
||||
<Tab value="Zilliz版本">
|
||||
国内镜像(阿里云)
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=cn --vector=zilliz
|
||||
```
|
||||
|
||||
非国内镜像(dockhub, ghcr)
|
||||
|
||||
```bash
|
||||
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=global --vector=zilliz
|
||||
```
|
||||
需要在 Linux/MacOS/Windows WSL 环境下执行
|
||||
|
||||
zilliz 还需要获取密钥,参考 [部署 Zilliz 版本获取账号和密钥](#部署-zilliz-版本获取账号和密钥)
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
#### 方法二:手动下载部署
|
||||
如果部署环境为非 *nix 环境或无法访问外网,需要手动下载 `docker-compose.yml` 进行部署
|
||||
|
||||
选择并下载您的 `docker-compose.yml` 文件
|
||||
- Pgvector
|
||||
- 中国大陆地区镜像源(阿里云):[docker-compose.pg.yml](https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.pg.yml)
|
||||
- 全球镜像源(dockerhub, ghcr):[docker-compose.pg.yml](https://doc.fastgpt.cn/deploy/docker/global/docker-compose.pg.yml)
|
||||
- Oceanbase
|
||||
- 中国大陆地区镜像源(阿里云):[docker-compose.ob.yml](https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.ob.yml)
|
||||
- 全球镜像源(dockerhub, ghcr):[docker-compose.ob.yml](https://doc.fastgpt.cn/deploy/docker/global/docker-compose.ob.yml)
|
||||
- Milvus
|
||||
- 中国大陆地区镜像源(阿里云):[docker-compose.milvus.yml](https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.milvus.yml)
|
||||
- 全球镜像源(dockerhub, ghcr):[docker-compose.milvus.yml](https://doc.fastgpt.cn/deploy/docker/global/docker-compose.milvus.yml)
|
||||
- Zilliz
|
||||
- 中国大陆地区镜像源(阿里云):[docker-compose.zilliz.yml](https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.zilliz.yml)
|
||||
- 全球镜像源(dockerhub, ghcr):[docker-compose.zilliz.yml](https://doc.fastgpt.cn/deploy/docker/global/docker-compose.zilliz.yml)
|
||||
|
||||
下载 config.json 文件
|
||||
- [config.json](https://doc.fastgpt.cn/deploy/config/config.json)
|
||||
|
||||
<Alert icon="🤖" context="success">
|
||||
|
||||
|
|
@ -112,50 +191,9 @@ brew install orbstack
|
|||
|
||||
</Alert>
|
||||
|
||||
**Linux 快速脚本**
|
||||
|
||||
```bash
|
||||
mkdir fastgpt
|
||||
cd fastgpt
|
||||
curl -O https://raw.githubusercontent.com/labring/FastGPT/main/projects/app/data/config.json
|
||||
|
||||
# pgvector 版本(测试推荐,简单快捷)
|
||||
curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/deploy/docker/docker-compose-pgvector.yml
|
||||
# oceanbase 版本(需要将init.sql和docker-compose.yml放在同一个文件夹,方便挂载)
|
||||
# curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/deploy/docker/docker-compose-oceanbase/docker-compose.yml
|
||||
# curl -o init.sql https://raw.githubusercontent.com/labring/FastGPT/main/deploy/docker/docker-compose-oceanbase/init.sql
|
||||
# milvus 版本
|
||||
# curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/deploy/docker/docker-compose-milvus.yml
|
||||
# zilliz 版本
|
||||
# curl -o docker-compose.yml https://raw.githubusercontent.com/labring/FastGPT/main/deploy/docker/docker-compose-zilliz.yml
|
||||
```
|
||||
|
||||
### 2. 修改环境变量
|
||||
|
||||
找到 yml 文件中,fastgpt 容器的环境变量进行下面操作:
|
||||
|
||||
<Tabs items={['PgVector版本','Oceanbase版本','Milvus版本','Zilliz版本']}>
|
||||
<Tab value="PgVector版本">
|
||||
无需操作
|
||||
</Tab>
|
||||
<Tab value="Oceanbase版本">
|
||||
无需操作
|
||||
</Tab>
|
||||
<Tab value="Milvus版本">
|
||||
无需操作
|
||||
</Tab>
|
||||
<Tab value="Zilliz版本">
|
||||
打开 [Zilliz Cloud](https://zilliz.com.cn/), 创建实例并获取相关秘钥。
|
||||
|
||||

|
||||
|
||||
<Alert icon="🤖" context="success">
|
||||
|
||||
1. 修改`MILVUS_ADDRESS`和`MILVUS_TOKEN`链接参数,分别对应 `zilliz` 的 `Public Endpoint` 和 `Api key`,记得把自己ip加入白名单。
|
||||
|
||||
</Alert>
|
||||
</Tab>
|
||||
</Tabs>
|
||||
按照您的需求自行修改环境变量,建议在生产环境修改账号密码等。
|
||||
对于 Zilliz 版本 还需要获取密钥,参考 [部署 Zilliz 版本获取账号和密钥](#部署-zilliz-版本获取账号和密钥)
|
||||
|
||||
### 3. 修改 config.json 配置文件
|
||||
|
||||
|
|
@ -360,3 +398,14 @@ mongo连接失败,查看mongo的运行状态**对应日志**。
|
|||
### 如何修改密码
|
||||
|
||||
修改`docker-compose.yml`文件中`DEFAULT_ROOT_PSW`并重启即可,密码会自动更新。
|
||||
|
||||
### 部署 Zilliz 版本,获取账号和密钥
|
||||
打开 [Zilliz Cloud](https://zilliz.com.cn/), 创建实例并获取相关秘钥。
|
||||
|
||||

|
||||
|
||||
<Alert icon="🤖" context="success">
|
||||
|
||||
1. 修改`MILVUS_ADDRESS`和`MILVUS_TOKEN`链接参数,分别对应 `zilliz` 的 `Public Endpoint` 和 `Api key`,记得把自己ip加入白名单。
|
||||
|
||||
</Alert>
|
||||
|
|
|
|||
|
|
@ -8,49 +8,46 @@ import FastGPTLink from '@/components/docs/linkFastGPT';
|
|||
|
||||
本文档介绍了如何设置开发环境以构建和测试 <FastGPTLink>FastGPT</FastGPTLink>。
|
||||
|
||||
## 前置依赖项
|
||||
## 前置开发环境
|
||||
|
||||
您需要在计算机上安装和配置以下依赖项才能构建 <FastGPTLink>FastGPT</FastGPTLink>:
|
||||
|
||||
- [Git](http://git-scm.com/)
|
||||
- [Docker](https://www.docker.com/)(构建镜像)
|
||||
- [Node.js v20.14.0](http://nodejs.org)(版本尽量一样,可以使用nvm管理node版本)
|
||||
- [Git](https://git-scm.com/)
|
||||
- [Docker](https://www.docker.com/)
|
||||
- [Node.js v20.14.0](https://nodejs.org)(版本尽量一样,可以使用 [nvm](https://github.com/nvm-sh/nvm) 管理 node 版本)
|
||||
- [pnpm](https://pnpm.io/) 推荐版本 9.4.0 (目前官方的开发环境)
|
||||
- make命令: 根据不同平台,百度安装 (官方是GNU Make 4.3)
|
||||
|
||||
建议在 *nix 环境进行开发 (Linux, MacOS, Windows WSL)
|
||||
|
||||
## 开始本地开发
|
||||
|
||||
<Alert context="success">
|
||||
### 1. Fork FastGPT 存储库
|
||||
|
||||
1. 用户默认的时区为 `Asia/Shanghai`,非 linux 环境时候,获取系统时间会异常,本地开发时候,可以将用户的时区调整成 UTC(+0)。
|
||||
2. 建议先服务器装好**数据库**,再进行本地开发。
|
||||
|
||||
</Alert>
|
||||
|
||||
### 1. Fork 存储库
|
||||
|
||||
您需要 Fork [存储库](https://github.com/labring/FastGPT)。
|
||||
您需要 Fork [FastGPT 存储库](https://github.com/labring/FastGPT)。
|
||||
|
||||
### 2. 克隆存储库
|
||||
|
||||
克隆您在 GitHub 上 Fork 的存储库:
|
||||
|
||||
```
|
||||
git clone git@github.com:<github_username>/FastGPT.git
|
||||
git clone git@github.com:<your_github_username>/FastGPT.git
|
||||
```
|
||||
|
||||
**目录简要说明**
|
||||
|
||||
1. `projects` 目录下为 FastGPT 应用代码。其中 `app` 为 FastGPT 核心应用。(后续可能会引入其他应用)
|
||||
2. NextJS 框架前后端放在一起,API 服务位于 `src/pages/api` 目录内。
|
||||
3. `packages` 目录为共用代码,通过 workspace 被注入到 `projects` 中,已配置 monorepo 自动注入,无需额外打包。
|
||||
### 3. 通过 docker 启动开发环境
|
||||
|
||||
### 3. 安装数据库
|
||||
若您本地已经通过 docker 启动了 FastGPT,则需要先关闭,否则会有端口冲突。
|
||||
|
||||
第一次开发,需要先部署数据库,建议本地开发可以随便找一台 2C2G 的轻量小数据库实践,或者新建文件夹并配置相关文件用以运行docker。数据库部署教程:[Docker 快速部署](/docs/introduction/development/docker/)。部署完了,可以本地访问其数据库。
|
||||
切换到 `FastGPT/deploy/dev` 目录,执行 `docker compose up -d` 运行 FastGPT 的各种依赖。
|
||||
|
||||
```bash
|
||||
cd FastGPT/deploy/dev
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
<Alert context="warning">
|
||||
Mongo 数据库需要注意,需要注意在连接地址中增加 `directConnection=true`
|
||||
1. 如果无法获取镜像,可以选择国内镜像版本的 docker-compose.yml 文件:`docker compose -f docker-compose.cn.yml up -d`
|
||||
2. Mongo 数据库需要注意,需要注意在连接地址中增加 `directConnection=true`
|
||||
参数,才能连接上副本集的数据库。
|
||||
</Alert>
|
||||
|
||||
|
|
@ -58,15 +55,29 @@ git clone git@github.com:<github_username>/FastGPT.git
|
|||
|
||||
以下文件均在 `projects/app` 路径下。
|
||||
|
||||
```bash
|
||||
# 确保你现在在 projects/app 下
|
||||
pwd
|
||||
# 应当输出 /xxxx/xxxx/xxx/FastGPT/projects/app
|
||||
```
|
||||
|
||||
**1. 环境变量**
|
||||
|
||||
复制`.env.template`文件,在同级目录下生成一个`.env.local` 文件,修改`.env.local` 里内容才是有效的变量。变量说明见 .env.template,主要需要修改`API_KEY`和数据库的地址与端口以及数据库账号的用户名和密码,具体配置需要和docker配置文件相同,其中用户名和密码如需修改需要修改docker配置文件、数据库和`.env.local`文件,不能只改一处。
|
||||
复制 `.env.template` 文件,在同级目录下生成一个`.env.local` 文件,修改`.env.local` 里内容才是有效的变量。
|
||||
变量说明见 `.env.template`
|
||||
如果没有修改 docker-compose.yaml 中的变量,`.env.template` 中的默认值就可以,不需要进行修改,否则需要和 `yml` 中的变量一致。
|
||||
|
||||
**2. config 配置文件**
|
||||
```bash
|
||||
cp .env.template .env.local
|
||||
```
|
||||
|
||||
**2. config.json 配置文件**
|
||||
|
||||
复制 `data/config.json` 文件,生成一个 `data/config.local.json` 配置文件,具体配置参数说明,可参考 [config 配置说明](/docs/introduction/development/configuration)
|
||||
|
||||
**注意:json 配置文件不能包含注释,介绍中为了方便看才加入的注释**
|
||||
```bash
|
||||
cp data/config.json data/config.local.json
|
||||
```
|
||||
|
||||
这个文件大部分时候不需要修改。只需要关注 `systemEnv` 里的参数:
|
||||
|
||||
|
|
@ -82,28 +93,22 @@ git clone git@github.com:<github_username>/FastGPT.git
|
|||
```bash
|
||||
# 代码根目录下执行,会安装根 package、projects 和 packages 内所有依赖
|
||||
# 如果提示 isolate-vm 安装失败,可以参考:https://github.com/laverdet/isolated-vm?tab=readme-ov-file#requirements
|
||||
pwd # 应该在代码的根目录
|
||||
pnpm i
|
||||
|
||||
# 非 Make 运行
|
||||
cd projects/app
|
||||
pnpm dev
|
||||
|
||||
# Make 运行
|
||||
make dev name=app
|
||||
```
|
||||
|
||||
### 6. 部署打包
|
||||
默认 next 将运行在 3000 端口,访问 http://localhost:3000
|
||||
|
||||
### 6. 打包
|
||||
|
||||
建议直接使用 Docker 进行打包。
|
||||
```bash
|
||||
# Docker cmd: Build image, not proxy
|
||||
docker build -f ./projects/app/Dockerfile -t registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.1 . --build-arg name=app
|
||||
# Make cmd: Build image, not proxy
|
||||
make build name=app image=registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.1
|
||||
|
||||
# Docker cmd: Build image with proxy
|
||||
docker build -f ./projects/app/Dockerfile -t registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.1 . --build-arg name=app --build-arg proxy=taobao
|
||||
# Make cmd: Build image with proxy
|
||||
make build name=app image=registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8.1 proxy=taobao
|
||||
# 没有 Proxy
|
||||
docker build -f ./projects/app/Dockerfile -t fastgpt . --build-arg name=app
|
||||
# Taobao Proxy
|
||||
docker build -f ./projects/app/Dockerfile -t fastgpt. --build-arg name=app --build-arg proxy=taobao
|
||||
```
|
||||
|
||||
如果不使用 `docker` 打包,需要手动把 `Dockerfile` 里 run 阶段的内容全部手动执行一遍(非常不推荐)。
|
||||
|
|
@ -118,6 +123,10 @@ make build name=app image=registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.8
|
|||
|
||||
## QA
|
||||
|
||||
### 获取系统时间异常
|
||||
|
||||
如果用户默认的时区为 `Asia/Shanghai`, 非 linux 环境时,获取系统时间会异常,本地开发时,可以将用户的时区调整成 UTC(+0)。
|
||||
|
||||
### 本地数据库无法连接
|
||||
|
||||
1. 如果你是连接远程的数据库,先检查对应的端口是否开放。
|
||||
|
|
@ -178,9 +187,9 @@ FastGPT 采用 pnpm workspace 方式构建 monorepo 项目,主要分为两个
|
|||
|
||||
FastGPT 在代码模块划分时,按DDD的思想进行划分,主要分为以下几个领域:
|
||||
|
||||
core - 核心功能(知识库,工作流,应用,对话)
|
||||
support - 支撑功能(用户体系,计费,鉴权等)
|
||||
common - 基础功能(日志管理,文件读写等)
|
||||
- core - 核心功能(知识库,工作流,应用,对话)
|
||||
- support - 支撑功能(用户体系,计费,鉴权等)
|
||||
- common - 基础功能(日志管理,文件读写等)
|
||||
|
||||
<details>
|
||||
<summary>代码结构说明</summary>
|
||||
|
|
|
|||
|
|
@ -3,11 +3,11 @@
|
|||
"description": "FastGPT 社区版",
|
||||
"icon": "🔧",
|
||||
"pages": [
|
||||
"community",
|
||||
"intro",
|
||||
"quick-start",
|
||||
"sealos",
|
||||
"configuration",
|
||||
"intro",
|
||||
"docker",
|
||||
"configuration",
|
||||
"faq",
|
||||
"signoz",
|
||||
"modelConfig",
|
||||
|
|
|
|||
|
|
@ -382,7 +382,7 @@ event取值:
|
|||
对于用户选择,你只需要直接传递一个选择的结果给 messages 即可。
|
||||
|
||||
```bash
|
||||
curl --location --request POST 'https://localhost:3000/api/v1/chat/completions' \
|
||||
curl --location --request POST 'http://localhost:3000/api/v1/chat/completions' \
|
||||
--header 'Authorization: Bearer fastgpt-xxx' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data-raw '{
|
||||
|
|
@ -404,7 +404,7 @@ curl --location --request POST 'https://localhost:3000/api/v1/chat/completions'
|
|||
表单输入稍微麻烦一点,需要将输入的内容,以对象形式并序列化成字符串,作为`messages`的值。对象的 key 对应表单的 key,value 为用户输入的值。务必确保`chatId`是一致的。
|
||||
|
||||
```bash
|
||||
curl --location --request POST 'https://localhost:3000/api/v1/chat/completions' \
|
||||
curl --location --request POST 'http://localhost:3000/api/v1/chat/completions' \
|
||||
--header 'Authorization: Bearer fastgpt-xxxx' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data-raw '{
|
||||
|
|
@ -847,7 +847,7 @@ curl --location --request DELETE 'http://localhost:3000/api/core/chat/clearHisto
|
|||
<Tab value="参数说明" >
|
||||
|
||||
<div>
|
||||
- appId - 应用 Id
|
||||
- appId - 应用 Id
|
||||
- chatId - 历史记录 Id
|
||||
</div>
|
||||
|
||||
|
|
|
|||
|
|
@ -939,7 +939,7 @@ curl --location --request POST 'http://localhost:3000/api/core/dataset/collectio
|
|||
<Tab value="请求示例" >
|
||||
|
||||
```bash
|
||||
curl --location --request POST 'https://localhost:3000/api/core/dataset/data/pushData' \
|
||||
curl --location --request POST 'http://localhost:3000/api/core/dataset/data/pushData' \
|
||||
--header 'Authorization: Bearer apikey' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data-raw '{
|
||||
|
|
@ -1242,7 +1242,7 @@ curl --location --request DELETE 'http://localhost:3000/api/core/dataset/data/de
|
|||
<Tab value="请求示例" >
|
||||
|
||||
```bash
|
||||
curl --location --request POST 'https://localhost:3000/api/core/dataset/searchTest' \
|
||||
curl --location --request POST 'http://localhost:3000/api/core/dataset/searchTest' \
|
||||
--header 'Authorization: Bearer fastgpt-xxxxx' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data-raw '{
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ FastGPT 的 API Key **有 2 类**,一类是全局通用的 key (无法直接
|
|||
OpenAPI 中,所有的接口都通过 Header.Authorization 进行鉴权。
|
||||
|
||||
```
|
||||
baseUrl: "https://localhost:3000/api"
|
||||
baseUrl: "http://localhost:3000/api"
|
||||
headers: {
|
||||
Authorization: "Bearer {{apikey}}"
|
||||
}
|
||||
|
|
@ -38,7 +38,7 @@ headers: {
|
|||
**发起应用对话示例**
|
||||
|
||||
```sh
|
||||
curl --location --request POST 'https://localhost:3000/api/v1/chat/completions' \
|
||||
curl --location --request POST 'http://localhost:3000/api/v1/chat/completions' \
|
||||
--header 'Authorization: Bearer fastgpt-xxxxxx' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data-raw '{
|
||||
|
|
@ -59,7 +59,7 @@ curl --location --request POST 'https://localhost:3000/api/v1/chat/completions'
|
|||
`v4.8.13`后支持传入自定义的用户 ID, 并且存入历史记录中。
|
||||
|
||||
```sh
|
||||
curl --location --request POST 'https://localhost:3000/api/v1/chat/completions' \
|
||||
curl --location --request POST 'http://localhost:3000/api/v1/chat/completions' \
|
||||
--header 'Authorization: Bearer fastgpt-xxxxxx' \
|
||||
--header 'Content-Type: application/json' \
|
||||
--data-raw '{
|
||||
|
|
|
|||
|
|
@ -0,0 +1,100 @@
|
|||
---
|
||||
title: 快速开始
|
||||
description: 一键启动 FastGPT,进行本地体验
|
||||
---
|
||||
|
||||
import { Alert } from '@/components/docs/Alert';
|
||||
import FastGPTLink from '@/components/docs/linkFastGPT';
|
||||
|
||||
## 本地 Docker 快速体验
|
||||
|
||||
快速体验将默认使用 PostgreSQL Vector 向量库。
|
||||
|
||||
### 1. 准备 Docker 环境
|
||||
|
||||
<Tabs items={['Linux','MacOS','Windows']}>
|
||||
<Tab value="Linux">
|
||||
参考:https://www.docker.com
|
||||
```bash
|
||||
# 安装 Docker
|
||||
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
|
||||
systemctl enable --now docker
|
||||
# 安装 docker-compose
|
||||
curl -L https://github.com/docker/compose/releases/download/v2.20.3/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
|
||||
chmod +x /usr/local/bin/docker-compose
|
||||
# 验证安装
|
||||
docker -v
|
||||
docker-compose -v
|
||||
# 如失效,自行百度~
|
||||
```
|
||||
</Tab>
|
||||
<Tab value="MacOS">
|
||||
推荐直接使用 [Orbstack](https://orbstack.dev/)。可直接通过 Homebrew 来安装:
|
||||
|
||||
```bash
|
||||
brew install orbstack
|
||||
```
|
||||
|
||||
或者直接[下载安装包](https://orbstack.dev/download)进行安装。
|
||||
|
||||
</Tab>
|
||||
<Tab value="Windows">
|
||||
我们建议将源代码和其他数据绑定到 Linux 容器中时,将其存储在 Linux 文件系统中,而不是 Windows 文件系统中。
|
||||
|
||||
可以选择直接[使用 WSL 2 后端在 Windows 中安装 Docker Desktop](https://docs.docker.com/desktop/wsl/)。
|
||||
|
||||
也可以直接[在 WSL 2 中安装命令行版本的 Docker](https://nickjanetakis.com/blog/install-docker-in-wsl-2-without-docker-desktop)。
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
### 2. 获取部署文件
|
||||
|
||||
<Tabs items={['使用 bash 脚本一键安装','手动安装']}>
|
||||
<Tab value="使用 bash 脚本一键安装">
|
||||
根据您的网络环境选择:
|
||||
|
||||
国内镜像(阿里云)
|
||||
```bash
|
||||
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=cn --vector=pg
|
||||
```
|
||||
非国内镜像(dockhub, ghcr)
|
||||
```bash
|
||||
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) --region=global --vector=pg
|
||||
```
|
||||
上述脚本需要在 bash 环境下使用(Windows 用户请使用 Windows WSL,或者使用手动安装)
|
||||
</Tab>
|
||||
<Tab value="手动安装">
|
||||
在你有权限的目录下创建一个目录,在目录内下载如下两个文件:
|
||||
|
||||
根据您的网络环境选择下载:
|
||||
- [国内镜像版本的 docker-compose.yml](https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.pg.yml)
|
||||
- [非国内镜像版本的 docker-compose.yml](https://doc.fastgpt.cn/deploy/docker/global/docker-compose.pg.yml)
|
||||
|
||||
下载 config.json
|
||||
- [config.json](https://doc.fastgpt.cn/deploy/config.json)
|
||||
|
||||
</Tab>
|
||||
</Tabs>
|
||||
|
||||
### 3. 启动
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.pg.yml up -d
|
||||
```
|
||||
|
||||
等待服务启动,通过 http://localhost:3000 进行访问
|
||||
默认用户为 `root`,密码为 `1234`
|
||||
|
||||
### Sealos 一键部署
|
||||
本地部署起不来?试试 [Sealos 一键部署](sealos)。
|
||||
|
||||
## 进阶使用
|
||||
|
||||
### 进行本地开发
|
||||
|
||||
如果要改代码或者给 FastGPT 贡献代码,请参考:[进行本地开发](intro)
|
||||
|
||||
### 生产环境部署
|
||||
|
||||
如果要在生产环境进行部署,使用其他的向量库,配置相关的环境变量,请参考:[生产环境部署](docker)
|
||||
|
|
@ -66,3 +66,17 @@ FastGPT 完全对齐 OpenAI 官方接口,支持一键接入企业微信、公
|
|||
# 知识库核心流程图
|
||||
|
||||

|
||||
|
||||
---
|
||||
|
||||
FastGPT 是一个由用户和贡献者参与推动的开源项目,如果您对产品使用存在疑问和建议,可尝试以下方式寻求支持。我们的团队与社区会竭尽所能为您提供帮助。
|
||||
|
||||
- 📱 扫码加入飞书交流群👇
|
||||
|
||||
<img
|
||||
width="400px"
|
||||
src="https://oss.laf.run/otnvvf-imgs/fastgpt-feishu1.png"
|
||||
className="medium-zoom-image"
|
||||
/>
|
||||
|
||||
- 🐞 请将任何 FastGPT 的 Bug、问题和需求提交到 [GitHub Issue](https://github.com/labring/fastgpt/issues/new/choose)。
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ description: FastGPT 文档目录
|
|||
- [/docs/faq/points_consumption](/docs/faq/points_consumption)
|
||||
- [/docs/introduction/cloud](/docs/introduction/cloud)
|
||||
- [/docs/introduction/commercial](/docs/introduction/commercial)
|
||||
- [/docs/introduction/development/community](/docs/introduction/development/community)
|
||||
- [/docs/introduction/development/configuration](/docs/introduction/development/configuration)
|
||||
- [/docs/introduction/development/custom-models/bge-rerank](/docs/introduction/development/custom-models/bge-rerank)
|
||||
- [/docs/introduction/development/custom-models/chatglm2](/docs/introduction/development/custom-models/chatglm2)
|
||||
|
|
@ -42,6 +41,7 @@ description: FastGPT 文档目录
|
|||
- [/docs/introduction/development/proxy/cloudflare](/docs/introduction/development/proxy/cloudflare)
|
||||
- [/docs/introduction/development/proxy/http_proxy](/docs/introduction/development/proxy/http_proxy)
|
||||
- [/docs/introduction/development/proxy/nginx](/docs/introduction/development/proxy/nginx)
|
||||
- [/docs/introduction/development/quick-start](/docs/introduction/development/quick-start)
|
||||
- [/docs/introduction/development/sealos](/docs/introduction/development/sealos)
|
||||
- [/docs/introduction/development/signoz](/docs/introduction/development/signoz)
|
||||
- [/docs/introduction/guide/DialogBoxes/htmlRendering](/docs/introduction/guide/DialogBoxes/htmlRendering)
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ import { Alert } from '@/components/docs/Alert';
|
|||
## 替换三方应用的变量
|
||||
|
||||
```bash
|
||||
OPENAI_API_BASE_URL: https://localhost:3000/api (改成自己部署的域名)
|
||||
OPENAI_API_BASE_URL: http://localhost:3000/api (改成自己部署的域名)
|
||||
OPENAI_API_KEY = 上一步获取到的密钥
|
||||
```
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@
|
|||
"document/content/docs/faq/points_consumption.mdx": "2025-08-02T19:38:37+08:00",
|
||||
"document/content/docs/introduction/cloud.mdx": "2025-08-02T19:38:37+08:00",
|
||||
"document/content/docs/introduction/commercial.mdx": "2025-09-21T23:09:46+08:00",
|
||||
"document/content/docs/introduction/development/community.mdx": "2025-08-02T19:38:37+08:00",
|
||||
"document/content/docs/introduction/development/configuration.mdx": "2025-08-05T23:20:39+08:00",
|
||||
"document/content/docs/introduction/development/custom-models/bge-rerank.mdx": "2025-07-23T21:35:03+08:00",
|
||||
"document/content/docs/introduction/development/custom-models/chatglm2-m3e.mdx": "2025-08-05T23:20:39+08:00",
|
||||
|
|
@ -21,9 +20,9 @@
|
|||
"document/content/docs/introduction/development/custom-models/xinference.mdx": "2025-08-05T23:20:39+08:00",
|
||||
"document/content/docs/introduction/development/design/dataset.mdx": "2025-07-23T21:35:03+08:00",
|
||||
"document/content/docs/introduction/development/design/design_plugin.mdx": "2025-08-20T19:00:48+08:00",
|
||||
"document/content/docs/introduction/development/docker.mdx": "2025-08-05T23:20:39+08:00",
|
||||
"document/content/docs/introduction/development/docker.mdx": "2025-09-28T17:34:59+08:00",
|
||||
"document/content/docs/introduction/development/faq.mdx": "2025-08-12T22:22:18+08:00",
|
||||
"document/content/docs/introduction/development/intro.mdx": "2025-08-05T23:20:39+08:00",
|
||||
"document/content/docs/introduction/development/intro.mdx": "2025-09-28T17:34:59+08:00",
|
||||
"document/content/docs/introduction/development/migration/docker_db.mdx": "2025-07-23T21:35:03+08:00",
|
||||
"document/content/docs/introduction/development/migration/docker_mongo.mdx": "2025-07-23T21:35:03+08:00",
|
||||
"document/content/docs/introduction/development/modelConfig/ai-proxy.mdx": "2025-08-05T23:20:39+08:00",
|
||||
|
|
@ -32,9 +31,9 @@
|
|||
"document/content/docs/introduction/development/modelConfig/ppio.mdx": "2025-08-05T23:20:39+08:00",
|
||||
"document/content/docs/introduction/development/modelConfig/siliconCloud.mdx": "2025-08-05T23:20:39+08:00",
|
||||
"document/content/docs/introduction/development/openapi/app.mdx": "2025-09-26T13:18:51+08:00",
|
||||
"document/content/docs/introduction/development/openapi/chat.mdx": "2025-08-14T18:54:47+08:00",
|
||||
"document/content/docs/introduction/development/openapi/dataset.mdx": "2025-09-15T20:02:54+08:00",
|
||||
"document/content/docs/introduction/development/openapi/intro.mdx": "2025-08-14T18:54:47+08:00",
|
||||
"document/content/docs/introduction/development/openapi/chat.mdx": "2025-09-26T14:18:50+08:00",
|
||||
"document/content/docs/introduction/development/openapi/dataset.mdx": "2025-09-26T14:18:50+08:00",
|
||||
"document/content/docs/introduction/development/openapi/intro.mdx": "2025-09-26T14:18:50+08:00",
|
||||
"document/content/docs/introduction/development/openapi/share.mdx": "2025-08-05T23:20:39+08:00",
|
||||
"document/content/docs/introduction/development/proxy/cloudflare.mdx": "2025-07-23T21:35:03+08:00",
|
||||
"document/content/docs/introduction/development/proxy/http_proxy.mdx": "2025-07-23T21:35:03+08:00",
|
||||
|
|
@ -112,7 +111,6 @@
|
|||
"document/content/docs/upgrading/4-12/4123.mdx": "2025-09-07T20:55:14+08:00",
|
||||
"document/content/docs/upgrading/4-12/4124.mdx": "2025-09-17T22:29:56+08:00",
|
||||
"document/content/docs/upgrading/4-13/4130.mdx": "2025-09-26T13:32:15+08:00",
|
||||
"document/content/docs/upgrading/4-13/4131.mdx": "2025-09-26T16:01:20+08:00",
|
||||
"document/content/docs/upgrading/4-8/40.mdx": "2025-08-02T19:38:37+08:00",
|
||||
"document/content/docs/upgrading/4-8/41.mdx": "2025-08-02T19:38:37+08:00",
|
||||
"document/content/docs/upgrading/4-8/42.mdx": "2025-08-02T19:38:37+08:00",
|
||||
|
|
@ -191,7 +189,7 @@
|
|||
"document/content/docs/use-cases/external-integration/dingtalk.mdx": "2025-07-23T21:35:03+08:00",
|
||||
"document/content/docs/use-cases/external-integration/feishu.mdx": "2025-07-24T14:23:04+08:00",
|
||||
"document/content/docs/use-cases/external-integration/official_account.mdx": "2025-08-05T23:20:39+08:00",
|
||||
"document/content/docs/use-cases/external-integration/openapi.mdx": "2025-08-14T18:54:47+08:00",
|
||||
"document/content/docs/use-cases/external-integration/openapi.mdx": "2025-09-26T14:18:50+08:00",
|
||||
"document/content/docs/use-cases/external-integration/wecom.mdx": "2025-09-16T14:22:28+08:00",
|
||||
"document/content/docs/use-cases/index.mdx": "2025-07-24T14:23:04+08:00"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,22 @@
|
|||
// 已使用 json5 进行解析,会自动去掉注释,无需手动去除
|
||||
{
|
||||
"feConfigs": {
|
||||
"lafEnv": "https://laf.dev", // laf环境。 https://laf.run (杭州阿里云) ,或者私有化的laf环境。如果使用 Laf openapi 功能,需要最新版的 laf 。
|
||||
"mcpServerProxyEndpoint": "" // mcp server 代理地址,例如: http://localhost:3005
|
||||
},
|
||||
"systemEnv": {
|
||||
"datasetParseMaxProcess": 10, // 知识库文件解析最大线程数量
|
||||
"vectorMaxProcess": 10, // 向量处理线程数量
|
||||
"qaMaxProcess": 10, // 问答拆分线程数量
|
||||
"vlmMaxProcess": 10, // 图片理解模型最大处理进程
|
||||
"tokenWorkers": 30, // Token 计算线程保持数,会持续占用内存,不能设置太大。
|
||||
"hnswEfSearch": 100, // 向量搜索参数,仅对 PG 和 OB 生效。越大,搜索越精确,但是速度越慢。设置为100,有99%+精度。
|
||||
"hnswMaxScanTuples": 100000, // 向量搜索最大扫描数据量,仅对 PG生效。
|
||||
"customPdfParse": {
|
||||
"url": "", // 自定义 PDF 解析服务地址
|
||||
"key": "", // 自定义 PDF 解析服务密钥
|
||||
"doc2xKey": "", // doc2x 服务密钥
|
||||
"price": 0 // PDF 解析服务价格
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,300 @@
|
|||
# 用于部署的 docker-compose 文件:
|
||||
# - 向量库为 Pgvector
|
||||
# - FastGPT 端口映射为 3000:3000
|
||||
# - FastGPT-mcp-server 端口映射 3005:3000
|
||||
# - 建议修改账密后再运行
|
||||
|
||||
# plugin auth token
|
||||
x-plugin-auth-token: &x-plugin-auth-token token
|
||||
# aiproxy token
|
||||
x-aiproxy-token: &x-aiproxy-token token
|
||||
# 数据库连接相关配置
|
||||
x-share-db-config: &x-share-db-config
|
||||
MONGODB_URI: mongodb://username:password@mongo:27017/fastgpt?authSource=admin
|
||||
DB_MAX_LINK: 30
|
||||
REDIS_URL: redis://default:mypassword@redis:6379
|
||||
S3_ENDPOINT: fastgpt-minio
|
||||
S3_PORT: 9000
|
||||
S3_USE_SSL: false
|
||||
S3_ACCESS_KEY: minioadmin
|
||||
S3_SECRET_KEY: minioadmin
|
||||
|
||||
# 向量库相关配置
|
||||
x-vec-config: &x-vec-config
|
||||
MILVUS_ADDRESS: http://milvusStandalone:19530
|
||||
MILVUS_TOKEN: none
|
||||
|
||||
|
||||
version: '3.3'
|
||||
services:
|
||||
# Vector DB
|
||||
milvus-minio:
|
||||
container_name: milvus-minio
|
||||
image: minio/minio:RELEASE.2023-03-20T20-16-18Z
|
||||
environment:
|
||||
MINIO_ACCESS_KEY: minioadmin
|
||||
MINIO_SECRET_KEY: minioadmin
|
||||
networks:
|
||||
- vector
|
||||
volumes:
|
||||
- ./milvus-minio:/minio_data
|
||||
command: minio server /minio_data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
# milvus
|
||||
milvus-etcd:
|
||||
container_name: milvus-etcd
|
||||
image:
|
||||
image: quay.io/coreos/etcd:v3.5.5
|
||||
environment:
|
||||
- ETCD_AUTO_COMPACTION_MODE=revision
|
||||
- ETCD_AUTO_COMPACTION_RETENTION=1000
|
||||
- ETCD_QUOTA_BACKEND_BYTES=4294967296
|
||||
- ETCD_SNAPSHOT_COUNT=50000
|
||||
networks:
|
||||
- vector
|
||||
volumes:
|
||||
- ./milvus/etcd:/etcd
|
||||
command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
|
||||
healthcheck:
|
||||
test: ['CMD', 'etcdctl', 'endpoint', 'health']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
milvusStandalone:
|
||||
container_name: milvusStandalone
|
||||
image: milvusdb/milvus:v2.4.3
|
||||
command: ['milvus', 'run', 'standalone']
|
||||
security_opt:
|
||||
- seccomp:unconfined
|
||||
environment:
|
||||
ETCD_ENDPOINTS: milvus-etcd:2379
|
||||
MINIO_ADDRESS: milvus-minio:9000
|
||||
networks:
|
||||
- fastgpt
|
||||
- vector
|
||||
volumes:
|
||||
- ./milvus/data:/var/lib/milvus
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9091/healthz']
|
||||
interval: 30s
|
||||
start_period: 90s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
depends_on:
|
||||
- 'milvus-etcd'
|
||||
- 'milvus-minio'
|
||||
|
||||
|
||||
mongo:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # cpu 不支持 AVX 时候使用 4.4.29
|
||||
container_name: mongo
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
command: mongod --keyFile /data/mongodb.key --replSet rs0
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=myusername
|
||||
- MONGO_INITDB_ROOT_PASSWORD=mypassword
|
||||
volumes:
|
||||
- ./mongo/data:/data/db
|
||||
entrypoint:
|
||||
- bash
|
||||
- -c
|
||||
- |
|
||||
openssl rand -base64 128 > /data/mongodb.key
|
||||
chmod 400 /data/mongodb.key
|
||||
chown 999:999 /data/mongodb.key
|
||||
echo 'const isInited = rs.status().ok === 1
|
||||
if(!isInited){
|
||||
rs.initiate({
|
||||
_id: "rs0",
|
||||
members: [
|
||||
{ _id: 0, host: "mongo:27017" }
|
||||
]
|
||||
})
|
||||
}' > /data/initReplicaSet.js
|
||||
# 启动MongoDB服务
|
||||
exec docker-entrypoint.sh "$$@" &
|
||||
|
||||
# 等待MongoDB服务启动
|
||||
until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')"; do
|
||||
echo "Waiting for MongoDB to start..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# 执行初始化副本集的脚本
|
||||
mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js
|
||||
|
||||
# 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
|
||||
wait $$!
|
||||
redis:
|
||||
image: redis:7.2-alpine
|
||||
container_name: redis
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
command: |
|
||||
redis-server --requirepass mypassword --loglevel warning --maxclients 10000 --appendonly yes --save 60 10 --maxmemory 4gb --maxmemory-policy noeviction
|
||||
healthcheck:
|
||||
test: ['CMD', 'redis-cli', '-a', 'mypassword', 'ping']
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
volumes:
|
||||
- ./redis/data:/data
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.13.0 # git
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
- pg
|
||||
restart: always
|
||||
environment:
|
||||
<<: [*x-share-db-config, *x-vec-config]
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
FE_DOMAIN:
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
DEFAULT_ROOT_PSW: 1234
|
||||
# 登录凭证密钥
|
||||
TOKEN_KEY: any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
ROOT_KEY: root_key
|
||||
# 文件阅读加密
|
||||
FILE_TOKEN_KEY: filetoken
|
||||
# 密钥加密key
|
||||
AES256_SECRET_KEY: fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
PLUGIN_BASE_URL: http://fastgpt-plugin:3000
|
||||
PLUGIN_TOKEN: *x-plugin-auth-token
|
||||
# sandbox 地址
|
||||
SANDBOX_URL: http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
AIPROXY_API_ENDPOINT: http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 数据库最大连接数
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
WORKFLOW_MAX_LOOP_TIMES: 100
|
||||
# 对话文件过期天数
|
||||
CHAT_FILE_EXPIRE_TIME: 7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
|
||||
fastgpt-minio:
|
||||
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
|
||||
container_name: fastgpt-minio
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
volumes:
|
||||
- ./fastgpt-minio:/data
|
||||
command: server /data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
sandbox:
|
||||
container_name: sandbox
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
fastgpt-mcp-server:
|
||||
container_name: fastgpt-mcp-server
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
ports:
|
||||
- 3005:3000
|
||||
restart: always
|
||||
environment:
|
||||
- FASTGPT_ENDPOINT=http://fastgpt:3000
|
||||
fastgpt-plugin:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-plugin:v0.2.0
|
||||
container_name: fastgpt-plugin
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
<<: *x-share-db-config
|
||||
AUTH_TOKEN: *x-plugin-auth-token
|
||||
S3_BUCKET: fastgpt-plugins
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
# AI Proxy
|
||||
aiproxy:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.3.2
|
||||
container_name: aiproxy
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
aiproxy_pg:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
# 对应 fastgpt 里的AIPROXY_API_TOKEN
|
||||
ADMIN_KEY: *x-aiproxy-token
|
||||
# 错误日志详情保存时间(小时)
|
||||
LOG_DETAIL_STORAGE_HOURS: 1
|
||||
# 数据库连接地址
|
||||
SQL_DSN: postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
# 最大重试次数
|
||||
RETRY_TIMES: 3
|
||||
# 不需要计费
|
||||
BILLING_ENABLED: false
|
||||
# 不需要严格检测模型
|
||||
DISABLE_MODEL_CONFIG: true
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/api/status']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
aiproxy_pg:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:0.8.0-pg15 # docker hub
|
||||
restart: unless-stopped
|
||||
container_name: aiproxy_pg
|
||||
volumes:
|
||||
- ./aiproxy_pg:/var/lib/postgresql/data
|
||||
networks:
|
||||
- aiproxy
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: aiproxy
|
||||
POSTGRES_PASSWORD: aiproxy
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'postgres', '-d', 'aiproxy']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
networks:
|
||||
fastgpt:
|
||||
aiproxy:
|
||||
vector:
|
||||
|
||||
|
|
@ -0,0 +1,280 @@
|
|||
# 用于部署的 docker-compose 文件:
|
||||
# - 向量库为 Pgvector
|
||||
# - FastGPT 端口映射为 3000:3000
|
||||
# - FastGPT-mcp-server 端口映射 3005:3000
|
||||
# - 建议修改账密后再运行
|
||||
|
||||
# plugin auth token
|
||||
x-plugin-auth-token: &x-plugin-auth-token token
|
||||
# aiproxy token
|
||||
x-aiproxy-token: &x-aiproxy-token token
|
||||
# 数据库连接相关配置
|
||||
x-share-db-config: &x-share-db-config
|
||||
MONGODB_URI: mongodb://username:password@mongo:27017/fastgpt?authSource=admin
|
||||
DB_MAX_LINK: 30
|
||||
REDIS_URL: redis://default:mypassword@redis:6379
|
||||
S3_ENDPOINT: fastgpt-minio
|
||||
S3_PORT: 9000
|
||||
S3_USE_SSL: false
|
||||
S3_ACCESS_KEY: minioadmin
|
||||
S3_SECRET_KEY: minioadmin
|
||||
|
||||
# 向量库相关配置
|
||||
x-vec-config: &x-vec-config
|
||||
undefined
|
||||
|
||||
version: '3.3'
|
||||
services:
|
||||
# Vector DB
|
||||
ob:
|
||||
image: oceanbase/oceanbase-ce:4.3.5-lts
|
||||
container_name: ob
|
||||
restart: always
|
||||
# ports: # 生产环境建议不要暴露
|
||||
# - 2881:2881
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
|
||||
- OB_SYS_PASSWORD=obsyspassword
|
||||
# 不同于传统数据库,OceanBase 数据库的账号包含更多字段,包括用户名、租户名和集群名。经典格式为"用户名@租户名#集群名"
|
||||
# 比如用mysql客户端连接时,根据本文件的默认配置,应该指定 "-uroot@tenantname"
|
||||
- OB_TENANT_NAME=tenantname
|
||||
- OB_TENANT_PASSWORD=tenantpassword
|
||||
# MODE分为MINI和NORMAL, 后者会最大程度使用主机资源
|
||||
- MODE=MINI
|
||||
- OB_SERVER_IP=127.0.0.1
|
||||
# 更多环境变量配置见oceanbase官方文档: https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002013494
|
||||
volumes:
|
||||
- ../ob/data:/root/ob
|
||||
- ../ob/config:/root/.obd/cluster
|
||||
configs:
|
||||
- source: init_sql
|
||||
target: /root/boot/init.d/init.sql
|
||||
healthcheck:
|
||||
# obclient -h127.0.0.1 -P2881 -uroot@tenantname -ptenantpassword -e "SELECT 1;"
|
||||
test:
|
||||
[
|
||||
"CMD-SHELL",
|
||||
'obclient -h$${OB_SERVER_IP} -P2881 -uroot@$${OB_TENANT_NAME} -p$${OB_TENANT_PASSWORD} -e "SELECT 1;"',
|
||||
]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 1000
|
||||
start_period: 10s
|
||||
|
||||
|
||||
mongo:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # cpu 不支持 AVX 时候使用 4.4.29
|
||||
container_name: mongo
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
command: mongod --keyFile /data/mongodb.key --replSet rs0
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=myusername
|
||||
- MONGO_INITDB_ROOT_PASSWORD=mypassword
|
||||
volumes:
|
||||
- ./mongo/data:/data/db
|
||||
entrypoint:
|
||||
- bash
|
||||
- -c
|
||||
- |
|
||||
openssl rand -base64 128 > /data/mongodb.key
|
||||
chmod 400 /data/mongodb.key
|
||||
chown 999:999 /data/mongodb.key
|
||||
echo 'const isInited = rs.status().ok === 1
|
||||
if(!isInited){
|
||||
rs.initiate({
|
||||
_id: "rs0",
|
||||
members: [
|
||||
{ _id: 0, host: "mongo:27017" }
|
||||
]
|
||||
})
|
||||
}' > /data/initReplicaSet.js
|
||||
# 启动MongoDB服务
|
||||
exec docker-entrypoint.sh "$$@" &
|
||||
|
||||
# 等待MongoDB服务启动
|
||||
until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')"; do
|
||||
echo "Waiting for MongoDB to start..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# 执行初始化副本集的脚本
|
||||
mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js
|
||||
|
||||
# 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
|
||||
wait $$!
|
||||
redis:
|
||||
image: redis:7.2-alpine
|
||||
container_name: redis
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
command: |
|
||||
redis-server --requirepass mypassword --loglevel warning --maxclients 10000 --appendonly yes --save 60 10 --maxmemory 4gb --maxmemory-policy noeviction
|
||||
healthcheck:
|
||||
test: ['CMD', 'redis-cli', '-a', 'mypassword', 'ping']
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
volumes:
|
||||
- ./redis/data:/data
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.13.0 # git
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
- pg
|
||||
restart: always
|
||||
environment:
|
||||
<<: [*x-share-db-config, *x-vec-config]
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
FE_DOMAIN:
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
DEFAULT_ROOT_PSW: 1234
|
||||
# 登录凭证密钥
|
||||
TOKEN_KEY: any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
ROOT_KEY: root_key
|
||||
# 文件阅读加密
|
||||
FILE_TOKEN_KEY: filetoken
|
||||
# 密钥加密key
|
||||
AES256_SECRET_KEY: fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
PLUGIN_BASE_URL: http://fastgpt-plugin:3000
|
||||
PLUGIN_TOKEN: *x-plugin-auth-token
|
||||
# sandbox 地址
|
||||
SANDBOX_URL: http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
AIPROXY_API_ENDPOINT: http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 数据库最大连接数
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
WORKFLOW_MAX_LOOP_TIMES: 100
|
||||
# 对话文件过期天数
|
||||
CHAT_FILE_EXPIRE_TIME: 7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
|
||||
fastgpt-minio:
|
||||
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
|
||||
container_name: fastgpt-minio
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
volumes:
|
||||
- ./fastgpt-minio:/data
|
||||
command: server /data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
sandbox:
|
||||
container_name: sandbox
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
fastgpt-mcp-server:
|
||||
container_name: fastgpt-mcp-server
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
ports:
|
||||
- 3005:3000
|
||||
restart: always
|
||||
environment:
|
||||
- FASTGPT_ENDPOINT=http://fastgpt:3000
|
||||
fastgpt-plugin:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-plugin:v0.2.0
|
||||
container_name: fastgpt-plugin
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
<<: *x-share-db-config
|
||||
AUTH_TOKEN: *x-plugin-auth-token
|
||||
S3_BUCKET: fastgpt-plugins
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
# AI Proxy
|
||||
aiproxy:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.3.2
|
||||
container_name: aiproxy
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
aiproxy_pg:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
# 对应 fastgpt 里的AIPROXY_API_TOKEN
|
||||
ADMIN_KEY: *x-aiproxy-token
|
||||
# 错误日志详情保存时间(小时)
|
||||
LOG_DETAIL_STORAGE_HOURS: 1
|
||||
# 数据库连接地址
|
||||
SQL_DSN: postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
# 最大重试次数
|
||||
RETRY_TIMES: 3
|
||||
# 不需要计费
|
||||
BILLING_ENABLED: false
|
||||
# 不需要严格检测模型
|
||||
DISABLE_MODEL_CONFIG: true
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/api/status']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
aiproxy_pg:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:0.8.0-pg15 # docker hub
|
||||
restart: unless-stopped
|
||||
container_name: aiproxy_pg
|
||||
volumes:
|
||||
- ./aiproxy_pg:/var/lib/postgresql/data
|
||||
networks:
|
||||
- aiproxy
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: aiproxy
|
||||
POSTGRES_PASSWORD: aiproxy
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'postgres', '-d', 'aiproxy']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
networks:
|
||||
fastgpt:
|
||||
aiproxy:
|
||||
vector:
|
||||
configs:
|
||||
init_sql:
|
||||
name: init_sql
|
||||
content: |
|
||||
ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30;
|
||||
|
||||
|
|
@ -0,0 +1,257 @@
|
|||
# 用于部署的 docker-compose 文件:
|
||||
# - 向量库为 Pgvector
|
||||
# - FastGPT 端口映射为 3000:3000
|
||||
# - FastGPT-mcp-server 端口映射 3005:3000
|
||||
# - 建议修改账密后再运行
|
||||
|
||||
# plugin auth token
|
||||
x-plugin-auth-token: &x-plugin-auth-token token
|
||||
# aiproxy token
|
||||
x-aiproxy-token: &x-aiproxy-token token
|
||||
# 数据库连接相关配置
|
||||
x-share-db-config: &x-share-db-config
|
||||
MONGODB_URI: mongodb://username:password@mongo:27017/fastgpt?authSource=admin
|
||||
DB_MAX_LINK: 30
|
||||
REDIS_URL: redis://default:mypassword@redis:6379
|
||||
S3_ENDPOINT: fastgpt-minio
|
||||
S3_PORT: 9000
|
||||
S3_USE_SSL: false
|
||||
S3_ACCESS_KEY: minioadmin
|
||||
S3_SECRET_KEY: minioadmin
|
||||
|
||||
# 向量库相关配置
|
||||
x-vec-config: &x-vec-config
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres
|
||||
|
||||
version: '3.3'
|
||||
services:
|
||||
# Vector DB
|
||||
pg:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:0.8.0-pg15
|
||||
container_name: pg
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
|
||||
- POSTGRES_USER=username
|
||||
- POSTGRES_PASSWORD=password
|
||||
- POSTGRES_DB=postgres
|
||||
volumes:
|
||||
- ./pg/data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'username', '-d', 'postgres']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
|
||||
|
||||
mongo:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # cpu 不支持 AVX 时候使用 4.4.29
|
||||
container_name: mongo
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
command: mongod --keyFile /data/mongodb.key --replSet rs0
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=myusername
|
||||
- MONGO_INITDB_ROOT_PASSWORD=mypassword
|
||||
volumes:
|
||||
- ./mongo/data:/data/db
|
||||
entrypoint:
|
||||
- bash
|
||||
- -c
|
||||
- |
|
||||
openssl rand -base64 128 > /data/mongodb.key
|
||||
chmod 400 /data/mongodb.key
|
||||
chown 999:999 /data/mongodb.key
|
||||
echo 'const isInited = rs.status().ok === 1
|
||||
if(!isInited){
|
||||
rs.initiate({
|
||||
_id: "rs0",
|
||||
members: [
|
||||
{ _id: 0, host: "mongo:27017" }
|
||||
]
|
||||
})
|
||||
}' > /data/initReplicaSet.js
|
||||
# 启动MongoDB服务
|
||||
exec docker-entrypoint.sh "$$@" &
|
||||
|
||||
# 等待MongoDB服务启动
|
||||
until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')"; do
|
||||
echo "Waiting for MongoDB to start..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# 执行初始化副本集的脚本
|
||||
mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js
|
||||
|
||||
# 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
|
||||
wait $$!
|
||||
redis:
|
||||
image: redis:7.2-alpine
|
||||
container_name: redis
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
command: |
|
||||
redis-server --requirepass mypassword --loglevel warning --maxclients 10000 --appendonly yes --save 60 10 --maxmemory 4gb --maxmemory-policy noeviction
|
||||
healthcheck:
|
||||
test: ['CMD', 'redis-cli', '-a', 'mypassword', 'ping']
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
volumes:
|
||||
- ./redis/data:/data
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.13.0 # git
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
- pg
|
||||
restart: always
|
||||
environment:
|
||||
<<: [*x-share-db-config, *x-vec-config]
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
FE_DOMAIN:
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
DEFAULT_ROOT_PSW: 1234
|
||||
# 登录凭证密钥
|
||||
TOKEN_KEY: any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
ROOT_KEY: root_key
|
||||
# 文件阅读加密
|
||||
FILE_TOKEN_KEY: filetoken
|
||||
# 密钥加密key
|
||||
AES256_SECRET_KEY: fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
PLUGIN_BASE_URL: http://fastgpt-plugin:3000
|
||||
PLUGIN_TOKEN: *x-plugin-auth-token
|
||||
# sandbox 地址
|
||||
SANDBOX_URL: http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
AIPROXY_API_ENDPOINT: http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 数据库最大连接数
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
WORKFLOW_MAX_LOOP_TIMES: 100
|
||||
# 对话文件过期天数
|
||||
CHAT_FILE_EXPIRE_TIME: 7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
|
||||
fastgpt-minio:
|
||||
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
|
||||
container_name: fastgpt-minio
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
volumes:
|
||||
- ./fastgpt-minio:/data
|
||||
command: server /data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
sandbox:
|
||||
container_name: sandbox
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
fastgpt-mcp-server:
|
||||
container_name: fastgpt-mcp-server
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
ports:
|
||||
- 3005:3000
|
||||
restart: always
|
||||
environment:
|
||||
- FASTGPT_ENDPOINT=http://fastgpt:3000
|
||||
fastgpt-plugin:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-plugin:v0.2.0
|
||||
container_name: fastgpt-plugin
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
<<: *x-share-db-config
|
||||
AUTH_TOKEN: *x-plugin-auth-token
|
||||
S3_BUCKET: fastgpt-plugins
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
# AI Proxy
|
||||
aiproxy:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.3.2
|
||||
container_name: aiproxy
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
aiproxy_pg:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
# 对应 fastgpt 里的AIPROXY_API_TOKEN
|
||||
ADMIN_KEY: *x-aiproxy-token
|
||||
# 错误日志详情保存时间(小时)
|
||||
LOG_DETAIL_STORAGE_HOURS: 1
|
||||
# 数据库连接地址
|
||||
SQL_DSN: postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
# 最大重试次数
|
||||
RETRY_TIMES: 3
|
||||
# 不需要计费
|
||||
BILLING_ENABLED: false
|
||||
# 不需要严格检测模型
|
||||
DISABLE_MODEL_CONFIG: true
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/api/status']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
aiproxy_pg:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:0.8.0-pg15 # docker hub
|
||||
restart: unless-stopped
|
||||
container_name: aiproxy_pg
|
||||
volumes:
|
||||
- ./aiproxy_pg:/var/lib/postgresql/data
|
||||
networks:
|
||||
- aiproxy
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: aiproxy
|
||||
POSTGRES_PASSWORD: aiproxy
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'postgres', '-d', 'aiproxy']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
networks:
|
||||
fastgpt:
|
||||
aiproxy:
|
||||
vector:
|
||||
|
||||
|
|
@ -0,0 +1,240 @@
|
|||
# 用于部署的 docker-compose 文件:
|
||||
# - 向量库为 Pgvector
|
||||
# - FastGPT 端口映射为 3000:3000
|
||||
# - FastGPT-mcp-server 端口映射 3005:3000
|
||||
# - 建议修改账密后再运行
|
||||
|
||||
# plugin auth token
|
||||
x-plugin-auth-token: &x-plugin-auth-token token
|
||||
# aiproxy token
|
||||
x-aiproxy-token: &x-aiproxy-token token
|
||||
# 数据库连接相关配置
|
||||
x-share-db-config: &x-share-db-config
|
||||
MONGODB_URI: mongodb://username:password@mongo:27017/fastgpt?authSource=admin
|
||||
DB_MAX_LINK: 30
|
||||
REDIS_URL: redis://default:mypassword@redis:6379
|
||||
S3_ENDPOINT: fastgpt-minio
|
||||
S3_PORT: 9000
|
||||
S3_USE_SSL: false
|
||||
S3_ACCESS_KEY: minioadmin
|
||||
S3_SECRET_KEY: minioadmin
|
||||
|
||||
# 向量库相关配置
|
||||
x-vec-config: &x-vec-config
|
||||
MILVUS_ADDRESS: zilliz_cloud_address
|
||||
MILVUS_TOKEN: zilliz_cloud_token
|
||||
|
||||
version: '3.3'
|
||||
services:
|
||||
# Vector DB
|
||||
|
||||
|
||||
mongo:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # cpu 不支持 AVX 时候使用 4.4.29
|
||||
container_name: mongo
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
command: mongod --keyFile /data/mongodb.key --replSet rs0
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=myusername
|
||||
- MONGO_INITDB_ROOT_PASSWORD=mypassword
|
||||
volumes:
|
||||
- ./mongo/data:/data/db
|
||||
entrypoint:
|
||||
- bash
|
||||
- -c
|
||||
- |
|
||||
openssl rand -base64 128 > /data/mongodb.key
|
||||
chmod 400 /data/mongodb.key
|
||||
chown 999:999 /data/mongodb.key
|
||||
echo 'const isInited = rs.status().ok === 1
|
||||
if(!isInited){
|
||||
rs.initiate({
|
||||
_id: "rs0",
|
||||
members: [
|
||||
{ _id: 0, host: "mongo:27017" }
|
||||
]
|
||||
})
|
||||
}' > /data/initReplicaSet.js
|
||||
# 启动MongoDB服务
|
||||
exec docker-entrypoint.sh "$$@" &
|
||||
|
||||
# 等待MongoDB服务启动
|
||||
until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')"; do
|
||||
echo "Waiting for MongoDB to start..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# 执行初始化副本集的脚本
|
||||
mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js
|
||||
|
||||
# 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
|
||||
wait $$!
|
||||
redis:
|
||||
image: redis:7.2-alpine
|
||||
container_name: redis
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
command: |
|
||||
redis-server --requirepass mypassword --loglevel warning --maxclients 10000 --appendonly yes --save 60 10 --maxmemory 4gb --maxmemory-policy noeviction
|
||||
healthcheck:
|
||||
test: ['CMD', 'redis-cli', '-a', 'mypassword', 'ping']
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
volumes:
|
||||
- ./redis/data:/data
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.13.0 # git
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
- pg
|
||||
restart: always
|
||||
environment:
|
||||
<<: [*x-share-db-config, *x-vec-config]
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
FE_DOMAIN:
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
DEFAULT_ROOT_PSW: 1234
|
||||
# 登录凭证密钥
|
||||
TOKEN_KEY: any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
ROOT_KEY: root_key
|
||||
# 文件阅读加密
|
||||
FILE_TOKEN_KEY: filetoken
|
||||
# 密钥加密key
|
||||
AES256_SECRET_KEY: fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
PLUGIN_BASE_URL: http://fastgpt-plugin:3000
|
||||
PLUGIN_TOKEN: *x-plugin-auth-token
|
||||
# sandbox 地址
|
||||
SANDBOX_URL: http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
AIPROXY_API_ENDPOINT: http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 数据库最大连接数
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
WORKFLOW_MAX_LOOP_TIMES: 100
|
||||
# 对话文件过期天数
|
||||
CHAT_FILE_EXPIRE_TIME: 7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
|
||||
fastgpt-minio:
|
||||
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
|
||||
container_name: fastgpt-minio
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
volumes:
|
||||
- ./fastgpt-minio:/data
|
||||
command: server /data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
sandbox:
|
||||
container_name: sandbox
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
fastgpt-mcp-server:
|
||||
container_name: fastgpt-mcp-server
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
ports:
|
||||
- 3005:3000
|
||||
restart: always
|
||||
environment:
|
||||
- FASTGPT_ENDPOINT=http://fastgpt:3000
|
||||
fastgpt-plugin:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-plugin:v0.2.0
|
||||
container_name: fastgpt-plugin
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
<<: *x-share-db-config
|
||||
AUTH_TOKEN: *x-plugin-auth-token
|
||||
S3_BUCKET: fastgpt-plugins
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
# AI Proxy
|
||||
aiproxy:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.3.2
|
||||
container_name: aiproxy
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
aiproxy_pg:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
# 对应 fastgpt 里的AIPROXY_API_TOKEN
|
||||
ADMIN_KEY: *x-aiproxy-token
|
||||
# 错误日志详情保存时间(小时)
|
||||
LOG_DETAIL_STORAGE_HOURS: 1
|
||||
# 数据库连接地址
|
||||
SQL_DSN: postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
# 最大重试次数
|
||||
RETRY_TIMES: 3
|
||||
# 不需要计费
|
||||
BILLING_ENABLED: false
|
||||
# 不需要严格检测模型
|
||||
DISABLE_MODEL_CONFIG: true
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/api/status']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
aiproxy_pg:
|
||||
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:0.8.0-pg15 # docker hub
|
||||
restart: unless-stopped
|
||||
container_name: aiproxy_pg
|
||||
volumes:
|
||||
- ./aiproxy_pg:/var/lib/postgresql/data
|
||||
networks:
|
||||
- aiproxy
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: aiproxy
|
||||
POSTGRES_PASSWORD: aiproxy
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'postgres', '-d', 'aiproxy']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
networks:
|
||||
fastgpt:
|
||||
aiproxy:
|
||||
vector:
|
||||
|
||||
|
|
@ -0,0 +1,300 @@
|
|||
# 用于部署的 docker-compose 文件:
|
||||
# - 向量库为 Pgvector
|
||||
# - FastGPT 端口映射为 3000:3000
|
||||
# - FastGPT-mcp-server 端口映射 3005:3000
|
||||
# - 建议修改账密后再运行
|
||||
|
||||
# plugin auth token
|
||||
x-plugin-auth-token: &x-plugin-auth-token token
|
||||
# aiproxy token
|
||||
x-aiproxy-token: &x-aiproxy-token token
|
||||
# 数据库连接相关配置
|
||||
x-share-db-config: &x-share-db-config
|
||||
MONGODB_URI: mongodb://username:password@mongo:27017/fastgpt?authSource=admin
|
||||
DB_MAX_LINK: 30
|
||||
REDIS_URL: redis://default:mypassword@redis:6379
|
||||
S3_ENDPOINT: fastgpt-minio
|
||||
S3_PORT: 9000
|
||||
S3_USE_SSL: false
|
||||
S3_ACCESS_KEY: minioadmin
|
||||
S3_SECRET_KEY: minioadmin
|
||||
|
||||
# 向量库相关配置
|
||||
x-vec-config: &x-vec-config
|
||||
MILVUS_ADDRESS: http://milvusStandalone:19530
|
||||
MILVUS_TOKEN: none
|
||||
|
||||
|
||||
version: '3.3'
|
||||
services:
|
||||
# Vector DB
|
||||
milvus-minio:
|
||||
container_name: milvus-minio
|
||||
image: minio/minio:RELEASE.2023-03-20T20-16-18Z
|
||||
environment:
|
||||
MINIO_ACCESS_KEY: minioadmin
|
||||
MINIO_SECRET_KEY: minioadmin
|
||||
networks:
|
||||
- vector
|
||||
volumes:
|
||||
- ./milvus-minio:/minio_data
|
||||
command: minio server /minio_data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
# milvus
|
||||
milvus-etcd:
|
||||
container_name: milvus-etcd
|
||||
image:
|
||||
image: quay.io/coreos/etcd:v3.5.5
|
||||
environment:
|
||||
- ETCD_AUTO_COMPACTION_MODE=revision
|
||||
- ETCD_AUTO_COMPACTION_RETENTION=1000
|
||||
- ETCD_QUOTA_BACKEND_BYTES=4294967296
|
||||
- ETCD_SNAPSHOT_COUNT=50000
|
||||
networks:
|
||||
- vector
|
||||
volumes:
|
||||
- ./milvus/etcd:/etcd
|
||||
command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd
|
||||
healthcheck:
|
||||
test: ['CMD', 'etcdctl', 'endpoint', 'health']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
milvusStandalone:
|
||||
container_name: milvusStandalone
|
||||
image: milvusdb/milvus:v2.4.3
|
||||
command: ['milvus', 'run', 'standalone']
|
||||
security_opt:
|
||||
- seccomp:unconfined
|
||||
environment:
|
||||
ETCD_ENDPOINTS: milvus-etcd:2379
|
||||
MINIO_ADDRESS: milvus-minio:9000
|
||||
networks:
|
||||
- fastgpt
|
||||
- vector
|
||||
volumes:
|
||||
- ./milvus/data:/var/lib/milvus
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9091/healthz']
|
||||
interval: 30s
|
||||
start_period: 90s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
depends_on:
|
||||
- 'milvus-etcd'
|
||||
- 'milvus-minio'
|
||||
|
||||
|
||||
mongo:
|
||||
image: mongo:5.0.18 # cpu 不支持 AVX 时候使用 4.4.29
|
||||
container_name: mongo
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
command: mongod --keyFile /data/mongodb.key --replSet rs0
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=myusername
|
||||
- MONGO_INITDB_ROOT_PASSWORD=mypassword
|
||||
volumes:
|
||||
- ./mongo/data:/data/db
|
||||
entrypoint:
|
||||
- bash
|
||||
- -c
|
||||
- |
|
||||
openssl rand -base64 128 > /data/mongodb.key
|
||||
chmod 400 /data/mongodb.key
|
||||
chown 999:999 /data/mongodb.key
|
||||
echo 'const isInited = rs.status().ok === 1
|
||||
if(!isInited){
|
||||
rs.initiate({
|
||||
_id: "rs0",
|
||||
members: [
|
||||
{ _id: 0, host: "mongo:27017" }
|
||||
]
|
||||
})
|
||||
}' > /data/initReplicaSet.js
|
||||
# 启动MongoDB服务
|
||||
exec docker-entrypoint.sh "$$@" &
|
||||
|
||||
# 等待MongoDB服务启动
|
||||
until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')"; do
|
||||
echo "Waiting for MongoDB to start..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# 执行初始化副本集的脚本
|
||||
mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js
|
||||
|
||||
# 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
|
||||
wait $$!
|
||||
redis:
|
||||
image: redis:7.2-alpine
|
||||
container_name: redis
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
command: |
|
||||
redis-server --requirepass mypassword --loglevel warning --maxclients 10000 --appendonly yes --save 60 10 --maxmemory 4gb --maxmemory-policy noeviction
|
||||
healthcheck:
|
||||
test: ['CMD', 'redis-cli', '-a', 'mypassword', 'ping']
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
volumes:
|
||||
- ./redis/data:/data
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: ghcr.io/labring/fastgpt:v4.13.0 # git
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
- pg
|
||||
restart: always
|
||||
environment:
|
||||
<<: [*x-share-db-config, *x-vec-config]
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
FE_DOMAIN:
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
DEFAULT_ROOT_PSW: 1234
|
||||
# 登录凭证密钥
|
||||
TOKEN_KEY: any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
ROOT_KEY: root_key
|
||||
# 文件阅读加密
|
||||
FILE_TOKEN_KEY: filetoken
|
||||
# 密钥加密key
|
||||
AES256_SECRET_KEY: fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
PLUGIN_BASE_URL: http://fastgpt-plugin:3000
|
||||
PLUGIN_TOKEN: *x-plugin-auth-token
|
||||
# sandbox 地址
|
||||
SANDBOX_URL: http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
AIPROXY_API_ENDPOINT: http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 数据库最大连接数
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
WORKFLOW_MAX_LOOP_TIMES: 100
|
||||
# 对话文件过期天数
|
||||
CHAT_FILE_EXPIRE_TIME: 7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
|
||||
fastgpt-minio:
|
||||
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
|
||||
container_name: fastgpt-minio
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
volumes:
|
||||
- ./fastgpt-minio:/data
|
||||
command: server /data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
sandbox:
|
||||
container_name: sandbox
|
||||
image: ghcr.io/labring/fastgpt-sandbox:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
fastgpt-mcp-server:
|
||||
container_name: fastgpt-mcp-server
|
||||
image: ghcr.io/labring/fastgpt-mcp_server:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
ports:
|
||||
- 3005:3000
|
||||
restart: always
|
||||
environment:
|
||||
- FASTGPT_ENDPOINT=http://fastgpt:3000
|
||||
fastgpt-plugin:
|
||||
image: ghcr.io/labring/fastgpt-plugin:v0.2.0
|
||||
container_name: fastgpt-plugin
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
<<: *x-share-db-config
|
||||
AUTH_TOKEN: *x-plugin-auth-token
|
||||
S3_BUCKET: fastgpt-plugins
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
# AI Proxy
|
||||
aiproxy:
|
||||
image: ghcr.io/labring/aiproxy:v0.3.2
|
||||
container_name: aiproxy
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
aiproxy_pg:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
# 对应 fastgpt 里的AIPROXY_API_TOKEN
|
||||
ADMIN_KEY: *x-aiproxy-token
|
||||
# 错误日志详情保存时间(小时)
|
||||
LOG_DETAIL_STORAGE_HOURS: 1
|
||||
# 数据库连接地址
|
||||
SQL_DSN: postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
# 最大重试次数
|
||||
RETRY_TIMES: 3
|
||||
# 不需要计费
|
||||
BILLING_ENABLED: false
|
||||
# 不需要严格检测模型
|
||||
DISABLE_MODEL_CONFIG: true
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/api/status']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
aiproxy_pg:
|
||||
image: pgvector/pgvector:0.8.0-pg15 # docker hub
|
||||
restart: unless-stopped
|
||||
container_name: aiproxy_pg
|
||||
volumes:
|
||||
- ./aiproxy_pg:/var/lib/postgresql/data
|
||||
networks:
|
||||
- aiproxy
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: aiproxy
|
||||
POSTGRES_PASSWORD: aiproxy
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'postgres', '-d', 'aiproxy']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
networks:
|
||||
fastgpt:
|
||||
aiproxy:
|
||||
vector:
|
||||
|
||||
|
|
@ -0,0 +1,280 @@
|
|||
# 用于部署的 docker-compose 文件:
|
||||
# - 向量库为 Pgvector
|
||||
# - FastGPT 端口映射为 3000:3000
|
||||
# - FastGPT-mcp-server 端口映射 3005:3000
|
||||
# - 建议修改账密后再运行
|
||||
|
||||
# plugin auth token
|
||||
x-plugin-auth-token: &x-plugin-auth-token token
|
||||
# aiproxy token
|
||||
x-aiproxy-token: &x-aiproxy-token token
|
||||
# 数据库连接相关配置
|
||||
x-share-db-config: &x-share-db-config
|
||||
MONGODB_URI: mongodb://username:password@mongo:27017/fastgpt?authSource=admin
|
||||
DB_MAX_LINK: 30
|
||||
REDIS_URL: redis://default:mypassword@redis:6379
|
||||
S3_ENDPOINT: fastgpt-minio
|
||||
S3_PORT: 9000
|
||||
S3_USE_SSL: false
|
||||
S3_ACCESS_KEY: minioadmin
|
||||
S3_SECRET_KEY: minioadmin
|
||||
|
||||
# 向量库相关配置
|
||||
x-vec-config: &x-vec-config
|
||||
undefined
|
||||
|
||||
version: '3.3'
|
||||
services:
|
||||
# Vector DB
|
||||
ob:
|
||||
image: oceanbase/oceanbase-ce:4.3.5-lts
|
||||
container_name: ob
|
||||
restart: always
|
||||
# ports: # 生产环境建议不要暴露
|
||||
# - 2881:2881
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
|
||||
- OB_SYS_PASSWORD=obsyspassword
|
||||
# 不同于传统数据库,OceanBase 数据库的账号包含更多字段,包括用户名、租户名和集群名。经典格式为"用户名@租户名#集群名"
|
||||
# 比如用mysql客户端连接时,根据本文件的默认配置,应该指定 "-uroot@tenantname"
|
||||
- OB_TENANT_NAME=tenantname
|
||||
- OB_TENANT_PASSWORD=tenantpassword
|
||||
# MODE分为MINI和NORMAL, 后者会最大程度使用主机资源
|
||||
- MODE=MINI
|
||||
- OB_SERVER_IP=127.0.0.1
|
||||
# 更多环境变量配置见oceanbase官方文档: https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000002013494
|
||||
volumes:
|
||||
- ../ob/data:/root/ob
|
||||
- ../ob/config:/root/.obd/cluster
|
||||
configs:
|
||||
- source: init_sql
|
||||
target: /root/boot/init.d/init.sql
|
||||
healthcheck:
|
||||
# obclient -h127.0.0.1 -P2881 -uroot@tenantname -ptenantpassword -e "SELECT 1;"
|
||||
test:
|
||||
[
|
||||
"CMD-SHELL",
|
||||
'obclient -h$${OB_SERVER_IP} -P2881 -uroot@$${OB_TENANT_NAME} -p$${OB_TENANT_PASSWORD} -e "SELECT 1;"',
|
||||
]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 1000
|
||||
start_period: 10s
|
||||
|
||||
|
||||
mongo:
|
||||
image: mongo:5.0.18 # cpu 不支持 AVX 时候使用 4.4.29
|
||||
container_name: mongo
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
command: mongod --keyFile /data/mongodb.key --replSet rs0
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=myusername
|
||||
- MONGO_INITDB_ROOT_PASSWORD=mypassword
|
||||
volumes:
|
||||
- ./mongo/data:/data/db
|
||||
entrypoint:
|
||||
- bash
|
||||
- -c
|
||||
- |
|
||||
openssl rand -base64 128 > /data/mongodb.key
|
||||
chmod 400 /data/mongodb.key
|
||||
chown 999:999 /data/mongodb.key
|
||||
echo 'const isInited = rs.status().ok === 1
|
||||
if(!isInited){
|
||||
rs.initiate({
|
||||
_id: "rs0",
|
||||
members: [
|
||||
{ _id: 0, host: "mongo:27017" }
|
||||
]
|
||||
})
|
||||
}' > /data/initReplicaSet.js
|
||||
# 启动MongoDB服务
|
||||
exec docker-entrypoint.sh "$$@" &
|
||||
|
||||
# 等待MongoDB服务启动
|
||||
until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')"; do
|
||||
echo "Waiting for MongoDB to start..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# 执行初始化副本集的脚本
|
||||
mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js
|
||||
|
||||
# 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
|
||||
wait $$!
|
||||
redis:
|
||||
image: redis:7.2-alpine
|
||||
container_name: redis
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
command: |
|
||||
redis-server --requirepass mypassword --loglevel warning --maxclients 10000 --appendonly yes --save 60 10 --maxmemory 4gb --maxmemory-policy noeviction
|
||||
healthcheck:
|
||||
test: ['CMD', 'redis-cli', '-a', 'mypassword', 'ping']
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
volumes:
|
||||
- ./redis/data:/data
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: ghcr.io/labring/fastgpt:v4.13.0 # git
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
- pg
|
||||
restart: always
|
||||
environment:
|
||||
<<: [*x-share-db-config, *x-vec-config]
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
FE_DOMAIN:
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
DEFAULT_ROOT_PSW: 1234
|
||||
# 登录凭证密钥
|
||||
TOKEN_KEY: any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
ROOT_KEY: root_key
|
||||
# 文件阅读加密
|
||||
FILE_TOKEN_KEY: filetoken
|
||||
# 密钥加密key
|
||||
AES256_SECRET_KEY: fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
PLUGIN_BASE_URL: http://fastgpt-plugin:3000
|
||||
PLUGIN_TOKEN: *x-plugin-auth-token
|
||||
# sandbox 地址
|
||||
SANDBOX_URL: http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
AIPROXY_API_ENDPOINT: http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 数据库最大连接数
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
WORKFLOW_MAX_LOOP_TIMES: 100
|
||||
# 对话文件过期天数
|
||||
CHAT_FILE_EXPIRE_TIME: 7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
|
||||
fastgpt-minio:
|
||||
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
|
||||
container_name: fastgpt-minio
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
volumes:
|
||||
- ./fastgpt-minio:/data
|
||||
command: server /data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
sandbox:
|
||||
container_name: sandbox
|
||||
image: ghcr.io/labring/fastgpt-sandbox:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
fastgpt-mcp-server:
|
||||
container_name: fastgpt-mcp-server
|
||||
image: ghcr.io/labring/fastgpt-mcp_server:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
ports:
|
||||
- 3005:3000
|
||||
restart: always
|
||||
environment:
|
||||
- FASTGPT_ENDPOINT=http://fastgpt:3000
|
||||
fastgpt-plugin:
|
||||
image: ghcr.io/labring/fastgpt-plugin:v0.2.0
|
||||
container_name: fastgpt-plugin
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
<<: *x-share-db-config
|
||||
AUTH_TOKEN: *x-plugin-auth-token
|
||||
S3_BUCKET: fastgpt-plugins
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
# AI Proxy
|
||||
aiproxy:
|
||||
image: ghcr.io/labring/aiproxy:v0.3.2
|
||||
container_name: aiproxy
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
aiproxy_pg:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
# 对应 fastgpt 里的AIPROXY_API_TOKEN
|
||||
ADMIN_KEY: *x-aiproxy-token
|
||||
# 错误日志详情保存时间(小时)
|
||||
LOG_DETAIL_STORAGE_HOURS: 1
|
||||
# 数据库连接地址
|
||||
SQL_DSN: postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
# 最大重试次数
|
||||
RETRY_TIMES: 3
|
||||
# 不需要计费
|
||||
BILLING_ENABLED: false
|
||||
# 不需要严格检测模型
|
||||
DISABLE_MODEL_CONFIG: true
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/api/status']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
aiproxy_pg:
|
||||
image: pgvector/pgvector:0.8.0-pg15 # docker hub
|
||||
restart: unless-stopped
|
||||
container_name: aiproxy_pg
|
||||
volumes:
|
||||
- ./aiproxy_pg:/var/lib/postgresql/data
|
||||
networks:
|
||||
- aiproxy
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: aiproxy
|
||||
POSTGRES_PASSWORD: aiproxy
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'postgres', '-d', 'aiproxy']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
networks:
|
||||
fastgpt:
|
||||
aiproxy:
|
||||
vector:
|
||||
configs:
|
||||
init_sql:
|
||||
name: init_sql
|
||||
content: |
|
||||
ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30;
|
||||
|
||||
|
|
@ -1,18 +1,53 @@
|
|||
# 数据库的默认账号和密码仅首次运行时设置有效
|
||||
# 如果修改了账号密码,记得改数据库和项目连接参数,别只改一处~
|
||||
# 该配置文件只是给快速启动,测试使用。正式使用,记得务必修改账号密码,以及调整合适的知识库参数,共享内存等。
|
||||
# 如何无法访问 dockerhub 和 git,可以用阿里云(阿里云没有arm包)
|
||||
# 用于部署的 docker-compose 文件:
|
||||
# - 向量库为 Pgvector
|
||||
# - FastGPT 端口映射为 3000:3000
|
||||
# - FastGPT-mcp-server 端口映射 3005:3000
|
||||
# - 建议修改账密后再运行
|
||||
|
||||
# plugin auth token
|
||||
x-plugin-auth-token: &x-plugin-auth-token token
|
||||
# aiproxy token
|
||||
x-aiproxy-token: &x-aiproxy-token token
|
||||
# 数据库连接相关配置
|
||||
x-share-db-config: &x-share-db-config
|
||||
MONGODB_URI: mongodb://username:password@mongo:27017/fastgpt?authSource=admin
|
||||
DB_MAX_LINK: 30
|
||||
REDIS_URL: redis://default:mypassword@redis:6379
|
||||
S3_ENDPOINT: fastgpt-minio
|
||||
S3_PORT: 9000
|
||||
S3_USE_SSL: false
|
||||
S3_ACCESS_KEY: minioadmin
|
||||
S3_SECRET_KEY: minioadmin
|
||||
|
||||
# 向量库相关配置
|
||||
x-vec-config: &x-vec-config
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres
|
||||
|
||||
version: '3.3'
|
||||
services:
|
||||
# Vector DB
|
||||
|
||||
pg:
|
||||
image: pgvector/pgvector:0.8.0-pg15
|
||||
container_name: pg
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
# 这里的配置只有首次运行生效。修改后,重启镜像是不会生效的。需要把持久化数据删除再重启,才有效果
|
||||
- POSTGRES_USER=username
|
||||
- POSTGRES_PASSWORD=password
|
||||
- POSTGRES_DB=postgres
|
||||
volumes:
|
||||
- ./pg/data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'username', '-d', 'postgres']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
|
||||
|
||||
# DB
|
||||
mongo:
|
||||
image: mongo:5.0.18 # dockerhub
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.18 # 阿里云
|
||||
# image: mongo:4.4.29 # cpu不支持AVX时候使用
|
||||
image: mongo:5.0.18 # cpu 不支持 AVX 时候使用 4.4.29
|
||||
container_name: mongo
|
||||
restart: always
|
||||
networks:
|
||||
|
|
@ -69,15 +104,65 @@ services:
|
|||
start_period: 30s
|
||||
volumes:
|
||||
- ./redis/data:/data
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: ghcr.io/labring/fastgpt:v4.13.0 # git
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
- pg
|
||||
restart: always
|
||||
environment:
|
||||
<<: [*x-share-db-config, *x-vec-config]
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
FE_DOMAIN:
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
DEFAULT_ROOT_PSW: 1234
|
||||
# 登录凭证密钥
|
||||
TOKEN_KEY: any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
ROOT_KEY: root_key
|
||||
# 文件阅读加密
|
||||
FILE_TOKEN_KEY: filetoken
|
||||
# 密钥加密key
|
||||
AES256_SECRET_KEY: fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
PLUGIN_BASE_URL: http://fastgpt-plugin:3000
|
||||
PLUGIN_TOKEN: *x-plugin-auth-token
|
||||
# sandbox 地址
|
||||
SANDBOX_URL: http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
AIPROXY_API_ENDPOINT: http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 数据库最大连接数
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
WORKFLOW_MAX_LOOP_TIMES: 100
|
||||
# 对话文件过期天数
|
||||
CHAT_FILE_EXPIRE_TIME: 7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
|
||||
fastgpt-minio:
|
||||
image: minio/minio:latest
|
||||
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
|
||||
container_name: fastgpt-minio
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
ports: # comment out if you do not need to expose the port (in production environment, you should not expose the port)
|
||||
- '9000:9000'
|
||||
- '9001:9001'
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
|
|
@ -89,113 +174,38 @@ services:
|
|||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: ghcr.io/labring/fastgpt:v4.12.4 # git
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.12.4 # 阿里云
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
|
||||
restart: always
|
||||
environment:
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
- FE_DOMAIN=
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
- DEFAULT_ROOT_PSW=1234
|
||||
# 登录凭证密钥
|
||||
- TOKEN_KEY=any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
- ROOT_KEY=root_key
|
||||
# 文件阅读加密
|
||||
- FILE_TOKEN_KEY=filetoken
|
||||
# 密钥加密key
|
||||
- AES256_SECRET_KEY=fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
- PLUGIN_BASE_URL=http://fastgpt-plugin:3000
|
||||
- PLUGIN_TOKEN=xxxxxx
|
||||
# sandbox 地址
|
||||
- SANDBOX_URL=http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
- AIPROXY_API_ENDPOINT=http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
- AIPROXY_API_TOKEN=aiproxy
|
||||
|
||||
# 数据库最大连接数
|
||||
- DB_MAX_LINK=30
|
||||
# MongoDB 连接参数. 用户名myusername,密码mypassword。
|
||||
- MONGODB_URI=mongodb://myusername:mypassword@mongo:27017/fastgpt?authSource=admin
|
||||
# Redis 连接参数
|
||||
- REDIS_URL=redis://default:mypassword@redis:6379
|
||||
# 向量库 连接参数
|
||||
# zilliz 连接参数
|
||||
- MILVUS_ADDRESS=zilliz_cloud_address
|
||||
- MILVUS_TOKEN=zilliz_cloud_token
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
- LOG_LEVEL=info
|
||||
- STORE_LOG_LEVEL=warn
|
||||
# 工作流最大运行次数
|
||||
- WORKFLOW_MAX_RUN_TIMES=1000
|
||||
# 批量执行节点,最大输入长度
|
||||
- WORKFLOW_MAX_LOOP_TIMES=100
|
||||
# 对话文件过期天数
|
||||
- CHAT_FILE_EXPIRE_TIME=7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
sandbox:
|
||||
container_name: sandbox
|
||||
image: ghcr.io/labring/fastgpt-sandbox:v4.12.4 # git
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.12.4 # 阿里云
|
||||
image: ghcr.io/labring/fastgpt-sandbox:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
fastgpt-mcp-server:
|
||||
container_name: fastgpt-mcp-server
|
||||
image: ghcr.io/labring/fastgpt-mcp_server:v4.12.4 # git
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.12.4 # 阿里云
|
||||
ports:
|
||||
- 3005:3000
|
||||
image: ghcr.io/labring/fastgpt-mcp_server:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
ports:
|
||||
- 3005:3000
|
||||
restart: always
|
||||
environment:
|
||||
- FASTGPT_ENDPOINT=http://fastgpt:3000
|
||||
fastgpt-plugin:
|
||||
image: ghcr.io/labring/fastgpt-plugin:v0.1.13 # git
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-plugin:v0.1.13 # 阿里云
|
||||
image: ghcr.io/labring/fastgpt-plugin:v0.2.0
|
||||
container_name: fastgpt-plugin
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
- AUTH_TOKEN=xxxxxx # 如果不需要鉴权可以直接去掉这个环境变量
|
||||
|
||||
# 改成 minio 可访问地址,例如 http://192.168.2.2:9000/fastgpt-plugins
|
||||
# 必须指向 Minio 的桶的地址
|
||||
# 如果 Minio 可以直接通过外网访问,可以不设置这个环境变量
|
||||
# - MINIO_CUSTOM_ENDPOINT=http://192.168.2.2:9000
|
||||
|
||||
- MINIO_ENDPOINT=fastgpt-minio
|
||||
- MINIO_PORT=9000
|
||||
- MINIO_USE_SSL=false
|
||||
- MINIO_ACCESS_KEY=minioadmin
|
||||
- MINIO_SECRET_KEY=minioadmin
|
||||
- MINIO_BUCKET=fastgpt-plugins
|
||||
<<: *x-share-db-config
|
||||
AUTH_TOKEN: *x-plugin-auth-token
|
||||
S3_BUCKET: fastgpt-plugins
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
|
||||
# AI Proxy
|
||||
aiproxy:
|
||||
image: ghcr.io/labring/aiproxy:v0.3.2
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.3.2 # 阿里云
|
||||
container_name: aiproxy
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
|
|
@ -203,19 +213,20 @@ services:
|
|||
condition: service_healthy
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
# 对应 fastgpt 里的AIPROXY_API_TOKEN
|
||||
- ADMIN_KEY=aiproxy
|
||||
ADMIN_KEY: *x-aiproxy-token
|
||||
# 错误日志详情保存时间(小时)
|
||||
- LOG_DETAIL_STORAGE_HOURS=1
|
||||
LOG_DETAIL_STORAGE_HOURS: 1
|
||||
# 数据库连接地址
|
||||
- SQL_DSN=postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
SQL_DSN: postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
# 最大重试次数
|
||||
- RETRY_TIMES=3
|
||||
RETRY_TIMES: 3
|
||||
# 不需要计费
|
||||
- BILLING_ENABLED=false
|
||||
BILLING_ENABLED: false
|
||||
# 不需要严格检测模型
|
||||
- DISABLE_MODEL_CONFIG=true
|
||||
DISABLE_MODEL_CONFIG: true
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/api/status']
|
||||
interval: 5s
|
||||
|
|
@ -223,13 +234,12 @@ services:
|
|||
retries: 10
|
||||
aiproxy_pg:
|
||||
image: pgvector/pgvector:0.8.0-pg15 # docker hub
|
||||
# image: registry.cn-hangzhou.aliyuncs.com/fastgpt/pgvector:v0.8.0-pg15 # 阿里云
|
||||
restart: unless-stopped
|
||||
container_name: aiproxy_pg
|
||||
volumes:
|
||||
- ./aiproxy_pg:/var/lib/postgresql/data
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
POSTGRES_USER: postgres
|
||||
|
|
@ -242,3 +252,6 @@ services:
|
|||
retries: 10
|
||||
networks:
|
||||
fastgpt:
|
||||
aiproxy:
|
||||
vector:
|
||||
|
||||
|
|
@ -0,0 +1,240 @@
|
|||
# 用于部署的 docker-compose 文件:
|
||||
# - 向量库为 Pgvector
|
||||
# - FastGPT 端口映射为 3000:3000
|
||||
# - FastGPT-mcp-server 端口映射 3005:3000
|
||||
# - 建议修改账密后再运行
|
||||
|
||||
# plugin auth token
|
||||
x-plugin-auth-token: &x-plugin-auth-token token
|
||||
# aiproxy token
|
||||
x-aiproxy-token: &x-aiproxy-token token
|
||||
# 数据库连接相关配置
|
||||
x-share-db-config: &x-share-db-config
|
||||
MONGODB_URI: mongodb://username:password@mongo:27017/fastgpt?authSource=admin
|
||||
DB_MAX_LINK: 30
|
||||
REDIS_URL: redis://default:mypassword@redis:6379
|
||||
S3_ENDPOINT: fastgpt-minio
|
||||
S3_PORT: 9000
|
||||
S3_USE_SSL: false
|
||||
S3_ACCESS_KEY: minioadmin
|
||||
S3_SECRET_KEY: minioadmin
|
||||
|
||||
# 向量库相关配置
|
||||
x-vec-config: &x-vec-config
|
||||
MILVUS_ADDRESS: zilliz_cloud_address
|
||||
MILVUS_TOKEN: zilliz_cloud_token
|
||||
|
||||
version: '3.3'
|
||||
services:
|
||||
# Vector DB
|
||||
|
||||
|
||||
mongo:
|
||||
image: mongo:5.0.18 # cpu 不支持 AVX 时候使用 4.4.29
|
||||
container_name: mongo
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
command: mongod --keyFile /data/mongodb.key --replSet rs0
|
||||
environment:
|
||||
- MONGO_INITDB_ROOT_USERNAME=myusername
|
||||
- MONGO_INITDB_ROOT_PASSWORD=mypassword
|
||||
volumes:
|
||||
- ./mongo/data:/data/db
|
||||
entrypoint:
|
||||
- bash
|
||||
- -c
|
||||
- |
|
||||
openssl rand -base64 128 > /data/mongodb.key
|
||||
chmod 400 /data/mongodb.key
|
||||
chown 999:999 /data/mongodb.key
|
||||
echo 'const isInited = rs.status().ok === 1
|
||||
if(!isInited){
|
||||
rs.initiate({
|
||||
_id: "rs0",
|
||||
members: [
|
||||
{ _id: 0, host: "mongo:27017" }
|
||||
]
|
||||
})
|
||||
}' > /data/initReplicaSet.js
|
||||
# 启动MongoDB服务
|
||||
exec docker-entrypoint.sh "$$@" &
|
||||
|
||||
# 等待MongoDB服务启动
|
||||
until mongo -u myusername -p mypassword --authenticationDatabase admin --eval "print('waited for connection')"; do
|
||||
echo "Waiting for MongoDB to start..."
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# 执行初始化副本集的脚本
|
||||
mongo -u myusername -p mypassword --authenticationDatabase admin /data/initReplicaSet.js
|
||||
|
||||
# 等待docker-entrypoint.sh脚本执行的MongoDB服务进程
|
||||
wait $$!
|
||||
redis:
|
||||
image: redis:7.2-alpine
|
||||
container_name: redis
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
command: |
|
||||
redis-server --requirepass mypassword --loglevel warning --maxclients 10000 --appendonly yes --save 60 10 --maxmemory 4gb --maxmemory-policy noeviction
|
||||
healthcheck:
|
||||
test: ['CMD', 'redis-cli', '-a', 'mypassword', 'ping']
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
volumes:
|
||||
- ./redis/data:/data
|
||||
|
||||
fastgpt:
|
||||
container_name: fastgpt
|
||||
image: ghcr.io/labring/fastgpt:v4.13.0 # git
|
||||
ports:
|
||||
- 3000:3000
|
||||
networks:
|
||||
- fastgpt
|
||||
depends_on:
|
||||
- mongo
|
||||
- sandbox
|
||||
- pg
|
||||
restart: always
|
||||
environment:
|
||||
<<: [*x-share-db-config, *x-vec-config]
|
||||
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
|
||||
FE_DOMAIN:
|
||||
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
|
||||
DEFAULT_ROOT_PSW: 1234
|
||||
# 登录凭证密钥
|
||||
TOKEN_KEY: any
|
||||
# root的密钥,常用于升级时候的初始化请求
|
||||
ROOT_KEY: root_key
|
||||
# 文件阅读加密
|
||||
FILE_TOKEN_KEY: filetoken
|
||||
# 密钥加密key
|
||||
AES256_SECRET_KEY: fastgptkey
|
||||
|
||||
# plugin 地址
|
||||
PLUGIN_BASE_URL: http://fastgpt-plugin:3000
|
||||
PLUGIN_TOKEN: *x-plugin-auth-token
|
||||
# sandbox 地址
|
||||
SANDBOX_URL: http://sandbox:3000
|
||||
# AI Proxy 的地址,如果配了该地址,优先使用
|
||||
AIPROXY_API_ENDPOINT: http://aiproxy:3000
|
||||
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
|
||||
AIPROXY_API_TOKEN: *x-aiproxy-token
|
||||
|
||||
# 数据库最大连接数
|
||||
PG_URL: postgresql://username:password@pg:5432/postgres
|
||||
|
||||
# 日志等级: debug, info, warn, error
|
||||
LOG_LEVEL: info
|
||||
STORE_LOG_LEVEL: warn
|
||||
# 工作流最大运行次数
|
||||
WORKFLOW_MAX_RUN_TIMES: 1000
|
||||
# 批量执行节点,最大输入长度
|
||||
WORKFLOW_MAX_LOOP_TIMES: 100
|
||||
# 对话文件过期天数
|
||||
CHAT_FILE_EXPIRE_TIME: 7
|
||||
volumes:
|
||||
- ./config.json:/app/data/config.json
|
||||
|
||||
fastgpt-minio:
|
||||
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
|
||||
container_name: fastgpt-minio
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
- MINIO_ROOT_USER=minioadmin
|
||||
- MINIO_ROOT_PASSWORD=minioadmin
|
||||
volumes:
|
||||
- ./fastgpt-minio:/data
|
||||
command: server /data --console-address ":9001"
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
|
||||
interval: 30s
|
||||
timeout: 20s
|
||||
retries: 3
|
||||
sandbox:
|
||||
container_name: sandbox
|
||||
image: ghcr.io/labring/fastgpt-sandbox:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
restart: always
|
||||
fastgpt-mcp-server:
|
||||
container_name: fastgpt-mcp-server
|
||||
image: ghcr.io/labring/fastgpt-mcp_server:v4.13.0
|
||||
networks:
|
||||
- fastgpt
|
||||
ports:
|
||||
- 3005:3000
|
||||
restart: always
|
||||
environment:
|
||||
- FASTGPT_ENDPOINT=http://fastgpt:3000
|
||||
fastgpt-plugin:
|
||||
image: ghcr.io/labring/fastgpt-plugin:v0.2.0
|
||||
container_name: fastgpt-plugin
|
||||
restart: always
|
||||
networks:
|
||||
- fastgpt
|
||||
environment:
|
||||
<<: *x-share-db-config
|
||||
AUTH_TOKEN: *x-plugin-auth-token
|
||||
S3_BUCKET: fastgpt-plugins
|
||||
depends_on:
|
||||
fastgpt-minio:
|
||||
condition: service_healthy
|
||||
# AI Proxy
|
||||
aiproxy:
|
||||
image: ghcr.io/labring/aiproxy:v0.3.2
|
||||
container_name: aiproxy
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
aiproxy_pg:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- fastgpt
|
||||
- aiproxy
|
||||
environment:
|
||||
# 对应 fastgpt 里的AIPROXY_API_TOKEN
|
||||
ADMIN_KEY: *x-aiproxy-token
|
||||
# 错误日志详情保存时间(小时)
|
||||
LOG_DETAIL_STORAGE_HOURS: 1
|
||||
# 数据库连接地址
|
||||
SQL_DSN: postgres://postgres:aiproxy@aiproxy_pg:5432/aiproxy
|
||||
# 最大重试次数
|
||||
RETRY_TIMES: 3
|
||||
# 不需要计费
|
||||
BILLING_ENABLED: false
|
||||
# 不需要严格检测模型
|
||||
DISABLE_MODEL_CONFIG: true
|
||||
healthcheck:
|
||||
test: ['CMD', 'curl', '-f', 'http://localhost:3000/api/status']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
aiproxy_pg:
|
||||
image: pgvector/pgvector:0.8.0-pg15 # docker hub
|
||||
restart: unless-stopped
|
||||
container_name: aiproxy_pg
|
||||
volumes:
|
||||
- ./aiproxy_pg:/var/lib/postgresql/data
|
||||
networks:
|
||||
- aiproxy
|
||||
environment:
|
||||
TZ: Asia/Shanghai
|
||||
POSTGRES_USER: postgres
|
||||
POSTGRES_DB: aiproxy
|
||||
POSTGRES_PASSWORD: aiproxy
|
||||
healthcheck:
|
||||
test: ['CMD', 'pg_isready', '-U', 'postgres', '-d', 'aiproxy']
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 10
|
||||
networks:
|
||||
fastgpt:
|
||||
aiproxy:
|
||||
vector:
|
||||
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
#!/usr/bin/env bash
|
||||
#
|
||||
# param:
|
||||
# --region=cn 中国大陆
|
||||
# --region=global 全球(默认)
|
||||
# --vector=pg pg 版本(默认)
|
||||
# --vector=milvus milvus 版本
|
||||
# --vector=zilliz zilliz 版本
|
||||
# --vector=oceanbase oceanbase 版本
|
||||
|
||||
# 默认参数
|
||||
REGION="global"
|
||||
VECTOR="pg"
|
||||
|
||||
# 解析参数
|
||||
for arg in "$@"; do
|
||||
case $arg in
|
||||
--region=*)
|
||||
REGION="${arg#*=}"
|
||||
shift
|
||||
;;
|
||||
--vector=*)
|
||||
VECTOR="${arg#*=}"
|
||||
shift
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# 检查参数合法性
|
||||
VALID_VECTOR=("pg" "milvus" "zilliz" "oceanbase")
|
||||
VECTOR_VALID=false
|
||||
for v in "${VALID_VECTOR[@]}"; do
|
||||
if [[ "$VECTOR" == "$v" ]]; then
|
||||
VECTOR_VALID=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if ! $VECTOR_VALID; then
|
||||
echo "Error: Invalid --vector parameter: $VECTOR"
|
||||
echo "Available options: pg, milvus, zilliz, oceanbase"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ "$REGION" != "global" && "$REGION" != "cn" ]]; then
|
||||
echo "Error: Invalid --region parameter: $REGION"
|
||||
echo "Available options: global, cn"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
echo 'Vector Database:' $VECTOR
|
||||
echo 'Docker Image Registry: ' $REGION
|
||||
read -p "Confirm? (y/n)" confirm
|
||||
if [ "$confirm" != "y" ]; then
|
||||
echo "Canceled"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo 'Downloading Docker Compose YAML file'
|
||||
# get the yml file, url:
|
||||
# region=cn https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.[vector].yml
|
||||
# region=global https://doc.fastgpt.io/deploy/docker/global/docker-compose.[vector].yml
|
||||
|
||||
# 构建下载链接
|
||||
if [ "$REGION" == "cn" ]; then
|
||||
YML_URL="https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.${VECTOR}.yml"
|
||||
else
|
||||
YML_URL="https://doc.fastgpt.io/deploy/docker/global/docker-compose.${VECTOR}.yml"
|
||||
fi
|
||||
|
||||
# 下载 YAML 文件
|
||||
curl -O "$YML_URL"
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: Failed to download YAML file from $YML_URL"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Downloaded docker-compose.${VECTOR}.yml from $YML_URL"
|
||||
|
||||
# download config.json file
|
||||
|
||||
if [ "$REGION" == "cn" ]; then
|
||||
CONFIG="https://doc.fastgpt.cn/deploy/config/config.json"
|
||||
else
|
||||
CONFIG="https://doc.fastgpt.io/deploy/config/config.json"
|
||||
fi
|
||||
|
||||
# 下载 config.json 文件
|
||||
curl -O "$CONFIG"
|
||||
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "Error: Failed to download config.json file from $CONFIG"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Downloaded config.json from $CONFIG"
|
||||
|
||||
echo "Installation success! What's next:"
|
||||
echo "1. Edit the yml file: vim docker-compose.${VECTOR}.yml"
|
||||
echo "2. start the service: docker compose -f docker-compose.${VECTOR}.yml up -d"
|
||||
echo "3. stop the service: docker compose -f docker-compose.${VECTOR}.yml down"
|
||||
echo "4. restart the service: docker compose -f docker-compose.${VECTOR}.yml restart"
|
||||
echo "For more information, please visit https://doc.fastgpt.cn/deploy"
|
||||
|
|
@ -9,6 +9,7 @@
|
|||
"initDocTime": "node ./document/script/initDocTime.js",
|
||||
"initDocToc": "node ./document/lib/generateToc.js",
|
||||
"gen:theme-typings": "chakra-cli tokens packages/web/styles/theme.ts --out node_modules/.pnpm/node_modules/@chakra-ui/styled-system/dist/theming.types.d.ts",
|
||||
"gen:deploy": "node deploy/init.mjs",
|
||||
"postinstall": "pnpm gen:theme-typings",
|
||||
"initIcon": "node ./scripts/icon/init.js && prettier --config \"./.prettierrc.js\" --write \"packages/web/components/common/Icon/constants.ts\"",
|
||||
"previewIcon": "node ./scripts/icon/index.js",
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ export const parseUrlToFileType = (url: string): UserChatItemValueItemType['file
|
|||
}
|
||||
|
||||
try {
|
||||
const parseUrl = new URL(url, 'https://localhost:3000');
|
||||
const parseUrl = new URL(url, 'http://localhost:3000');
|
||||
|
||||
// Get filename from URL
|
||||
const filename = parseUrl.searchParams.get('filename') || parseUrl.pathname.split('/').pop();
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# By default listen on https://localhost
|
||||
# By default listen on http://localhost
|
||||
# To change this:
|
||||
# * uncomment SEARXNG_HOSTNAME, and replace <host> by the SearXNG hostname
|
||||
# * uncomment LETSENCRYPT_EMAIL, and replace <email> by your email (require to create a Let's Encrypt certificate)
|
||||
|
|
|
|||
854
pnpm-lock.yaml
854
pnpm-lock.yaml
File diff suppressed because it is too large
Load Diff
|
|
@ -21,18 +21,18 @@ HIDE_CHAT_COPYRIGHT_SETTING=
|
|||
|
||||
# Service url
|
||||
# 商业版地址
|
||||
PRO_URL=
|
||||
# PRO_URL=
|
||||
# Plugin
|
||||
PLUGIN_BASE_URL=
|
||||
PLUGIN_TOKEN=
|
||||
PLUGIN_BASE_URL=http://localhost:3003
|
||||
PLUGIN_TOKEN=token
|
||||
# code sandbox url
|
||||
SANDBOX_URL=http://localhost:3001
|
||||
SANDBOX_URL=http://localhost:3002
|
||||
# ai proxy api
|
||||
AIPROXY_API_ENDPOINT=https://xxx.come
|
||||
AIPROXY_API_TOKEN=xxxxx
|
||||
AIPROXY_API_ENDPOINT=https://localhost:3010
|
||||
AIPROXY_API_TOKEN=aiproxy
|
||||
# OpenAI Base URL
|
||||
OPENAI_BASE_URL=https://api.openai.com/v1
|
||||
CHAT_API_KEY=sk-xxxx
|
||||
# OPENAI_BASE_URL=https://api.openai.com/v1
|
||||
# CHAT_API_KEY=sk-xxxx
|
||||
|
||||
# S3 Config
|
||||
S3_EXTERNAL_BASE_URL=
|
||||
|
|
@ -43,19 +43,19 @@ S3_ACCESS_KEY=minioadmin
|
|||
S3_SECRET_KEY=minioadmin
|
||||
S3_PLUGIN_BUCKET=fastgpt-plugin # 插件文件存储bucket
|
||||
# Redis URL
|
||||
REDIS_URL=redis://default:password@127.0.0.1:6379
|
||||
REDIS_URL=redis://default:mypassword@127.0.0.1:6379
|
||||
# mongo 数据库连接参数,本地开发连接远程数据库时,可能需要增加 directConnection=true 参数,才能连接上。
|
||||
MONGODB_URI=mongodb://username:password@0.0.0.0:27017/fastgpt?authSource=admin
|
||||
MONGODB_URI="mongodb://myusername:mypassword@localhost:27017/fastgpt?authSource=admin&directConnection=true"
|
||||
# 日志库
|
||||
MONGODB_LOG_URI=mongodb://username:password@0.0.0.0:27017/fastgpt?authSource=admin
|
||||
MONGODB_LOG_URI="mongodb://myusername:mypassword@localhost:27017/fastgpt?authSource=admin&directConnection=true"
|
||||
# 向量库优先级: pg > oceanbase > milvus
|
||||
# PG 向量库连接参数
|
||||
PG_URL=postgresql://username:password@host:port/postgres
|
||||
PG_URL=postgresql://username:password@localhost:5432/postgres
|
||||
# OceanBase 向量库连接参数
|
||||
OCEANBASE_URL=
|
||||
# milvus 向量库连接参数
|
||||
MILVUS_ADDRESS=
|
||||
MILVUS_TOKEN=
|
||||
# OCEANBASE_URL=
|
||||
# # milvus 向量库连接参数
|
||||
# MILVUS_ADDRESS=
|
||||
# MILVUS_TOKEN=
|
||||
|
||||
|
||||
# 页面的地址,用于自动补全相对路径资源的 domain,注意后面不要跟 /
|
||||
|
|
@ -106,4 +106,4 @@ CONFIG_JSON_PATH=
|
|||
# # 日志推送间隔
|
||||
# CHAT_LOG_INTERVAL=10000
|
||||
# # 日志来源ID前缀
|
||||
# CHAT_LOG_SOURCE_ID_PREFIX=fastgpt-
|
||||
# CHAT_LOG_SOURCE_ID_PREFIX=fastgpt-
|
||||
|
|
|
|||
Loading…
Reference in New Issue