Commit f33c80a6 by Archer Committed by GitHub

perf: deploy (#6972)

* perf: deploy

* doc
parent 14373770
...@@ -2,59 +2,36 @@ ...@@ -2,59 +2,36 @@
### 正常更新(不动服务,只改版本) ### 正常更新(不动服务,只改版本)
1. 更新 `args.json` 中的版本号 1. 更新 `version/{version}/args.json` 中的版本号,例如 `version/v4.14/args.json``version/main/args.json`
2.`FastGPT` 目录执行 `pnpm run gen:deploy` 即可 2.`FastGPT` 目录执行 `node deploy/init.mjs` 即可
3. 脚本会同时更新 `deploy/dev``document/public/deploy/install.sh``document/public/deploy/docker/{version}` 下的 Docker 部署文件
### 加版本
比如要添加 `v4.15` 稳定版:
1. 创建 `version/v4.15`
2. 添加 `version/v4.15/args.json`
3. 添加 `version/v4.15/docker-compose.template.yml`
4. 执行 `node deploy/init.mjs`,脚本会自动扫描并生成 `document/public/deploy/docker/v4.15`
### 加服务 ### 加服务
比如要添加 `example` 服务: 比如要添加 `example` 服务:
1. `init.mjs``Services Enum` 中添加 fastgptExample: fastgpt-example 1. `init.mjs``Services Enum` 中添加 fastgptExample: fastgpt-example
2.`args.json` 中添加 image 和 tag, 注意 `args.json``key` 值,要和 `init.mjs``value` 值一致。 2. 在所有 `version/*/args.json` 中添加 image 和 tag, 注意 `args``key` 值,要和 `init.mjs``value` 值一致。
3. 更新 templates/docker-compose.[dev|prod].yml 文件,把服务的相关配置加进去,并且:服务的 image 改为 ${{example.image}}:${{example.tag}} 3. 更新所有需要生效的 `version/*/docker-compose.template.yml` 文件,把服务的相关配置加进去,并且:服务的 image 改为 ${{example.image}}:${{example.tag}}
4. 如需同步开发环境,再更新 `templates/docker-compose.dev.yml`
5. 执行 `node deploy/init.mjs` 重新生成部署文件
### 加向量库 ### 加向量库
比如添加 `exampleDB` 向量库: 比如添加 `exampleDB` 向量库:
1. 添加 vector service 配置在 `templates/vector` 下面,例如 `templates/vector/exampleDB.txt` 内容可以参考其他 txt,注意缩进,image 名字也要替换成 ${{exampleDB.image}}:${{exampleDB:tag}}, service name 必须是 `vectorDB` 1. 添加 vector service 配置在 `templates/vector` 下面,例如 `templates/vector/exampleDB.txt` 内容可以参考其他 txt,注意缩进,image 名字也要替换成 ${{exampleDB.image}}:${{exampleDB:tag}}, service name 必须是 `vectorDB`
2.`args.json` 中添加 `exampleDB` 的配置 2. 在所有 `version/*/args.json` 中添加 `exampleDB` 的配置
3. init.mjs vector enum 中添加 `vector` 3. 添加连接配置片段,例如 `templates/vector/exampleDB.config.txt`
4. init.mjs 中添加 vector 的相关配置: 4. 如需额外 `configs`,添加 `templates/vector/exampleDB.extra.txt`
5.`templates/vector/config.json` 中添加向量库配置,声明输出文件名、service 片段、连接配置和 extra 片段
```ts 6. 执行 `node deploy/init.mjs` 重新生成部署文件
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.zilliz.yml'),
replace(template, 'global', VectorEnum.vector)
),
```
## yaml 的锚点和引用 ## yaml 的锚点和引用
......
...@@ -174,7 +174,7 @@ services: ...@@ -174,7 +174,7 @@ services:
retries: 3 retries: 3
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.15.0-beta1
ports: ports:
- 3002:3000 - 3002:3000
networks: networks:
...@@ -220,7 +220,7 @@ services: ...@@ -220,7 +220,7 @@ services:
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.15.0-beta1
ports: ports:
- 3003:3000 - 3003:3000
networks: networks:
...@@ -281,7 +281,7 @@ services: ...@@ -281,7 +281,7 @@ services:
retries: 5 retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`). # Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image: opensandbox-agent-sandbox-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox:v0.1 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox:v0.2.0
profiles: profiles:
- prepull - prepull
opensandbox-execd-image: opensandbox-execd-image:
...@@ -294,7 +294,7 @@ services: ...@@ -294,7 +294,7 @@ services:
- prepull - prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC # 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager: fastgpt-volume-manager:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-volume-manager:v0.1 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-volume-manager:v0.2.0
container_name: fastgpt-volume-manager container_name: fastgpt-volume-manager
restart: always restart: always
ports: ports:
...@@ -323,7 +323,7 @@ services: ...@@ -323,7 +323,7 @@ services:
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.6 image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
ports: ports:
......
...@@ -174,7 +174,7 @@ services: ...@@ -174,7 +174,7 @@ services:
retries: 3 retries: 3
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: ghcr.io/labring/fastgpt-code-sandbox:v4.14.20 image: ghcr.io/labring/fastgpt-code-sandbox:v4.15.0-beta1
ports: ports:
- 3002:3000 - 3002:3000
networks: networks:
...@@ -220,7 +220,7 @@ services: ...@@ -220,7 +220,7 @@ services:
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: ghcr.io/labring/fastgpt-mcp_server:v4.14.20 image: ghcr.io/labring/fastgpt-mcp_server:v4.15.0-beta1
ports: ports:
- 3003:3000 - 3003:3000
networks: networks:
...@@ -281,7 +281,7 @@ services: ...@@ -281,7 +281,7 @@ services:
retries: 5 retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`). # Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image: opensandbox-agent-sandbox-image:
image: ghcr.io/labring/fastgpt-agent-sandbox:v0.1 image: ghcr.io/labring/fastgpt-agent-sandbox:v0.2.0
profiles: profiles:
- prepull - prepull
opensandbox-execd-image: opensandbox-execd-image:
...@@ -294,7 +294,7 @@ services: ...@@ -294,7 +294,7 @@ services:
- prepull - prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC # 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager: fastgpt-volume-manager:
image: ghcr.io/labring/fastgpt-agent-volume-manager:v0.1 image: ghcr.io/labring/fastgpt-agent-volume-manager:v0.2.0
container_name: fastgpt-volume-manager container_name: fastgpt-volume-manager
restart: always restart: always
ports: ports:
...@@ -323,7 +323,7 @@ services: ...@@ -323,7 +323,7 @@ services:
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: ghcr.io/labring/aiproxy:v0.5.6 image: ghcr.io/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
ports: ports:
......
...@@ -10,18 +10,6 @@ const RegionEnum = { ...@@ -10,18 +10,6 @@ const RegionEnum = {
global: 'global' global: 'global'
}; };
/**
* @enum {String} VectorEnum
*/
const VectorEnum = {
pg: 'pg',
milvus: 'milvus',
zilliz: 'zilliz',
ob: 'ob',
seekdb: 'seekdb',
opengauss: 'opengauss'
};
// make sure the cwd // make sure the cwd
const basePath = process.cwd(); const basePath = process.cwd();
if (!basePath.endsWith('deploy')) { if (!basePath.endsWith('deploy')) {
...@@ -29,16 +17,148 @@ if (!basePath.endsWith('deploy')) { ...@@ -29,16 +17,148 @@ if (!basePath.endsWith('deploy')) {
} }
/** /**
* 扫描 `deploy/version/*` 获取所有可发布版本。
*
* 每个版本目录必须包含 `args.json` 和 `docker-compose.template.yml`。`main`
* 固定作为迭代版展示,其余目录名都作为稳定版展示;这里仅负责发现和排序。
*
* @returns {Promise<string[]>}
*/
const loadDeployVersions = async () => {
const versionRoot = path.join(process.cwd(), 'version');
const entries = await fs.promises.readdir(versionRoot, { withFileTypes: true });
const versions = [];
for (const entry of entries) {
if (!entry.isDirectory()) {
continue;
}
const version = entry.name;
const versionPath = path.join(versionRoot, version);
const requiredFiles = ['args.json', 'docker-compose.template.yml'];
const exists = await Promise.all(
requiredFiles.map((file) =>
fs.promises
.access(path.join(versionPath, file))
.then(() => true)
.catch(() => false)
)
);
if (exists.every(Boolean)) {
versions.push(version);
}
}
if (versions.length === 0) {
throw new Error('No deploy versions found in deploy/version');
}
return versions.sort((a, b) => {
if (a === 'main') return 1;
if (b === 'main') return -1;
return a.localeCompare(b, undefined, { numeric: true });
});
};
/**
* 将扫描到的版本列表写入安装脚本。
*
* `install.sh` 会被用户单独下载执行,版本列表不能依赖另一个运行时请求。
* 这里用固定标记替换生成片段,保持脚本入口和 deploy/version 目录一致。
*
* @param {string[]} deployVersions
*/
const syncInstallScriptVersions = async (deployVersions) => {
const installScriptPath = path.join(
process.cwd(),
'..',
'document',
'public',
'deploy',
'install.sh'
);
const begin = '# BEGIN GENERATED DEPLOY VERSIONS';
const end = '# END GENERATED DEPLOY VERSIONS';
const escapeRegExp = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
const shellQuote = (value) =>
`"${String(value)
.replace(/\\/g, '\\\\')
.replace(/"/g, '\\"')
.replace(/\$/g, '\\$')
.replace(/`/g, '\\`')}"`;
const versionsBlock = [
begin,
'DEPLOY_VERSIONS=(',
...deployVersions.map((version) => ` ${shellQuote(version)}`),
')',
end
].join('\n');
const source = await fs.promises.readFile(installScriptPath, 'utf8');
const blockPattern = new RegExp(`${escapeRegExp(begin)}[\\s\\S]*?${escapeRegExp(end)}`);
if (!blockPattern.test(source)) {
throw new Error('Can not find generated deploy versions block in install.sh');
}
await fs.promises.writeFile(installScriptPath, source.replace(blockPattern, versionsBlock));
};
/**
* 读取共享向量库模板配置。
*
* `deploy/templates/vector/config.json` 维护向量库输出文件名、服务片段、连接配置
* 和额外 configs。版本模板只通过 `${{vec.*}}` 引用这些共享片段。
*
* @returns {Promise<Record<string, { filename: string, db: string, config: string, extra: string }>>}
*/
const loadVectorConfigs = async () => {
const vectorRoot = path.join(process.cwd(), 'templates', 'vector');
const vectorConfig = JSON.parse(
await fs.promises.readFile(path.join(vectorRoot, 'config.json'), 'utf8')
);
const vectors = {};
for (const [name, config] of Object.entries(vectorConfig)) {
const readOptionalFile = async (file) => {
if (!file) {
return '';
}
return (await fs.promises.readFile(path.join(vectorRoot, file), 'utf8')).replace(/\n$/, '');
};
vectors[name] = {
filename: config.filename,
db: await readOptionalFile(config.dbFile),
config: await readOptionalFile(config.configFile),
extra: await readOptionalFile(config.extraFile)
};
vectors[name].extraBlock = vectors[name].extra ? `configs:\n ${vectors[name].extra}` : '';
}
return vectors;
};
/**
* @typedef {{ tag: String, image: {cn: String, global: String} }} ArgItemType * @typedef {{ tag: String, image: {cn: String, global: String} }} ArgItemType
*/ */
/** format the args /**
* @type {Record<Services, ArgItemType>} * 读取指定部署版本的镜像参数。
*
* dev 默认使用 main 的参数;prod 按版本目录分别读取,避免稳定版 tag 被 main
* 分支的迭代镜像意外覆盖。
*
* @param {string} version
* @returns {Record<Services, ArgItemType>}
*/ */
const args = (() => { const loadArgs = (version) => {
/** /**
* @type {{tags: Record<Services, string>, images: Record<Services, Record<string, string>>}} * @type {{tags: Record<Services, string>, images: Record<Services, Record<string, string>>}}
*/ */
const obj = JSON.parse(fs.readFileSync(path.join(process.cwd(), 'args.json'))); const obj = JSON.parse(fs.readFileSync(path.join(process.cwd(), 'version', version, 'args.json')));
const args = {}; const args = {};
for (const key of Object.keys(obj.tags)) { for (const key of Object.keys(obj.tags)) {
args[key] = { args[key] = {
...@@ -50,65 +170,18 @@ const args = (() => { ...@@ -50,65 +170,18 @@ const args = (() => {
}; };
} }
return args; return args;
})();
const vector = {
pg: {
db: '',
config: `\
PG_URL: postgresql://username:password@fastgpt-vector:5432/postgres`,
extra: ''
},
milvus: {
db: '',
config: `\
MILVUS_ADDRESS: http://fastgpt-vector:19530
MILVUS_TOKEN: none
`,
extra: ''
},
zilliz: {
db: '',
config: `\
MILVUS_ADDRESS: zilliz_cloud_address
MILVUS_TOKEN: zilliz_cloud_token`,
extra: ''
},
ob: {
db: '',
config: `\
OCEANBASE_URL: mysql://root%40tenantname:tenantpassword@fastgpt-vector:2881/mysql
`,
extra: `\
init_sql:
name: init_sql
content: |
ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30;
`
},
seekdb: {
db: '',
config: `\
SEEKDB_URL: mysql://root:seekdbpassword@fastgpt-vector:2881/mysql
`,
extra: ``
},
opengauss: {
db: '',
config: `\
OPENGAUSS_URL: postgresql://gaussdb:FastGPT@123@fastgpt-vector:5432/fastgpt`,
extra: ''
},
}; };
/** /**
* replace all ${{}} * replace all ${{}}
* @param {string} source * @param {string} source
* @param {RegionEnum} region * @param {RegionEnum} region
* @param {VectorEnum} vec * @param {string | undefined} vec
* @param {Record<Services, ArgItemType>} args
* @param {Record<string, { filename: string, db: string, config: string, extra: string }>} vectors
* @returns {string} * @returns {string}
*/ */
const replace = (source, region, vec) => { const replace = (source, region, vec, args, vectors) => {
// Match ${{expr}}, capture "expr" inside {{}} // Match ${{expr}}, capture "expr" inside {{}}
return source.replace(/\$\{\{([^}]*)\}\}/g, (_, expr) => { return source.replace(/\$\{\{([^}]*)\}\}/g, (_, expr) => {
// expr: a.b // expr: a.b
...@@ -117,10 +190,14 @@ const replace = (source, region, vec) => { ...@@ -117,10 +190,14 @@ const replace = (source, region, vec) => {
*/ */
const [a, b] = expr.split('.'); const [a, b] = expr.split('.');
if (a === 'vec') { if (a === 'vec') {
if (!vectors[vec]) {
throw new Error(`Unknown vector config: ${vec}`);
}
if (b === 'db') { if (b === 'db') {
return replace(vector[vec].db, region, vec); return replace(vectors[vec].db, region, vec, args, vectors);
} else { } else {
return vector[vec][b]; return vectors[vec][b];
} }
} }
...@@ -131,113 +208,81 @@ const replace = (source, region, vec) => { ...@@ -131,113 +208,81 @@ const replace = (source, region, vec) => {
} }
}); });
}; };
{
// 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 seekdb = fs.readFileSync(path.join(process.cwd(), 'templates', 'vector', 'seekdb.txt')); const formatYamlOutput = (source) => `${source.trimEnd()}\n`;
vector.seekdb.db = String(seekdb);
const opengauss = fs.readFileSync(path.join(process.cwd(), 'templates', 'vector', 'opengauss.txt')); const generateDevFile = async (deployVersions, vectors) => {
vector.opengauss.db = String(opengauss);
}
const generateDevFile = async () => {
console.log('generating dev/docker-compose.yml'); console.log('generating dev/docker-compose.yml');
// 1. read template // 1. read template
const template = await fs.promises.readFile( const template = await fs.promises.readFile(
path.join(process.cwd(), 'templates', 'docker-compose.dev.yml'), path.join(process.cwd(), 'templates', 'docker-compose.dev.yml'),
'utf8' 'utf8'
); );
const defaultDevVersion = deployVersions.includes('main') ? 'main' : deployVersions[0];
const args = loadArgs(defaultDevVersion);
await Promise.all([ await Promise.all([
fs.promises.writeFile( fs.promises.writeFile(
path.join(process.cwd(), 'dev', 'docker-compose.cn.yml'), path.join(process.cwd(), 'dev', 'docker-compose.cn.yml'),
replace(template, 'cn') formatYamlOutput(replace(template, 'cn', undefined, args, vectors))
), ),
fs.promises.writeFile( fs.promises.writeFile(
path.join(process.cwd(), 'dev', 'docker-compose.yml'), path.join(process.cwd(), 'dev', 'docker-compose.yml'),
replace(template, 'global') formatYamlOutput(replace(template, 'global', undefined, args, vectors))
) )
]); ]);
console.log('success geenrate dev files'); console.log('success geenrate dev files');
}; };
const generateProdFile = async () => { /**
console.log('generating prod/docker-compose.yml'); * 生成公开下载的 Docker Compose 部署文件。
const template = await fs.promises.readFile( *
path.join(process.cwd(), 'templates', 'docker-compose.prod.yml'), * 每个版本使用自己的模板和镜像参数;向量库片段保持共享。
'utf8' */
const generateProdFile = async (deployVersions, vectors) => {
console.log('generating public prod docker-compose.yml files');
const outputRoot = path.join(process.cwd(), '..', 'document', 'public', 'deploy', 'docker');
const regions = Object.values(RegionEnum);
const versionArgs = Object.fromEntries(deployVersions.map((version) => [version, loadArgs(version)]));
const versionTemplates = Object.fromEntries(
await Promise.all(
deployVersions.map(async (version) => [
version,
await fs.promises.readFile(
path.join(process.cwd(), 'version', version, 'docker-compose.template.yml'),
'utf8'
)
])
)
); );
await Promise.all([ await fs.promises.rm(outputRoot, { recursive: true, force: true });
fs.promises.writeFile( await fs.promises.mkdir(outputRoot, { recursive: true });
path.join(process.cwd(), 'docker', 'cn', 'docker-compose.pg.yml'),
replace(template, 'cn', VectorEnum.pg) for (const version of deployVersions) {
), for (const region of regions) {
fs.promises.writeFile( await fs.promises.mkdir(path.join(outputRoot, version, region), { recursive: true });
path.join(process.cwd(), 'docker', 'global', 'docker-compose.pg.yml'), }
replace(template, 'global', VectorEnum.pg) }
),
fs.promises.writeFile( await Promise.all(
path.join(process.cwd(), 'docker', 'cn', 'docker-compose.milvus.yml'), deployVersions.flatMap((version) =>
replace(template, 'cn', VectorEnum.milvus) regions.flatMap((region) =>
), Object.entries(vectors).map(([vector, { filename }]) =>
fs.promises.writeFile( fs.promises.writeFile(
path.join(process.cwd(), 'docker', 'global', 'docker-compose.milvus.yml'), path.join(outputRoot, version, region, `docker-compose.${filename}.yml`),
replace(template, 'global', VectorEnum.milvus) formatYamlOutput(replace(versionTemplates[version], region, vector, versionArgs[version], vectors))
), )
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.zilliz.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)
),
fs.promises.writeFile(
path.join(process.cwd(), 'docker', 'cn', 'docker-compose.seekdb.yml'),
replace(template, 'cn', VectorEnum.seekdb)
),
fs.promises.writeFile(
path.join(process.cwd(), 'docker', 'global', 'docker-compose.seekdb.yml'),
replace(template, 'global', VectorEnum.seekdb)
),
fs.promises.writeFile(
path.join(process.cwd(), 'docker', 'cn', 'docker-compose.opengauss.yml'),
replace(template, 'cn', VectorEnum.opengauss)
),
fs.promises.writeFile(
path.join(process.cwd(), 'docker', 'global', 'docker-compose.opengauss.yml'),
replace(template, 'global', VectorEnum.opengauss)
) )
]); );
console.log('success geenrate prod files'); console.log('success geenrate prod files');
}; };
await Promise.all([generateDevFile(), generateProdFile()]); const deployVersions = await loadDeployVersions();
await syncInstallScriptVersions(deployVersions);
console.log('copy the docker dir to ../document/public'); const vectors = await loadVectorConfigs();
await Promise.all([generateDevFile(deployVersions, vectors), generateProdFile(deployVersions, vectors)]);
await fs.promises.cp(
path.join(process.cwd(), 'docker'),
path.join(process.cwd(), '..', 'document', 'public', 'deploy', 'docker'),
{ recursive: true }
);
{
"pg": {
"filename": "pg",
"dbFile": "pg.txt",
"configFile": "pg.config.txt"
},
"milvus": {
"filename": "milvus",
"dbFile": "milvus.txt",
"configFile": "milvus.config.txt"
},
"zilliz": {
"filename": "zilliz",
"configFile": "zilliz.config.txt"
},
"ob": {
"filename": "oceanbase",
"dbFile": "ob.txt",
"configFile": "ob.config.txt",
"extraFile": "ob.extra.txt"
},
"seekdb": {
"filename": "seekdb",
"dbFile": "seekdb.txt",
"configFile": "seekdb.config.txt"
},
"opengauss": {
"filename": "opengauss",
"dbFile": "opengauss.txt",
"configFile": "opengauss.config.txt"
}
}
MILVUS_ADDRESS: http://fastgpt-vector:19530
MILVUS_TOKEN: none
OCEANBASE_URL: mysql://root%40tenantname:tenantpassword@fastgpt-vector:2881/mysql
init_sql:
name: init_sql
content: |
ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30;
OPENGAUSS_URL: postgresql://gaussdb:FastGPT@123@fastgpt-vector:5432/fastgpt
PG_URL: postgresql://username:password@fastgpt-vector:5432/postgres
SEEKDB_URL: mysql://root:seekdbpassword@fastgpt-vector:2881/mysql
MILVUS_ADDRESS: zilliz_cloud_address
MILVUS_TOKEN: zilliz_cloud_token
{ {
"tags": { "tags": {
"fastgpt": "v4.14.20", "fastgpt": "v4.15.0-beta1",
"fastgpt-code-sandbox": "v4.14.20", "fastgpt-code-sandbox": "v4.15.0-beta1",
"fastgpt-mcp_server": "v4.14.20", "fastgpt-mcp_server": "v4.15.0-beta1",
"fastgpt-plugin": "v0.6.2", "fastgpt-plugin": "v0.6.2",
"volume-manager": "v0.1", "volume-manager": "v0.2.0",
"agent-sandbox-image": "v0.1", "agent-sandbox-image": "v0.2.0",
"aiproxy": "v0.5.8",
"opensandbox-server": "v0.1.9", "opensandbox-server": "v0.1.9",
"opensandbox-execd": "v1.0.7", "opensandbox-execd": "v1.0.7",
"opensandbox-egress": "v1.0.3", "opensandbox-egress": "v1.0.3",
"aiproxy": "v0.5.6",
"aiproxy-pg": "0.8.0-pg15", "aiproxy-pg": "0.8.0-pg15",
"mongo": "5.0.32", "mongo": "5.0.32",
"redis": "7.2-alpine", "redis": "7.2-alpine",
......
# 用于部署的 docker-compose 文件:
# - FastGPT 端口映射为 3000:3000
# - FastGPT-mcp-server 端口映射 3005:3000
# - 建议修改账密后再运行
# root 默认密码(重启后会强制重置该密码成环境变量值)
x-default-root-psw: &x-default-root-psw '1234'
# 系统最高密钥凭证
x-system-key: &x-system-key 'fastgpt-xxx'
# plugin auth token
x-plugin-auth-token: &x-plugin-auth-token 'token'
# code sandbox token
x-code-sandbox-token: &x-code-sandbox-token 'codesandbox'
# aiproxy token
x-aiproxy-token: &x-aiproxy-token 'token'
# 数据库连接相关配置
x-share-db-config: &x-share-db-config
MONGODB_URI: mongodb://myusername:mypassword@fastgpt-mongo:27017/fastgpt?authSource=admin
DB_MAX_LINK: 100
REDIS_URL: redis://default:mypassword@fastgpt-redis:6379
# @see https://doc.fastgpt.cn/self-host/config/object-storage
STORAGE_VENDOR: minio # minio | aws-s3 | cos | oss
STORAGE_REGION: us-east-1
STORAGE_ACCESS_KEY_ID: minioadmin
STORAGE_SECRET_ACCESS_KEY: minioadmin
STORAGE_PUBLIC_BUCKET: fastgpt-public
STORAGE_PRIVATE_BUCKET: fastgpt-private
STORAGE_EXTERNAL_ENDPOINT: http://192.168.0.2:9000 # 一个服务器和客户端均可访问到存储桶的地址,可以是固定的宿主机 IP 或者域名,注意不要填写成 127.0.0.1 或者 localhost 等本地回环地址(因为容器里无法使用)
STORAGE_S3_ENDPOINT: http://fastgpt-minio:9000 # 协议://域名(IP):端口
STORAGE_S3_FORCE_PATH_STYLE: true
STORAGE_S3_MAX_RETRIES: 3
# Log 配置
x-log-config: &x-log-config
LOG_ENABLE_CONSOLE: true
LOG_CONSOLE_LEVEL: debug
LOG_ENABLE_OTEL: false
LOG_OTEL_LEVEL: info
LOG_OTEL_URL: http://localhost:4318/v1/logs
# 向量库相关配置
x-vec-config: &x-vec-config
${{vec.config}}
services:
# Vector DB
${{vec.db}}
fastgpt-mongo:
image: ${{mongo.image}}:${{mongo.tag}} # cpu 不支持 AVX 时候使用 4.4.29
container_name: fastgpt-mongo
restart: always
networks:
- data
command: mongod --keyFile /data/mongodb.key --replSet rs0
environment:
- MONGO_INITDB_ROOT_USERNAME=myusername
- MONGO_INITDB_ROOT_PASSWORD=mypassword
volumes:
- fastgpt-mongo:/data/db
healthcheck:
test: ['CMD', 'mongo', '-u', 'myusername', '-p', 'mypassword', '--authenticationDatabase', 'admin', '--eval', "db.adminCommand('ping')"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
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: "fastgpt-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 $$!
fastgpt-redis:
image: ${{redis.image}}:${{redis.tag}}
container_name: fastgpt-redis
networks:
- data
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:
- fastgpt-redis:/data
fastgpt-minio:
image: ${{minio.image}}:${{minio.tag}}
container_name: fastgpt-minio
restart: always
ports:
- 9000:9000
- 9001:9001
networks:
- data
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-app:
container_name: fastgpt-app
image: ${{fastgpt.image}}:${{fastgpt.tag}}
ports:
- 3000:3000
networks:
- data
- app
- codesandbox
- aiproxy
depends_on:
fastgpt-mongo:
condition: service_healthy
fastgpt-vector:
condition: service_healthy
fastgpt-redis:
condition: service_healthy
fastgpt-minio:
condition: service_healthy
fastgpt-code-sandbox:
condition: service_healthy
fastgpt-plugin:
condition: service_healthy
restart: always
environment:
# 完整变量请参考: https://github.com/labring/FastGPT/blob/main/projects/app/.env.template
<<: [*x-share-db-config, *x-vec-config, *x-log-config]
HOSTNAME: 0.0.0.0
# ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN:
# root key(最高权限)
ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
DEFAULT_ROOT_PSW: *x-default-root-psw
# 数据库最大连接数
DB_MAX_LINK: 5
# 自动同步索引
SYNC_INDEX: true
TOKEN_KEY: fastgpt
# 文件阅读时的密钥
FILE_TOKEN_KEY: filetokenkey
# 密钥加密 key
AES256_SECRET_KEY: fastgptsecret
# 强制将图片转成 base64 传递给模型
MULTIPLE_DATA_TO_BASE64: true
# ==================== 服务地址与集成 ====================
# plugin 地址
PLUGIN_BASE_URL: http://fastgpt-plugin:3000
PLUGIN_TOKEN: *x-plugin-auth-token
# code-sandbox 地址
CODE_SANDBOX_URL: http://fastgpt-code-sandbox:3000
CODE_SANDBOX_TOKEN: *x-code-sandbox-token
# AI Proxy 的地址,如果配了该地址,优先使用
AIPROXY_API_ENDPOINT: http://fastgpt-aiproxy:3000
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
AIPROXY_API_TOKEN: *x-aiproxy-token
# ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称
LOG_OTEL_SERVICE_NAME: fastgpt-client
volumes:
- ./config.json:/app/data/config.json
fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox
image: ${{fastgpt-code-sandbox.image}}:${{fastgpt-code-sandbox.tag}}
networks:
- codesandbox
restart: always
environment:
<<: [*x-log-config]
LOG_OTEL_SERVICE_NAME: fastgpt-code-sandbox
SANDBOX_TOKEN: *x-code-sandbox-token
# ===== Resource Limits =====
# Execution timeout per request (ms)
SANDBOX_MAX_TIMEOUT: 60000
# Maximum allowed memory per user code execution (MB)
# Note: System automatically adds 50MB for runtime overhead
# Actual process limit = SANDBOX_MAX_MEMORY_MB + 50MB
SANDBOX_MAX_MEMORY_MB: 256
# ===== Process Pool =====
# Number of pre-warmed worker processes (JS + Python)
SANDBOX_POOL_SIZE: 20
# ===== Network Request Limits =====
# Whether to check if the request is to a private network
CHECK_INTERNAL_IP: false
# Maximum number of HTTP requests per execution
SANDBOX_REQUEST_MAX_COUNT: 30
# Timeout for each outbound HTTP request (ms)
SANDBOX_REQUEST_TIMEOUT: 60000
# Maximum response body size for outbound requests
SANDBOX_REQUEST_MAX_RESPONSE_MB: 10
# Maximum request body size for outbound requests (MB)
SANDBOX_REQUEST_MAX_BODY_MB: 5
# ===== Module Control =====
# JS allowed modules whitelist (comma-separated)
SANDBOX_JS_ALLOWED_MODULES: lodash,dayjs,moment,uuid,crypto-js,qs,url,querystring
# Python allowed modules whitelist (comma-separated)
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck:
test: [
'CMD',
'bun',
'-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
]
interval: 30s
timeout: 20s
retries: 3
fastgpt-mcp-server:
container_name: fastgpt-mcp-server
image: ${{fastgpt-mcp_server.image}}:${{fastgpt-mcp_server.tag}}
networks:
- app
ports:
- 3003:3000
restart: always
environment:
<<: [*x-log-config]
FASTGPT_ENDPOINT: http://fastgpt-app:3000
fastgpt-plugin:
image: ${{fastgpt-plugin.image}}:${{fastgpt-plugin.tag}}
container_name: fastgpt-plugin
restart: always
networks:
- data
- app
environment:
<<: [*x-share-db-config, *x-log-config]
AUTH_TOKEN: *x-plugin-auth-token
# 工具网络请求,最大请求和响应体
SERVICE_REQUEST_MAX_CONTENT_LENGTH: 10
# 最大 API 请求体大小
MAX_API_SIZE: 10
# 传递给 OTLP 收集器的服务名称
LOG_OTEL_SERVICE_NAME: fastgpt-plugin
depends_on:
fastgpt-mongo:
condition: service_healthy
fastgpt-minio:
condition: service_healthy
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:3000/health']
interval: 30s
timeout: 20s
retries: 3
# AI Proxy
fastgpt-aiproxy:
image: ${{aiproxy.image}}:${{aiproxy.tag}}
container_name: fastgpt-aiproxy
restart: unless-stopped
depends_on:
fastgpt-aiproxy-pg:
condition: service_healthy
networks:
- aiproxy
environment:
# 对应 fastgpt 里的AIPROXY_API_TOKEN
ADMIN_KEY: *x-aiproxy-token
# 错误日志详情保存时间(小时)
LOG_DETAIL_STORAGE_HOURS: 1
# 数据库连接地址
SQL_DSN: postgres://postgres:aiproxy@fastgpt-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
fastgpt-aiproxy-pg:
image: ${{aiproxy-pg.image}}:${{aiproxy-pg.tag}} # docker hub
restart: unless-stopped
container_name: fastgpt-aiproxy-pg
volumes:
- fastgpt-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:
data:
name: fastgpt_data
app:
name: fastgpt_app
codesandbox:
name: fastgpt_codesandbox
aiproxy:
name: fastgpt_aiproxy
volumes:
fastgpt-pg:
fastgpt-mongo:
fastgpt-redis:
fastgpt-minio:
fastgpt-milvus-minio:
fastgpt-milvus-etcd:
fastgpt-milvus-data:
fastgpt-ob-data:
fastgpt-ob-config:
fastgpt-seekdb-data:
fastgpt-seekdb-config:
fastgpt-aiproxy_pg:
${{vec.extraBlock}}
{
"tags": {
"fastgpt": "v4.14.22",
"fastgpt-code-sandbox": "v4.14.22",
"fastgpt-mcp_server": "v4.14.22",
"fastgpt-plugin": "v0.6.2",
"volume-manager": "v0.1.2",
"agent-sandbox-image": "v0.1.2",
"aiproxy": "v0.5.8",
"opensandbox-server": "v0.1.9",
"opensandbox-execd": "v1.0.7",
"opensandbox-egress": "v1.0.3",
"aiproxy-pg": "0.8.0-pg15",
"mongo": "5.0.32",
"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",
"seekdb": "1.0.1.0-100000392025122619"
},
"images": {
"cn": {
"fastgpt": "registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt",
"fastgpt-plugin": "registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-plugin",
"fastgpt-code-sandbox": "registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox",
"fastgpt-mcp_server": "registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server",
"volume-manager": "registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-volume-manager",
"agent-sandbox-image": "registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox",
"opensandbox-server": "registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-server",
"opensandbox-execd": "registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-execd",
"opensandbox-egress": "registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-egress",
"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": "registry.cn-hangzhou.aliyuncs.com/fastgpt/redis",
"minio": "registry.cn-hangzhou.aliyuncs.com/fastgpt/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",
"seekdb": "oceanbase/seekdb"
},
"global": {
"fastgpt": "ghcr.io/labring/fastgpt",
"fastgpt-plugin": "ghcr.io/labring/fastgpt-plugin",
"fastgpt-code-sandbox": "ghcr.io/labring/fastgpt-code-sandbox",
"fastgpt-mcp_server": "ghcr.io/labring/fastgpt-mcp_server",
"volume-manager": "ghcr.io/labring/fastgpt-agent-volume-manager",
"agent-sandbox-image": "ghcr.io/labring/fastgpt-agent-sandbox",
"opensandbox-server": "opensandbox/server",
"opensandbox-execd": "opensandbox/execd",
"opensandbox-egress": "opensandbox/egress",
"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",
"seekdb": "oceanbase/seekdb"
}
}
}
...@@ -133,7 +133,7 @@ ${{vec.db}} ...@@ -133,7 +133,7 @@ ${{vec.db}}
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: ${{fastgpt.image}}:${{fastgpt.tag}} image: ${{fastgpt.image}}:${{fastgpt.tag}}
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
...@@ -162,7 +162,7 @@ ${{vec.db}} ...@@ -162,7 +162,7 @@ ${{vec.db}}
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -204,6 +204,7 @@ ${{vec.db}} ...@@ -204,6 +204,7 @@ ${{vec.db}}
AGENT_SANDBOX_ENABLE_VOLUME: true AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000 AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
AGENT_SANDBOX_VOLUME_MANAGER_MOUNT_PATH: /workspace
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
...@@ -251,11 +252,11 @@ ${{vec.db}} ...@@ -251,11 +252,11 @@ ${{vec.db}}
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
......
...@@ -65,6 +65,7 @@ SeekDB is a high-performance vector database based on MySQL protocol, fully comp ...@@ -65,6 +65,7 @@ SeekDB is a high-performance vector database based on MySQL protocol, fully comp
<Alert icon="🤖" context="success"> <Alert icon="🤖" context="success">
SeekDB uses MySQL protocol, fully compatible with OceanBase: SeekDB uses MySQL protocol, fully compatible with OceanBase:
- Supports 1536-dimensional vector retrieval - Supports 1536-dimensional vector retrieval
- Built-in HNSW index algorithm - Built-in HNSW index algorithm
- Batch insert and query optimization - Batch insert and query optimization
...@@ -124,7 +125,8 @@ bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) ...@@ -124,7 +125,8 @@ bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh)
``` ```
#### Method 2: Manual Download #### Method 2: Manual Download
If your environment is non-*nix or can't access external networks, manually download `docker-compose.yml`.
If your environment is non-\*nix or can't access external networks, manually download `docker-compose.yml`.
1. Download the `docker-compose.yml` file: 1. Download the `docker-compose.yml` file:
...@@ -132,27 +134,29 @@ If your environment is non-*nix or can't access external networks, manually down ...@@ -132,27 +134,29 @@ If your environment is non-*nix or can't access external networks, manually down
<summary>Click to view docker-compose config file download links for different databases</summary> <summary>Click to view docker-compose config file download links for different databases</summary>
- **Pgvector** - **Pgvector**
- China mirror (Alibaba Cloud): [docker-compose.pg.yml](https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.pg.yml) - China mirror (Alibaba Cloud): [docker-compose.pg.yml](https://doc.fastgpt.cn/deploy/docker/v4.14/cn/docker-compose.pg.yml)
- Global mirror (dockerhub, ghcr): [docker-compose.pg.yml](https://doc.fastgpt.cn/deploy/docker/global/docker-compose.pg.yml) - Global mirror (dockerhub, ghcr): [docker-compose.pg.yml](https://doc.fastgpt.cn/deploy/docker/v4.14/global/docker-compose.pg.yml)
- **Oceanbase** - **Oceanbase**
- China mirror (Alibaba Cloud): [docker-compose.oceanbase.yml](https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.oceanbase.yml) - China mirror (Alibaba Cloud): [docker-compose.oceanbase.yml](https://doc.fastgpt.cn/deploy/docker/v4.14/cn/docker-compose.oceanbase.yml)
- Global mirror (dockerhub, ghcr): [docker-compose.oceanbase.yml](https://doc.fastgpt.cn/deploy/docker/global/docker-compose.oceanbase.yml) - Global mirror (dockerhub, ghcr): [docker-compose.oceanbase.yml](https://doc.fastgpt.cn/deploy/docker/v4.14/global/docker-compose.oceanbase.yml)
- **Milvus** - **Milvus**
- China mirror (Alibaba Cloud): [docker-compose.milvus.yml](https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.milvus.yml) - China mirror (Alibaba Cloud): [docker-compose.milvus.yml](https://doc.fastgpt.cn/deploy/docker/v4.14/cn/docker-compose.milvus.yml)
- Global mirror (dockerhub, ghcr): [docker-compose.milvus.yml](https://doc.fastgpt.cn/deploy/docker/global/docker-compose.milvus.yml) - Global mirror (dockerhub, ghcr): [docker-compose.milvus.yml](https://doc.fastgpt.cn/deploy/docker/v4.14/global/docker-compose.milvus.yml)
- **Zilliz** - **Zilliz**
- China mirror (Alibaba Cloud): [docker-compose.zilliz.yml](https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.zilliz.yml) - China mirror (Alibaba Cloud): [docker-compose.zilliz.yml](https://doc.fastgpt.cn/deploy/docker/v4.14/cn/docker-compose.zilliz.yml)
- Global mirror (dockerhub, ghcr): [docker-compose.zilliz.yml](https://doc.fastgpt.cn/deploy/docker/global/docker-compose.zilliz.yml) - Global mirror (dockerhub, ghcr): [docker-compose.zilliz.yml](https://doc.fastgpt.cn/deploy/docker/v4.14/global/docker-compose.zilliz.yml)
- **SeekDB** - **SeekDB**
- China mirror (Alibaba Cloud): [docker-compose.seekdb.yml](https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.seekdb.yml) - China mirror (Alibaba Cloud): [docker-compose.seekdb.yml](https://doc.fastgpt.cn/deploy/docker/v4.14/cn/docker-compose.seekdb.yml)
- Global mirror (dockerhub, ghcr): [docker-compose.seekdb.yml](https://doc.fastgpt.cn/deploy/docker/global/docker-compose.seekdb.yml) - Global mirror (dockerhub, ghcr): [docker-compose.seekdb.yml](https://doc.fastgpt.cn/deploy/docker/v4.14/global/docker-compose.seekdb.yml)
2. Download the `config.json` file: 2. Download the `config.json` file:
- [config.json](https://doc.fastgpt.cn/deploy/config/config.json) - [config.json](https://doc.fastgpt.cn/deploy/config/config.json)
</details> </details>
Download config.json file: Download config.json file:
- [config.json](https://doc.fastgpt.cn/deploy/config/config.json) - [config.json](https://doc.fastgpt.cn/deploy/config/config.json)
### 2. Modify Environment Variables ### 2. Modify Environment Variables
...@@ -165,7 +169,7 @@ These ports must be accessible: ...@@ -165,7 +169,7 @@ These ports must be accessible:
1. Port 3000 (FastGPT main service) 1. Port 3000 (FastGPT main service)
2. Port 9000 (S3 service) 2. Port 9000 (S3 service)
1. Port 3005 (FastGPT SSE MCP server service) 3. Port 3005 (FastGPT SSE MCP server service)
### 4. Start Containers ### 4. Start Containers
...@@ -192,9 +196,9 @@ Each container restart automatically initializes the root user with password `12 ...@@ -192,9 +196,9 @@ Each container restart automatically initializes the root user with password `12
Starting from V4.14.0, the fastgpt-plugin image only provides the runtime environment without pre-installed system plugins. All FastGPT systems must manually install system plugins. Starting from V4.14.0, the fastgpt-plugin image only provides the runtime environment without pre-installed system plugins. All FastGPT systems must manually install system plugins.
* Install via the plugin marketplace — by default it fetches from the public FastGPT Marketplace. - Install via the plugin marketplace — by default it fetches from the public FastGPT Marketplace.
* If your FastGPT can't access the marketplace, visit [FastGPT Plugin Marketplace](https://marketplace.fastgpt.cn/), download .pkg files, and import them via file upload. - If your FastGPT can't access the marketplace, visit [FastGPT Plugin Marketplace](https://marketplace.fastgpt.cn/), download .pkg files, and import them via file upload.
* You can also sort tools, set default installations, and manage tags. - You can also sort tools, set default installations, and manage tags.
![alt text](../../../public/imgs/image-121.png) ![alt text](../../../public/imgs/image-121.png)
...@@ -204,9 +208,9 @@ Starting from V4.14.0, the fastgpt-plugin image only provides the runtime enviro ...@@ -204,9 +208,9 @@ Starting from V4.14.0, the fastgpt-plugin image only provides the runtime enviro
| FastGPT-plugin Version | FastGPT Main Service | | FastGPT-plugin Version | FastGPT Main Service |
| ---------------------- | -------------------- | | ---------------------- | -------------------- |
| 0.6.x | >= 4.14.11 | | 0.6.x | >= 4.14.11 |
| 0.5.x | >= 4.14.6, < 4.14.11 | | 0.5.x | >= 4.14.6, < 4.14.11 |
| < 0.5.0 | < 4.14.6 | < 0.5.0 | < 4.14.6 |
### S3 Connection Issues ### S3 Connection Issues
......
...@@ -18,13 +18,13 @@ import { Alert } from '@/components/docs/Alert'; ...@@ -18,13 +18,13 @@ import { Alert } from '@/components/docs/Alert';
- MongoDB:用于存储除了向量外的各类数据 - MongoDB:用于存储除了向量外的各类数据
- PostgreSQL/Milvus/Oceanbase/SeekDB:存储向量数据 - PostgreSQL/Milvus/Oceanbase/SeekDB:存储向量数据
- AIProxy: 聚合各类 AI API,支持多模型调用 (任何模型问题,先自行通过 OneAPI 测试校验) - AIProxy: 聚合各类 AI API,支持多模型调用(任何模型问题,先自行通过 OneAPI 测试校验)
</Alert> </Alert>
## 推荐配置 ## 推荐配置
### PgVector版本 ### PgVector 版本
非常轻量,适合知识库索引量在 5000 万以下。 非常轻量,适合知识库索引量在 5000 万以下。
...@@ -34,7 +34,7 @@ import { Alert } from '@/components/docs/Alert'; ...@@ -34,7 +34,7 @@ import { Alert } from '@/components/docs/Alert';
| 100w 组向量 | 4c8g 50GB | 4c16g 50GB | | 100w 组向量 | 4c8g 50GB | 4c16g 50GB |
| 500w 组向量 | 8c32g 200GB | 16c64g 200GB | | 500w 组向量 | 8c32g 200GB | 16c64g 200GB |
### Milvus版本 ### Milvus 版本
对于亿级以上向量性能更优秀。 对于亿级以上向量性能更优秀。
...@@ -46,13 +46,13 @@ import { Alert } from '@/components/docs/Alert'; ...@@ -46,13 +46,13 @@ import { Alert } from '@/components/docs/Alert';
| 100w 组向量 | 未测试 | | | 100w 组向量 | 未测试 | |
| 500w 组向量 | | | | 500w 组向量 | | |
### zilliz cloud版本 ### zilliz cloud 版本
Zilliz Cloud 由 Milvus 原厂打造,是全托管的 SaaS 向量数据库服务,性能优于 Milvus 并提供 SLA,点击使用 [Zilliz Cloud](https://zilliz.com.cn/)。 Zilliz Cloud 由 Milvus 原厂打造,是全托管的 SaaS 向量数据库服务,性能优于 Milvus 并提供 SLA,点击使用 [Zilliz Cloud](https://zilliz.com.cn/)。
由于向量库使用了 Cloud,无需占用本地资源,无需太关注。 由于向量库使用了 Cloud,无需占用本地资源,无需太关注。
### SeekDB版本 ### SeekDB 版本
SeekDB 是基于 MySQL 协议的高性能向量数据库,与 OceanBase 协议完全兼容,支持高效的向量检索。 SeekDB 是基于 MySQL 协议的高性能向量数据库,与 OceanBase 协议完全兼容,支持高效的向量检索。
...@@ -65,6 +65,7 @@ SeekDB 鈭 MySQL 悅扯摨 OceanBase 悅 ...@@ -65,6 +65,7 @@ SeekDB 鈭 MySQL 悅扯摨 OceanBase 悅
<Alert icon="🤖" context="success"> <Alert icon="🤖" context="success">
SeekDB 使用 MySQL 协议,与 OceanBase 完全兼容: SeekDB 使用 MySQL 协议,与 OceanBase 完全兼容:
- 支持 1536 维向量检索 - 支持 1536 维向量检索
- 内置 HNSW 索引算法 - 内置 HNSW 索引算法
- 提供批量插入和查询优化 - 提供批量插入和查询优化
...@@ -117,14 +118,15 @@ brew install orbstack ...@@ -117,14 +118,15 @@ brew install orbstack
#### 方法一:使用交互式脚本部署 #### 方法一:使用交互式脚本部署
需要在 Linux/MacOS/Windows WSL 环境下执行,引导用户选择部署环境、向量库版本,IP地址等。 需要在 Linux/MacOS/Windows WSL 环境下执行,导用户选择部署环境、向量库版本,IP 地址等。
```bash ```bash
bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh)
``` ```
#### 方法二:手动下载部署 #### 方法二:手动下载部署
如果部署环境为非 *nix 环境或无法访问外网,需要手动下载 `docker-compose.yml` 进行部署
如果部署环境为非 \*nix 环境或无法访问外网,需要手动下载 `docker-compose.yml` 进行部署
1. 下载 `docker-compose.yml` 文件: 1. 下载 `docker-compose.yml` 文件:
...@@ -132,27 +134,29 @@ bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) ...@@ -132,27 +134,29 @@ bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh)
<summary>点击展开查看不同数据库的 docker-compose 配置文件下载地址</summary> <summary>点击展开查看不同数据库的 docker-compose 配置文件下载地址</summary>
- **Pgvector** - **Pgvector**
- 中国大陆地区镜像源(阿里云):[docker-compose.pg.yml](https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.pg.yml) - 中国大陆地区镜像源(阿里云):[docker-compose.pg.yml](https://doc.fastgpt.cn/deploy/docker/v4.14/cn/docker-compose.pg.yml)
- 全球镜像源(dockerhub, ghcr):[docker-compose.pg.yml](https://doc.fastgpt.cn/deploy/docker/global/docker-compose.pg.yml) - 全球镜像源(dockerhub, ghcr):[docker-compose.pg.yml](https://doc.fastgpt.cn/deploy/docker/v4.14/global/docker-compose.pg.yml)
- **Oceanbase** - **Oceanbase**
- 中国大陆地区镜像源(阿里云):[docker-compose.oceanbase.yml](https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.oceanbase.yml) - 中国大陆地区镜像源(阿里云):[docker-compose.oceanbase.yml](https://doc.fastgpt.cn/deploy/docker/v4.14/cn/docker-compose.oceanbase.yml)
- 全球镜像源(dockerhub, ghcr):[docker-compose.oceanbase.yml](https://doc.fastgpt.cn/deploy/docker/global/docker-compose.oceanbase.yml) - 全球镜像源(dockerhub, ghcr):[docker-compose.oceanbase.yml](https://doc.fastgpt.cn/deploy/docker/v4.14/global/docker-compose.oceanbase.yml)
- **Milvus** - **Milvus**
- 中国大陆地区镜像源(阿里云):[docker-compose.milvus.yml](https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.milvus.yml) - 中国大陆地区镜像源(阿里云):[docker-compose.milvus.yml](https://doc.fastgpt.cn/deploy/docker/v4.14/cn/docker-compose.milvus.yml)
- 全球镜像源(dockerhub, ghcr):[docker-compose.milvus.yml](https://doc.fastgpt.cn/deploy/docker/global/docker-compose.milvus.yml) - 全球镜像源(dockerhub, ghcr):[docker-compose.milvus.yml](https://doc.fastgpt.cn/deploy/docker/v4.14/global/docker-compose.milvus.yml)
- **Zilliz** - **Zilliz**
- 中国大陆地区镜像源(阿里云):[docker-compose.zilliz.yml](https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.zilliz.yml) - 中国大陆地区镜像源(阿里云):[docker-compose.zilliz.yml](https://doc.fastgpt.cn/deploy/docker/v4.14/cn/docker-compose.zilliz.yml)
- 全球镜像源(dockerhub, ghcr):[docker-compose.zilliz.yml](https://doc.fastgpt.cn/deploy/docker/global/docker-compose.zilliz.yml) - 全球镜像源(dockerhub, ghcr):[docker-compose.zilliz.yml](https://doc.fastgpt.cn/deploy/docker/v4.14/global/docker-compose.zilliz.yml)
- **SeekDB** - **SeekDB**
- 中国大陆地区镜像源(阿里云):[docker-compose.seekdb.yml](https://doc.fastgpt.cn/deploy/docker/cn/docker-compose.seekdb.yml) - 中国大陆地区镜像源(阿里云):[docker-compose.seekdb.yml](https://doc.fastgpt.cn/deploy/docker/v4.14/cn/docker-compose.seekdb.yml)
- 全球镜像源(dockerhub, ghcr):[docker-compose.seekdb.yml](https://doc.fastgpt.cn/deploy/docker/global/docker-compose.seekdb.yml) - 全球镜像源(dockerhub, ghcr):[docker-compose.seekdb.yml](https://doc.fastgpt.cn/deploy/docker/v4.14/global/docker-compose.seekdb.yml)
2. 下载 `config.json` 文件: 2. 下载 `config.json` 文件:
- [config.json](https://doc.fastgpt.cn/deploy/config/config.json) - [config.json](https://doc.fastgpt.cn/deploy/config/config.json)
</details> </details>
下载 config.json 文件 下载 config.json 文件
- [config.json](https://doc.fastgpt.cn/deploy/config/config.json) - [config.json](https://doc.fastgpt.cn/deploy/config/config.json)
### 2. 修改环境变量 ### 2. 修改环境变量
...@@ -165,11 +169,11 @@ bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh) ...@@ -165,11 +169,11 @@ bash <(curl -fsSL https://doc.fastgpt.cn/deploy/install.sh)
1. 3000 端口(FastGPT 主服务) 1. 3000 端口(FastGPT 主服务)
2. 9000 端口(S3 服务) 2. 9000 端口(S3 服务)
1. 3005 端口(FastGPT SSE MCP server 服务) 3. 3005 端口(FastGPT SSE MCP server 服务)
### 4. 启动容器 ### 4. 启动容器
在 docker-compose.yml 同级目录下执行。请确保`docker-compose`版本最好在2.17以上,否则可能无法执行自动化命令。 在 docker-compose.yml 同级目录下执行。请确保 `docker-compose` 版本最好在 2.17 以上,否则可能无法执行自动化命令。
```bash ```bash
# 启动容器 # 启动容器
...@@ -179,23 +183,21 @@ docker compose --profile prepull pull opensandbox-agent-sandbox-image opensandbo ...@@ -179,23 +183,21 @@ docker compose --profile prepull pull opensandbox-agent-sandbox-image opensandbo
### 5. 访问 FastGPT ### 5. 访问 FastGPT
可通过第二步开放的端口/域名访问 FastGPT。 可通过第二步开放的端口/域名访问 FastGPT。登录用户名为 `root`,密码为 `docker-compose.yml` 环境变量里设置的 `DEFAULT_ROOT_PSW`。每次重启容器,都会自动初始化 root 用户,密码为 `1234`(与环境变量中的 `DEFAULT_ROOT_PSW` 一致)。
登录用户名为 `root`,密码为`docker-compose.yml`环境变量里设置的 `DEFAULT_ROOT_PSW`。
每次重启容器,都会自动初始化 root 用户,密码为 `1234`(与环境变量中的`DEFAULT_ROOT_PSW`一致)。
### 6. 配置模型 ### 6. 配置模型
- 首次登录FastGPT后,系统会提示未配置`语言模型`和`索引模型`,并自动跳转模型配置页面。系统必须至少有这两类模型才能正常使用。 - 首次登录 FastGPT 后,系统会提示未配置 `语言模型` 和 `索引模型`,并自动跳转模型配置页面。系统必须至少有这两类模型才能正常使用。
- 如果系统未正常跳转,可以在`账号-模型提供商`页面,进行模型配置。[点击查看相关教程](../config/model/intro.mdx) - 如果系统未正常跳转,可以在 `账号-模型提供商` 页面,进行模型配置。[点击查看相关教程](../config/model/intro.mdx)
- 目前已知可能问题:首次进入系统后整个浏览器 tab 无法响应。此时需要删除该tab,重新打开一次即可。 - 目前已知可能问题:首次进入系统后,整个浏览器 tab 无法响应。此时需要删除该 tab,重新打开一次即可。
### 7. 按需安装系统插件 ### 7. 按需安装系统插件
从 V4.14.0 版本开始,fastgpt-plugin 镜像仅提供运行环境,不再预装系统插件,所有 FastGPT 系统需手动安装系统插件。 从 V4.14.0 版本开始,fastgpt-plugin 镜像仅提供运行环境,不再预装系统插件,所有 FastGPT 系统需手动安装系统插件。
* 通过插件市场安装,默认会向公开的 FastGPT Marketplace 获取数据进行安装。 - 通过插件市场安装,默认会向公开的 FastGPT Marketplace 获取数据进行安装。
* 如果你的 FastGPT 无法访问插件市场,则可以手动访问[FastGPT 插件市场](https://marketplace.fastgpt.cn/),先下载 .pkg 文件,再通过文件导入的方式安装到系统里。 - 如果你的 FastGPT 无法访问插件市场,则可以手动访问 [FastGPT 插件市场](https://marketplace.fastgpt.cn/),先下载 .pkg 文件,再通过文件导入的方式安装到系统里。
* 除了安装外,还可对工具进行排序、默认安装、标签管理等。 - 除了安装外,还可对工具进行排序、默认安装、标签管理等。
![alt text](../../../public/imgs/image-121.png) ![alt text](../../../public/imgs/image-121.png)
...@@ -203,26 +205,25 @@ docker compose --profile prepull pull opensandbox-agent-sandbox-image opensandbo ...@@ -203,26 +205,25 @@ docker compose --profile prepull pull opensandbox-agent-sandbox-image opensandbo
### FastGPT 和 FastGPT-plugin 版本对应 ### FastGPT 和 FastGPT-plugin 版本对应
| FastGPT-plugin 版本 | FastGPT 主服务 | | FastGPT-plugin 版本 | FastGPT 主服务 |
| ------------------- | ---------------- | | ------------------- | -------------------- |
| 0.6.x | >= 4.14.11 | | 0.6.x | >= 4.14.11 |
| 0.5.x | >= 4.14.6, < 4.14.11 | | 0.5.x | >= 4.14.6, < 4.14.11 |
| < 0.5.0 | < 4.14.6 | | < 0.5.0 | < 4.14.6 |
### S3 无法正常连接 ### S3 无法正常连接
检查 `STORAGE_EXTERNAL_ENDPOINT` 变量,需设置成客户端和 FastGPT 服务均可访问的地址。
检查`STORAGE_EXTERNAL_ENDPOINT`变量,需设置成客户端和 FastGPT 服务均可访问的地址。
**重要:** **重要:**
> 填入的地址不可为`127.0.0.1`或者`localhost`等本地回环地址,可填 Docker 部署时的宿主机本地IP,但是需要把宿主机固定为静态 IP;或者统一为一个固定域名;目的是为了避免对象存储签名 URL 时,签发与上传的 URL 不一致导致的 403 错误。 > 填入的地址不可为 `127.0.0.1` 或者 `localhost` 等本地回环地址,可填 Docker 部署时的宿主机本地 IP,但是需要把宿主机固定为静态 IP;或者统一为一个固定域名;目的是为了避免对象存储签名 URL 时,签发与上传的 URL 不一致导致的 403 错误。
> >
> 具体查看 [对象存储配置及常见问题](../config/object-storage.mdx) > 具体查看 [对象存储配置及常见问题](../config/object-storage.mdx)
### 登录系统后,浏览器无法响应 ### 登录系统后,浏览器无法响应
无法点击任何内容刷新也无效。此时需要删除该tab,重新打开一次即可。 无法点击任何内容,刷新也无效。此时需要删除该 tab,重新打开一次即可。
### Mongo 副本集自动初始化失败 ### Mongo 副本集自动初始化失败
...@@ -230,7 +231,7 @@ docker compose --profile prepull pull opensandbox-agent-sandbox-image opensandbo ...@@ -230,7 +231,7 @@ docker compose --profile prepull pull opensandbox-agent-sandbox-image opensandbo
如果是由于,无法自动初始化副本集合,可以手动初始化副本集: 如果是由于,无法自动初始化副本集合,可以手动初始化副本集:
1. 终端中执行下面命令,创建mongo密钥: 1. 终端中执行下面命令,创建 mongo 密钥:
```bash ```bash
openssl rand -base64 756 > ./mongodb.key openssl rand -base64 756 > ./mongodb.key
...@@ -289,12 +290,11 @@ rs.initiate({ ...@@ -289,12 +290,11 @@ rs.initiate({
rs.status() rs.status()
``` ```
### 如何修改API地址和密钥 ### 如何修改 API 地址和密钥
默认是写了OneAPi的连接地址和密钥,可以通过修改`docker-compose.yml`中,fastgpt容器的环境变量实现。 默认是写了 OneAPi 的连接地址和密钥,可以通过修改 `docker-compose.yml` 中,fastgpt 容器的环境变量实现。
`OPENAI_BASE_URL`(API 接口的地址,需要加/v1) `OPENAI_BASE_URL`(API 接口的地址,需要加/v1)`CHAT_API_KEY`(API 接口的凭证)。
`CHAT_API_KEY`(API 接口的凭证)。
修改完后重启: 修改完后重启:
...@@ -317,27 +317,27 @@ docker compose up -d ...@@ -317,27 +317,27 @@ docker compose up -d
### 如何自定义配置文件? ### 如何自定义配置文件?
修改`config.json`文件,并执行`docker compose down`再执行`docker compose up -d`重起容器。具体配置,参考[配置详解](../config/json.mdx)。 修改 `config.json` 文件,并执行 `docker compose down` 再执行 `docker compose up -d` 重起容器。具体配置,参考[配置详解](../config/json.mdx)。
### 如何检查自定义配置文件是否挂载 ### 如何检查自定义配置文件是否挂载
1. `docker logs fastgpt` 可以查看日志,在启动容器后,第一次请求网页,会进行配置文件读取,可以看看有没有读取成功以及有无错误日志。 1. `docker logs fastgpt` 可以查看日志,在启动容器后,第一次请求网页,会进行配置文件读取,可以看看有没有读取成功以及有无错误日志。
2. `docker exec -it fastgpt sh` 进入 FastGPT 容器,可以通过`ls data`查看目录下是否成功挂载`config.json`文件。可通过`cat data/config.json`查看配置文件。 2. `docker exec -it fastgpt sh` 进入 FastGPT 容器,可以通过 `ls data` 查看目录下是否成功挂载 `config.json` 文件。可通过 `cat data/config.json` 查看配置文件。
**可能不生效的原因** **可能不生效的原因**
1. 挂载目录不正确 1. 挂载目录不正确
2. 配置文件不正确,日志中会提示`invalid json`,配置文件需要是标准的 JSON 文件。 2. 配置文件不正确,日志会提示 `invalid json`,配置文件需要是标准的 JSON 文件。
3. 修改后,没有`docker compose down`再`docker compose up -d`,restart是不会重新挂载文件的。 3. 修改后,没有 `docker compose down` 再 `docker compose up -d`,restart 是不会重新挂载文件的。
### 如何检查环境变量是否正常加载 ### 如何检查环境变量是否正常加载
1. `docker exec -it fastgpt sh` 进入 FastGPT 容器。 1. `docker exec -it fastgpt sh` 进入 FastGPT 容器。
2. 直接输入`env`命令查看所有环境变量。 2. 直接输入 `env` 命令查看所有环境变量。
### 为什么无法连接`本地模型`镜像 ### 为什么无法连接 `本地模型` 镜像
`docker-compose.yml`中使用了桥接的模式建立了`fastgpt`网络,如想通过0.0.0.0或镜像名访问其它镜像,需将其它镜像也加入到网络中。 `docker-compose.yml` 中使用了桥接的模式建立了 `fastgpt` 网络,如想通过 0.0.0.0 或镜像名访问其它镜像,需将其它镜像也加入到网络中。
### 端口冲突怎么解决? ### 端口冲突怎么解决?
...@@ -345,7 +345,7 @@ docker-compose 蝡臬摰蛹嚗垢:餈垢` ...@@ -345,7 +345,7 @@ docker-compose 蝡臬摰蛹嚗垢:餈垢`
桥接模式下,容器运行端口不会有冲突,但是会有映射端口冲突,只需将映射端口修改成不同端口即可。 桥接模式下,容器运行端口不会有冲突,但是会有映射端口冲突,只需将映射端口修改成不同端口即可。
果`容器1`需要连接`容器2`,使用`容器2:运行端口`来进行连接即可。 果 `容器1` 需要连接 `容器2`,使用 `容器2:运行端口` 来进行连接即可。
(自行补习 docker 基本知识) (自行补习 docker 基本知识)
...@@ -361,21 +361,21 @@ PG 摨瓷銝/仃韐伐隞交敹astGPT 隡 ...@@ -361,21 +361,21 @@ PG 摨瓷銝/仃韐伐隞交敹astGPT 隡
可能原因: 可能原因:
1. arm架构。需要使用 Mongo 官方镜像: mongo:5.0.18 1. arm 架构。需要使用 Mongo 官方镜像:mongo:5.0.18
2. cpu 不支持 AVX,无法用 mongo5,需要换成 mongo4.x。把 mongo 的 image 换成: mongo:4.4.29 2. cpu 不支持 AVX,无法用 mongo5,需要换成 mongo4.x。把 mongo 的 image 换成: mongo:4.4.29
### Operation `auth_codes.findOne()` buffering timed out after 10000ms ### Operation `auth_codes.findOne()` buffering timed out after 10000ms
mongo连接失败,查看mongo的运行状态**对应日志**。 mongo 连接失败,查看 mongo 的运行状态**对应日志**。
可能原因: 可能原因:
1. mongo 服务有没有起来(有些 cpu 不支持 AVX,无法用 mongo5,需要换成 mongo4.x,可以docker hub找个最新的4.x,修改镜像版本,重新运行) 1. mongo 服务有没有起来(有些 cpu 不支持 AVX,无法用 mongo5,需要换成 mongo4.x,可以 docker hub 找个最新的 4.x,修改镜像版本,重新运行)
2. 连接数据库的环境变量填写错误(账号密码,注意host和port,非容器网络连接,需要用公网ip并加上 directConnection=true) 2. 连接数据库的环境变量填写错误(账号密码,注意 host 和 port,非容器网络连接,需要用公网 ip 并加上 directConnection=true)
3. 副本集启动失败。导致容器一直重启。 3. 副本集启动失败。导致容器一直重启。
4. `Illegal instruction.... Waiting for MongoDB to start`: cpu 不支持 AVX,无法用 mongo5,需要换成 mongo4.x 4. `Illegal instruction.... Waiting for MongoDB to start` : cpu 不支持 AVX,无法用 mongo5,需要换成 mongo4.x
### 首次部署,root用户提示未注册 ### 首次部署,root 用户提示未注册
日志会有错误提示。大概率是没有启动 Mongo 副本集模式。 日志会有错误提示。大概率是没有启动 Mongo 副本集模式。
...@@ -392,15 +392,16 @@ mongo餈憭梯揖嚗ongo**撖孵敹** ...@@ -392,15 +392,16 @@ mongo餈憭梯揖嚗ongo**撖孵敹**
### 如何修改密码 ### 如何修改密码
修改`docker-compose.yml`文件中`DEFAULT_ROOT_PSW`并重启即可,密码会自动更新。 修改 `docker-compose.yml` 文件中 `DEFAULT_ROOT_PSW` 并重启即可,密码会自动更新。
### 部署 Zilliz 版本,获取账号和密钥 ### 部署 Zilliz 版本,获取账号和密钥
打开 [Zilliz Cloud](https://zilliz.com.cn/), 创建实例并获取相关秘钥。
打开 [Zilliz Cloud](https://zilliz.com.cn/) , 创建实例并获取相关秘钥。
![zilliz_key](../../../public/imgs/zilliz_key.png) ![zilliz_key](../../../public/imgs/zilliz_key.png)
<Alert icon="🤖" context="success"> <Alert icon="🤖" context="success">
1. 修改`MILVUS_ADDRESS`和`MILVUS_TOKEN`链接参数,分别对应 `zilliz` 的 `Public Endpoint` 和 `Api key`,记得把自己ip加入白名单。 1. 修改 `MILVUS_ADDRESS` 和 `MILVUS_TOKEN` 链接参数,分别对应 `zilliz` 的 `Public Endpoint` 和 `Api key`,记得把自己 ip 加入白名单。
</Alert> </Alert>
...@@ -9,7 +9,7 @@ description: 'FastGPT V4.14.10 Release Notes' ...@@ -9,7 +9,7 @@ description: 'FastGPT V4.14.10 Release Notes'
The following configuration adjustments are for `docker compose` deployments. `sealos` commercial users can contact support for an online sandbox service solution. The following configuration adjustments are for `docker compose` deployments. `sealos` commercial users can contact support for an online sandbox service solution.
Open the [latest yml deployment file](https://github.com/labring/FastGPT/blob/main/deploy/docker/global/docker-compose.pg.yml) and add the following: Open the [latest yml deployment file](https://github.com/labring/FastGPT/blob/main/document/public/deploy/docker/v4.14/global/docker-compose.pg.yml) and add the following:
1. Add the `x-volume-manager-auth-token: &x-volume-manager-auth-token 'vmtoken'` variable configuration at the top of the file. 1. Add the `x-volume-manager-auth-token: &x-volume-manager-auth-token 'vmtoken'` variable configuration at the top of the file.
2. Add 3 new services: `opensandbox-server`, `volume-manager`, and `agent-sandbox-image`. 2. Add 3 new services: `opensandbox-server`, `volume-manager`, and `agent-sandbox-image`.
......
...@@ -9,7 +9,7 @@ description: 'FastGPT V4.14.10 更新说明' ...@@ -9,7 +9,7 @@ description: 'FastGPT V4.14.10 更新说明'
以下针对的是 `docker compose` 部署方案的配置调整,使用 `sealos` 的商业版用户,可私信支持人员,提供在线的沙盒服务方案。 以下针对的是 `docker compose` 部署方案的配置调整,使用 `sealos` 的商业版用户,可私信支持人员,提供在线的沙盒服务方案。
参考[最新 yml 部署文件](https://github.com/labring/FastGPT/blob/main/deploy/docker/cn/docker-compose.pg.yml),调整本地 yml 文件,加入以下内容: 参考[最新 yml 部署文件](https://github.com/labring/FastGPT/blob/main/document/public/deploy/docker/v4.14/cn/docker-compose.pg.yml),调整本地 yml 文件,加入以下内容:
1. 在文件顶部增加 `x-volume-manager-auth-token: &x-volume-manager-auth-token 'vmtoken'` 变量配置。 1. 在文件顶部增加 `x-volume-manager-auth-token: &x-volume-manager-auth-token 'vmtoken'` 变量配置。
2. 增加 5 组 services: `opensandbox-server` , `opensandbox-agent-sandbox-image` , `opensandbox-execd-image` , `opensandbox-egress-image` , `fastgpt-volume-manager` 2. 增加 5 组 services: `opensandbox-server` , `opensandbox-agent-sandbox-image` , `opensandbox-execd-image` , `opensandbox-egress-image` , `fastgpt-volume-manager`
......
...@@ -7,7 +7,7 @@ description: 'FastGPT V4.10.0 Update Notes' ...@@ -7,7 +7,7 @@ description: 'FastGPT V4.10.0 Update Notes'
### Docker Deployment ### Docker Deployment
- Refer to the latest [docker-compose.yml](https://github.com/labring/FastGPT/blob/main/deploy/docker/docker-compose-pgvector.yml) file to add the `fastgpt-plugin` and `minio` services. - Refer to the latest [docker-compose.yml](https://github.com/labring/FastGPT/blob/main/document/public/deploy/docker/main/global/docker-compose.pg.yml) file to add the `fastgpt-plugin` and `minio` services.
- Set the `fastgpt-plugin` environment variable `AUTH_TOKEN` to a sufficiently complex value. - Set the `fastgpt-plugin` environment variable `AUTH_TOKEN` to a sufficiently complex value.
- Set the `fastgpt-plugin` environment variable `MINIO_CUSTOM_ENDPOINT` to `http://ip:port` or a relevant domain name that is accessible to FastGPT users. - Set the `fastgpt-plugin` environment variable `MINIO_CUSTOM_ENDPOINT` to `http://ip:port` or a relevant domain name that is accessible to FastGPT users.
- Update the environment variables for the `fastgpt` and `fastgpt-pro` (commercial edition) containers: - Update the environment variables for the `fastgpt` and `fastgpt-pro` (commercial edition) containers:
...@@ -16,6 +16,7 @@ description: 'FastGPT V4.10.0 Update Notes' ...@@ -16,6 +16,7 @@ description: 'FastGPT V4.10.0 Update Notes'
PLUGIN_BASE_URL=http://fastgpt-plugin:3000 PLUGIN_BASE_URL=http://fastgpt-plugin:3000
PLUGIN_TOKEN=the AUTH_TOKEN value you just set PLUGIN_TOKEN=the AUTH_TOKEN value you just set
``` ```
- Update the `fastgpt` and `fastgpt-pro` image tags to: v4.10.0-fix - Update the `fastgpt` and `fastgpt-pro` image tags to: v4.10.0-fix
- Run `docker-compose up -d` to start/update all services. - Run `docker-compose up -d` to start/update all services.
......
...@@ -7,25 +7,26 @@ description: 'FastGPT V4.10.0 更新说明' ...@@ -7,25 +7,26 @@ description: 'FastGPT V4.10.0 更新说明'
### Docker 版本 ### Docker 版本
- 参考最新的[docker-compose.yml](https://github.com/labring/FastGPT/blob/main/deploy/docker/docker-compose-pgvector.yml)文件,加入`fastgpt-plugin`和`minio`服务。 - 参考最新的 [docker-compose.yml](https://github.com/labring/FastGPT/blob/main/document/public/deploy/docker/main/global/docker-compose.pg.yml) 文件,加入 `fastgpt-plugin` 和 `minio` 服务。
- 修改`fastgpt-plugin`环境变量`AUTH_TOKEN`为较复杂的值。 - 修改 `fastgpt-plugin` 环境变量 `AUTH_TOKEN` 为较复杂的值。
- 修改`fastgpt-plugin`环境变量`MINIO_CUSTOM_ENDPOINT`为`http://ip:port` 或相关域名,要求fastgpt 用户可访问。 - 修改 `fastgpt-plugin` 环境变量 `MINIO_CUSTOM_ENDPOINT` 为 `http://ip:port` 或相关域名,要求 fastgpt 用户可访问。
- 更新`fastgpt`和`fastgpt-pro`(商业版)容器的环境变量: - 更新 `fastgpt` 和 `fastgpt-pro` (商业版)容器的环境变量:
``` ```
PLUGIN_BASE_URL=http://fastgpt-plugin:3000 PLUGIN_BASE_URL=http://fastgpt-plugin:3000
PLUGIN_TOKEN=刚修改的 AUTH_TOKEN 值 PLUGIN_TOKEN=刚修改的 AUTH_TOKEN 值
``` ```
- 更新`fastgpt`和`fastgpt-pro`镜像 tag: v4.10.0-fix
- `docker-compose up -d`启动/更新所有服务。 - 更新 `fastgpt` 和 `fastgpt-pro` 镜像 tag: v4.10.0-fix
- `docker-compose up -d` 启动/更新所有服务。
### Sealos 版本 ### Sealos 版本
- 在 Sealos 桌面的`对象存储`中,新建一个存储桶,设置`publicRead`权限。并获取相关密钥: - 在 Sealos 桌面的 `对象存储` 中,新建一个存储桶,设置 `publicRead` 权限。并获取相关密钥:
![](../../../../public/imgs/sealos-s3.png) ![](../../../../public/imgs/sealos-s3.png)
- 部署`fastgpt-plugin`服务,镜像`registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-plugin:v0.1.0`,内网暴露端口3000,无需公网访问,设置环境变量: - 部署 `fastgpt-plugin` 服务,镜像 `registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-plugin:v0.1.0`,内网暴露端口 3000,无需公网访问,设置环境变量:
``` ```
AUTH_TOKEN=鉴权 token AUTH_TOKEN=鉴权 token
...@@ -43,7 +44,7 @@ MINIO_SECRET_KEY=Secret Key ...@@ -43,7 +44,7 @@ MINIO_SECRET_KEY=Secret Key
MINIO_BUCKET=存储桶名 MINIO_BUCKET=存储桶名
``` ```
- 更新`fastgpt`和`fastgpt-pro`(商业版)容器的环境变量以及镜像 tag: v4.10.0-fix - 更新 `fastgpt` 和 `fastgpt-pro` (商业版)容器的环境变量以及镜像 tag: v4.10.0-fix
``` ```
PLUGIN_BASE_URL=fastgpt-plugin 服务的内网地址 PLUGIN_BASE_URL=fastgpt-plugin 服务的内网地址
......
...@@ -16,7 +16,7 @@ SANDBOX_URL=internal-network-address ...@@ -16,7 +16,7 @@ SANDBOX_URL=internal-network-address
## Docker Deployment ## Docker Deployment
You can pull the latest [docker-compose.yml](https://github.com/labring/FastGPT/blob/main/deploy/docker/docker-compose.yml) file for reference. You can pull the latest [docker-compose.yml](https://github.com/labring/FastGPT/blob/main/document/public/deploy/docker/main/global/docker-compose.pg.yml) file for reference.
1. Add a new `sandbox` container. 1. Add a new `sandbox` container.
2. Add the `SANDBOX_URL` environment variable to the fastgpt and fastgpt-pro (commercial edition) containers. 2. Add the `SANDBOX_URL` environment variable to the fastgpt and fastgpt-pro (commercial edition) containers.
......
...@@ -6,7 +6,7 @@ description: FastGPT V4.8.2 更新说明 ...@@ -6,7 +6,7 @@ description: FastGPT V4.8.2 更新说明
## Sealos 升级说明 ## Sealos 升级说明
1. 在应用管理中新建一个应用,镜像为:registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.8.1 1. 在应用管理中新建一个应用,镜像为:registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-sandbox:v4.8.1
2. 无需外网访问地址,端口号为3000 2. 无需外网访问地址,端口号为 3000
3. 部署完后,复制应用的内网地址 3. 部署完后,复制应用的内网地址
4. 点击变更`FastGPT - 修改环境变量,增加下面的环境变量即可 4. 点击变更`FastGPT - 修改环境变量,增加下面的环境变量即可
...@@ -16,7 +16,7 @@ SANDBOX_URL=内网地址 ...@@ -16,7 +16,7 @@ SANDBOX_URL=内网地址
## Docker 部署 ## Docker 部署
可以拉取最新 [docker-compose.yml](https://github.com/labring/FastGPT/blob/main/deploy/docker/docker-compose.yml) 文件参考 可以拉取最新 [docker-compose.yml](https://github.com/labring/FastGPT/blob/main/document/public/deploy/docker/main/global/docker-compose.pg.yml) 文件参考
1. 新增一个容器 `sandbox` 1. 新增一个容器 `sandbox`
2. fastgpt 和 fastgpt-pro(商业版) 容器新增环境变量: `SANDBOX_URL` 2. fastgpt 和 fastgpt-pro(商业版) 容器新增环境变量: `SANDBOX_URL`
...@@ -24,7 +24,7 @@ SANDBOX_URL=内网地址 ...@@ -24,7 +24,7 @@ SANDBOX_URL=内网地址
## V4.8.2 更新说明 ## V4.8.2 更新说明
1. 新增 - js代码运行节点(更完整的type提醒,后续继续完善) 1. 新增 - js 代码运行节点(更完整的 type 提醒,后续继续完善)
2. 新增 - 内容提取节点支持数据类型选择 2. 新增 - 内容提取节点支持数据类型选择
3. 修复 - 新增的站点同步无法使用 3. 修复 - 新增的站点同步无法使用
4. 修复 - 定时任务无法输入内容 4. 修复 - 定时任务无法输入内容
...@@ -11,7 +11,7 @@ description: FastGPT V4.8.3 Release Notes ...@@ -11,7 +11,7 @@ description: FastGPT V4.8.3 Release Notes
## V4.8.3 Release Notes ## V4.8.3 Release Notes
1. New - Milvus database support. See the latest [docker-compose-milvus.yml](https://github.com/labring/FastGPT/blob/main/deploy/docker/docker-compose-milvus.yml) for reference. 1. New - Milvus database support. See the latest [docker-compose-milvus.yml](https://github.com/labring/FastGPT/blob/main/document/public/deploy/docker/main/global/docker-compose.milvus.yml) for reference.
2. New - Added logging for empty answers in the chat API to help troubleshoot model issues. 2. New - Added logging for empty answers in the chat API to help troubleshoot model issues.
3. New - If/Else conditional node now supports regex for string matching. 3. New - If/Else conditional node now supports regex for string matching.
4. New - Code execution node now supports console.log for debug output. 4. New - Code execution node now supports console.log for debug output.
......
...@@ -11,8 +11,8 @@ description: FastGPT V4.8.3 更新说明 ...@@ -11,8 +11,8 @@ description: FastGPT V4.8.3 更新说明
## V4.8.3 更新说明 ## V4.8.3 更新说明
1. 新增 - 支持 Milvus 数据库, 可参考最新的 [docker-compose-milvus.yml](https://github.com/labring/FastGPT/blob/main/deploy/docker/docker-compose-milvus.yml). 1. 新增 - 支持 Milvus 数据库,可参考最新的 [docker-compose-milvus.yml](https://github.com/labring/FastGPT/blob/main/document/public/deploy/docker/main/global/docker-compose.milvus.yml) .
2. 新增 - 给 chat 接口 empty answer 增加 log,便于排查模型问题。 2. 新增 - 给 chat 接口 empty answer 增加 log,便于排查模型问题。
3. 新增 - ifelse判断器,字符串支持正则。 3. 新增 - ifelse 判断器,字符串支持正则。
4. 新增 - 代码运行支持 console.log 输出调试。 4. 新增 - 代码运行支持 console.log 输出调试。
5. 修复 - 变量更新在 Debug 模式下出错。 5. 修复 - 变量更新在 Debug 模式下出错。
...@@ -12,7 +12,7 @@ description: FastGPT V4.9.0 Release Notes ...@@ -12,7 +12,7 @@ description: FastGPT V4.9.0 Release Notes
- Update FastGPT image tag: v4.9.0 - Update FastGPT image tag: v4.9.0
- Update FastGPT Pro image tag: v4.9.0 - Update FastGPT Pro image tag: v4.9.0
- Sandbox image: no update required - Sandbox image: no update required
- Update PG container to v0.8.0-pg15. See the [latest yml](https://raw.githubusercontent.com/labring/FastGPT/main/deploy/docker/docker-compose-pgvector.yml) - Update PG container to v0.8.0-pg15. See the [latest yml](https://raw.githubusercontent.com/labring/FastGPT/main/document/public/deploy/docker/main/global/docker-compose.pg.yml)
### 3. Replace OneAPI (Optional) ### 3. Replace OneAPI (Optional)
...@@ -20,7 +20,7 @@ Follow this step if you want to replace OneAPI with [AI Proxy](https://github.co ...@@ -20,7 +20,7 @@ Follow this step if you want to replace OneAPI with [AI Proxy](https://github.co
#### 1. Modify the yml File #### 1. Modify the yml File
Refer to the [latest yml](https://raw.githubusercontent.com/labring/FastGPT/main/deploy/docker/docker-compose-pgvector.yml) file. OneAPI has been removed and AI Proxy configuration has been added, including one service and one PgSQL database. Append the `aiproxy` configuration after the OneAPI configuration (don't remove OneAPI yet — the initialization process will automatically sync OneAPI's configuration). Refer to the [latest yml](https://raw.githubusercontent.com/labring/FastGPT/main/document/public/deploy/docker/main/global/docker-compose.pg.yml) file. OneAPI has been removed and AI Proxy configuration has been added, including one service and one PgSQL database. Append the `aiproxy` configuration after the OneAPI configuration (don't remove OneAPI yet — the initialization process will automatically sync OneAPI's configuration).
<details> <details>
<summary>AI Proxy Yml Configuration</summary> <summary>AI Proxy Yml Configuration</summary>
......
...@@ -12,7 +12,7 @@ description: FastGPT V4.9.0 更新说明 ...@@ -12,7 +12,7 @@ description: FastGPT V4.9.0 更新说明
- 更新 FastGPT 镜像 tag: v4.9.0 - 更新 FastGPT 镜像 tag: v4.9.0
- 更新 FastGPT 商业版镜像 tag: v4.9.0 - 更新 FastGPT 商业版镜像 tag: v4.9.0
- Sandbox 镜像,可以不更新 - Sandbox 镜像,可以不更新
- 更新 PG 容器为 v0.8.0-pg15, 可以查看[最新的 yml](https://raw.githubusercontent.com/labring/FastGPT/main/deploy/docker/docker-compose-pgvector.yml) - 更新 PG 容器为 v0.8.0-pg15, 可以查看[最新的 yml](https://raw.githubusercontent.com/labring/FastGPT/main/document/public/deploy/docker/main/global/docker-compose.pg.yml)
### 3. 替换 OneAPI(可选) ### 3. 替换 OneAPI(可选)
...@@ -20,7 +20,7 @@ description: FastGPT V4.9.0 更新说明 ...@@ -20,7 +20,7 @@ description: FastGPT V4.9.0 更新说明
#### 1. 修改 yml 文件 #### 1. 修改 yml 文件
参考[最新的 yml](https://raw.githubusercontent.com/labring/FastGPT/main/deploy/docker/docker-compose-pgvector.yml) 文件。里面已移除 OneAPI 并添加了 AIProxy配置。包含一个服务和一个 PgSQL 数据库。将 `aiproxy` 的配置`追加`到 OneAPI 的配置后面(先不要删除 OneAPI,有一个初始化会自动同步 OneAPI 的配置) 参考[最新的 yml](https://raw.githubusercontent.com/labring/FastGPT/main/document/public/deploy/docker/main/global/docker-compose.pg.yml) 文件。里面已移除 OneAPI 并添加了 AIProxy 配置。包含一个服务和一个 PgSQL 数据库。将 `aiproxy` 的配置 `追加` 到 OneAPI 的配置后面(先不要删除 OneAPI,有一个初始化会自动同步 OneAPI 的配置)
<details> <details>
<summary>AI Proxy Yml 配置</summary> <summary>AI Proxy Yml 配置</summary>
...@@ -92,7 +92,7 @@ description: FastGPT V4.9.0 更新说明 ...@@ -92,7 +92,7 @@ description: FastGPT V4.9.0 更新说明
`docker-compose down` 停止服务,然后 `docker-compose up -d` 启动服务,此时会追加 `aiproxy` 服务,并修改 FastGPT 的配置。 `docker-compose down` 停止服务,然后 `docker-compose up -d` 启动服务,此时会追加 `aiproxy` 服务,并修改 FastGPT 的配置。
#### 4. 执行OneAPI迁移AI proxy脚本 #### 4. 执行 OneAPI 迁移 AI proxy 脚本
- 可联网方案: - 可联网方案:
...@@ -111,7 +111,7 @@ curl --location --request POST 'http://localhost:3000/api/channels/import/oneapi ...@@ -111,7 +111,7 @@ curl --location --request POST 'http://localhost:3000/api/channels/import/oneapi
# 返回 {"data":[],"success":true} 代表成功 # 返回 {"data":[],"success":true} 代表成功
``` ```
- 无法联网时,可打开`aiproxy`的外网暴露端口,然后在本地执行脚本。 - 无法联网时,可打开 `aiproxy` 的外网暴露端口,然后在本地执行脚本。
aiProxy 暴露端口:3003:3000,修改后重新 `docker-compose up -d` 启动服务。 aiProxy 暴露端口:3003:3000,修改后重新 `docker-compose up -d` 启动服务。
...@@ -128,9 +128,9 @@ curl --location --request POST 'http://localhost:3003/api/channels/import/oneapi ...@@ -128,9 +128,9 @@ curl --location --request POST 'http://localhost:3003/api/channels/import/oneapi
- 如果不熟悉 docker 操作,建议不要走脚本迁移,直接删除 OneAPI 所有内容,然后手动重新添加渠道。 - 如果不熟悉 docker 操作,建议不要走脚本迁移,直接删除 OneAPI 所有内容,然后手动重新添加渠道。
#### 5. 进入 FastGPT 检查`AI Proxy` 服务是否正常启动。 #### 5. 进入 FastGPT 检查 `AI Proxy` 服务是否正常启动。
登录 root 账号后,在`账号-模型提供商`页面,可以看到多出了`模型渠道`和`调用日志`两个选项,打开模型渠道,可以看到之前 OneAPI 的渠道,说明迁移完成,此时可以手动再检查下渠道是否正常。 登录 root 账号后,在 `账号-模型提供商` 页面,可以看到多出了 `模型渠道` 和 `调用日志` 两个选项,打开模型渠道,可以看到之前 OneAPI 的渠道,说明迁移完成,此时可以手动再检查下渠道是否正常。
#### 6. 删除 OneAPI 服务 #### 6. 删除 OneAPI 服务
...@@ -144,7 +144,7 @@ docker-compose up -d ...@@ -144,7 +144,7 @@ docker-compose up -d
### 4. 运行 FastGPT 升级脚本 ### 4. 运行 FastGPT 升级脚本
从任意终端,发起 1 个 HTTP 请求。其中 `{{rootkey}}` 替换成环境变量里的 `rootkey`;`{{host}}` 替换成**FastGPT 域名**。 从任意终端,发起 1 个 HTTP 请求。其中 `{{rootkey}}` 替换成环境变量里的 `rootkey`;`{{host}}` 替换成 **FastGPT 域名**。
```bash ```bash
curl --location --request POST 'https://{{host}}/api/admin/initv490' \ curl --location --request POST 'https://{{host}}/api/admin/initv490' \
...@@ -163,11 +163,11 @@ curl --location --request POST 'https://{{host}}/api/admin/initv490' \ ...@@ -163,11 +163,11 @@ curl --location --request POST 'https://{{host}}/api/admin/initv490' \
1. 弃用 - 之前私有化部署的自定义文件解析方案,请同步更新到最新的配置方案。[点击查看 PDF 增强解析配置](../../config/json.mdx#使用-doc2x-解析-pdf-文件) 1. 弃用 - 之前私有化部署的自定义文件解析方案,请同步更新到最新的配置方案。[点击查看 PDF 增强解析配置](../../config/json.mdx#使用-doc2x-解析-pdf-文件)
2. 弃用 - 弃用旧版本地文件上传 API:/api/core/dataset/collection/create/file(以前仅商业版可用的 API,该接口已放切换成:/api/core/dataset/collection/create/localFile) 2. 弃用 - 弃用旧版本地文件上传 API:/api/core/dataset/collection/create/file(以前仅商业版可用的 API,该接口已放切换成:/api/core/dataset/collection/create/localFile)
3. 停止维护,即将弃用 - 外部文件库相关 API,可通过 API 文件库替代。 3. 停止维护,即将弃用 - 外部文件库相关 API,可通过 API 文件库替代。
4. API更新 - 上传文件至知识库、创建连接集合、API 文件库、推送分块数据等带有 `trainingType` 字段的接口,`trainingType`字段未来仅支持`chunk`和`QA`两种模式。增强索引模式将设置单独字段:`autoIndexes`,目前仍有适配旧版`trainingType=auto`代码,但请尽快变更成新接口类型。具体可见:[知识库 OpenAPI 文档](../../../openapi/dataset.mdx) 4. API 更新 - 上传文件至知识库、创建连接集合、API 文件库、推送分块数据等带有 `trainingType` 字段的接口,`trainingType` 字段未来仅支持 `chunk` 和 `QA` 两种模式。增强索引模式将设置单独字段:`autoIndexes`,目前仍有适配旧版 `trainingType=auto` 代码,但请尽快变更成新接口类型。具体可见:[知识库 OpenAPI 文档](../../../openapi/dataset.mdx)
## 🚀 新增内容 ## 🚀 新增内容
1. PDF增强解析交互添加到页面上。同时内嵌 Doc2x 服务,可直接使用 Doc2x 服务解析 PDF 文件。 1. PDF 增强解析交互添加到页面上。同时内嵌 Doc2x 服务,可直接使用 Doc2x 服务解析 PDF 文件。
2. 图片自动标注,同时修改知识库文件上传部分数据逻辑和交互。 2. 图片自动标注,同时修改知识库文件上传部分数据逻辑和交互。
3. pg vector 插件升级 0.8.0 版本,引入迭代搜索,减少部分数据无法被检索的情况。 3. pg vector 插件升级 0.8.0 版本,引入迭代搜索,减少部分数据无法被检索的情况。
4. 新增 qwen-qwq 系列模型配置。 4. 新增 qwen-qwq 系列模型配置。
......
...@@ -278,7 +278,7 @@ ...@@ -278,7 +278,7 @@
"content/self-host/upgrading/4-14/4149.en.mdx": "2026-04-26T21:08:47+08:00", "content/self-host/upgrading/4-14/4149.en.mdx": "2026-04-26T21:08:47+08:00",
"content/self-host/upgrading/4-14/4149.mdx": "2026-04-26T21:08:47+08:00", "content/self-host/upgrading/4-14/4149.mdx": "2026-04-26T21:08:47+08:00",
"content/self-host/upgrading/4-15/4150.mdx": "2026-05-20T17:52:26+08:00", "content/self-host/upgrading/4-15/4150.mdx": "2026-05-20T17:52:26+08:00",
"content/self-host/upgrading/4-15/41502.mdx": "2026-05-23T22:47:02+08:00", "content/self-host/upgrading/4-15/41502.mdx": "2026-05-23T23:33:02+08:00",
"content/self-host/upgrading/outdated/40.en.mdx": "2026-04-26T21:08:47+08:00", "content/self-host/upgrading/outdated/40.en.mdx": "2026-04-26T21:08:47+08:00",
"content/self-host/upgrading/outdated/40.mdx": "2026-04-26T21:08:47+08:00", "content/self-host/upgrading/outdated/40.mdx": "2026-04-26T21:08:47+08:00",
"content/self-host/upgrading/outdated/41.en.mdx": "2026-04-26T21:08:47+08:00", "content/self-host/upgrading/outdated/41.en.mdx": "2026-04-26T21:08:47+08:00",
......
...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx' ...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx'
x-plugin-auth-token: &x-plugin-auth-token 'token' x-plugin-auth-token: &x-plugin-auth-token 'token'
# code sandbox token # code sandbox token
x-code-sandbox-token: &x-code-sandbox-token 'codesandbox' x-code-sandbox-token: &x-code-sandbox-token 'codesandbox'
# volume manager auth token
x-volume-manager-auth-token: &x-volume-manager-auth-token 'vmtoken'
# aiproxy token # aiproxy token
x-aiproxy-token: &x-aiproxy-token 'token' x-aiproxy-token: &x-aiproxy-token 'token'
# 数据库连接相关配置 # 数据库连接相关配置
...@@ -43,7 +41,6 @@ x-log-config: &x-log-config ...@@ -43,7 +41,6 @@ x-log-config: &x-log-config
x-vec-config: &x-vec-config x-vec-config: &x-vec-config
MILVUS_ADDRESS: http://fastgpt-vector:19530 MILVUS_ADDRESS: http://fastgpt-vector:19530
MILVUS_TOKEN: none MILVUS_TOKEN: none
services: services:
# Vector DB # Vector DB
...@@ -104,7 +101,6 @@ services: ...@@ -104,7 +101,6 @@ services:
depends_on: depends_on:
- 'fastgpt-milvus-etcd' - 'fastgpt-milvus-etcd'
- 'fastgpt-milvus-minio' - 'fastgpt-milvus-minio'
fastgpt-mongo: fastgpt-mongo:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29
container_name: fastgpt-mongo container_name: fastgpt-mongo
...@@ -192,14 +188,13 @@ services: ...@@ -192,14 +188,13 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.15.0-beta1
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
- data - data
- app - app
- codesandbox - codesandbox
- opensandbox
- aiproxy - aiproxy
depends_on: depends_on:
fastgpt-mongo: fastgpt-mongo:
...@@ -221,7 +216,7 @@ services: ...@@ -221,7 +216,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -250,20 +245,6 @@ services: ...@@ -250,20 +245,6 @@ services:
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY # AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
AIPROXY_API_TOKEN: *x-aiproxy-token AIPROXY_API_TOKEN: *x-aiproxy-token
# ==================== Agent sandbox 配置 ====================
AGENT_SANDBOX_PROVIDER: opensandbox
# OpenSandbox 配置(PROVIDER: opensandbox 时生效)
AGENT_SANDBOX_OPENSANDBOX_BASEURL: http://opensandbox-server:8090
AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
LOG_OTEL_SERVICE_NAME: fastgpt-client LOG_OTEL_SERVICE_NAME: fastgpt-client
...@@ -271,7 +252,7 @@ services: ...@@ -271,7 +252,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.15.0-beta1
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -310,17 +291,17 @@ services: ...@@ -310,17 +291,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.15.0-beta1
networks: networks:
- app - app
ports: ports:
...@@ -356,79 +337,9 @@ services: ...@@ -356,79 +337,9 @@ services:
timeout: 20s timeout: 20s
retries: 3 retries: 3
# 沙盒控制器:管理 Docker 容器的创建/执行/停止/删除
# runtime=docker 模式需要挂载 Docker socket
# 配置 docker.host_ip 为宿主机 LAN IP(容器内访问宿主机服务用)
opensandbox-server:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-server:v0.1.9
container_name: fastgpt-opensandbox-server
restart: always
networks:
- opensandbox
extra_hosts:
- 'host.docker.internal:host-gateway'
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
configs:
- source: opensandbox-config
target: /etc/opensandbox/config.toml
environment:
SANDBOX_CONFIG_PATH: /etc/opensandbox/config.toml
healthcheck:
test:
[
'CMD',
'python',
'-c',
'import urllib.request,sys; sys.exit(0 if urllib.request.urlopen("http://localhost:8090/health",timeout=3).status==200 else 1)'
]
interval: 10s
timeout: 5s
retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox:v0.1
profiles:
- prepull
opensandbox-execd-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-execd:v1.0.7
profiles:
- prepull
opensandbox-egress-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-egress:v1.0.3
profiles:
- prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-volume-manager:v0.1
container_name: fastgpt-volume-manager
restart: always
networks:
- opensandbox
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
environment:
PORT: 3000
VM_RUNTIME: docker
VM_AUTH_TOKEN: *x-volume-manager-auth-token # 对应 AGENT_SANDBOX_VOLUME_MANAGER_TOKEN
VM_VOLUME_NAME_PREFIX: fastgpt-session # volume 名称前缀
VM_LOG_LEVEL: info
VM_DOCKER_API_VERSION: v1.44
healthcheck:
test:
[
'CMD',
'bun',
'-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
]
interval: 10s
timeout: 5s
retries: 5
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.6 image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -479,8 +390,6 @@ networks: ...@@ -479,8 +390,6 @@ networks:
name: fastgpt_app name: fastgpt_app
codesandbox: codesandbox:
name: fastgpt_codesandbox name: fastgpt_codesandbox
opensandbox:
name: fastgpt_opensandbox
aiproxy: aiproxy:
name: fastgpt_aiproxy name: fastgpt_aiproxy
...@@ -497,31 +406,3 @@ volumes: ...@@ -497,31 +406,3 @@ volumes:
fastgpt-seekdb-data: fastgpt-seekdb-data:
fastgpt-seekdb-config: fastgpt-seekdb-config:
fastgpt-aiproxy_pg: fastgpt-aiproxy_pg:
configs:
opensandbox-config:
content: |
[server]
host = "0.0.0.0"
port = 8090
log_level = "INFO"
[runtime]
type = "docker"
execd_image = "registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-execd:v1.0.7"
[egress]
image = "registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-egress:v1.0.3"
[docker]
network_mode = "fastgpt_opensandbox"
# When server runs in a container, set host_ip to the host's IP or hostname so bridge-mode endpoints are reachable (e.g. host.docker.internal or the host LAN IP).
# It's required when server deployed with docker container under host.
host_ip = "host.docker.internal"
drop_capabilities = ["AUDIT_WRITE", "MKNOD", "NET_ADMIN", "NET_RAW", "SYS_ADMIN", "SYS_MODULE", "SYS_PTRACE", "SYS_TIME", "SYS_TTY_CONFIG"]
no_new_privileges = true
pids_limit = 512
[ingress]
mode = "direct"
...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx' ...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx'
x-plugin-auth-token: &x-plugin-auth-token 'token' x-plugin-auth-token: &x-plugin-auth-token 'token'
# code sandbox token # code sandbox token
x-code-sandbox-token: &x-code-sandbox-token 'codesandbox' x-code-sandbox-token: &x-code-sandbox-token 'codesandbox'
# volume manager auth token
x-volume-manager-auth-token: &x-volume-manager-auth-token 'vmtoken'
# aiproxy token # aiproxy token
x-aiproxy-token: &x-aiproxy-token 'token' x-aiproxy-token: &x-aiproxy-token 'token'
# 数据库连接相关配置 # 数据库连接相关配置
...@@ -43,7 +41,6 @@ x-log-config: &x-log-config ...@@ -43,7 +41,6 @@ x-log-config: &x-log-config
x-vec-config: &x-vec-config x-vec-config: &x-vec-config
OCEANBASE_URL: mysql://root%40tenantname:tenantpassword@fastgpt-vector:2881/mysql OCEANBASE_URL: mysql://root%40tenantname:tenantpassword@fastgpt-vector:2881/mysql
services: services:
# Vector DB # Vector DB
fastgpt-vector: fastgpt-vector:
...@@ -82,7 +79,6 @@ services: ...@@ -82,7 +79,6 @@ services:
timeout: 10s timeout: 10s
retries: 1000 retries: 1000
start_period: 10s start_period: 10s
fastgpt-mongo: fastgpt-mongo:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29
container_name: fastgpt-mongo container_name: fastgpt-mongo
...@@ -170,14 +166,13 @@ services: ...@@ -170,14 +166,13 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.15.0-beta1
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
- data - data
- app - app
- codesandbox - codesandbox
- opensandbox
- aiproxy - aiproxy
depends_on: depends_on:
fastgpt-mongo: fastgpt-mongo:
...@@ -199,7 +194,7 @@ services: ...@@ -199,7 +194,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -228,20 +223,6 @@ services: ...@@ -228,20 +223,6 @@ services:
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY # AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
AIPROXY_API_TOKEN: *x-aiproxy-token AIPROXY_API_TOKEN: *x-aiproxy-token
# ==================== Agent sandbox 配置 ====================
AGENT_SANDBOX_PROVIDER: opensandbox
# OpenSandbox 配置(PROVIDER: opensandbox 时生效)
AGENT_SANDBOX_OPENSANDBOX_BASEURL: http://opensandbox-server:8090
AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
LOG_OTEL_SERVICE_NAME: fastgpt-client LOG_OTEL_SERVICE_NAME: fastgpt-client
...@@ -249,7 +230,7 @@ services: ...@@ -249,7 +230,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.15.0-beta1
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -288,17 +269,17 @@ services: ...@@ -288,17 +269,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.15.0-beta1
networks: networks:
- app - app
ports: ports:
...@@ -334,79 +315,9 @@ services: ...@@ -334,79 +315,9 @@ services:
timeout: 20s timeout: 20s
retries: 3 retries: 3
# 沙盒控制器:管理 Docker 容器的创建/执行/停止/删除
# runtime=docker 模式需要挂载 Docker socket
# 配置 docker.host_ip 为宿主机 LAN IP(容器内访问宿主机服务用)
opensandbox-server:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-server:v0.1.9
container_name: fastgpt-opensandbox-server
restart: always
networks:
- opensandbox
extra_hosts:
- 'host.docker.internal:host-gateway'
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
configs:
- source: opensandbox-config
target: /etc/opensandbox/config.toml
environment:
SANDBOX_CONFIG_PATH: /etc/opensandbox/config.toml
healthcheck:
test:
[
'CMD',
'python',
'-c',
'import urllib.request,sys; sys.exit(0 if urllib.request.urlopen("http://localhost:8090/health",timeout=3).status==200 else 1)'
]
interval: 10s
timeout: 5s
retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox:v0.1
profiles:
- prepull
opensandbox-execd-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-execd:v1.0.7
profiles:
- prepull
opensandbox-egress-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-egress:v1.0.3
profiles:
- prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-volume-manager:v0.1
container_name: fastgpt-volume-manager
restart: always
networks:
- opensandbox
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
environment:
PORT: 3000
VM_RUNTIME: docker
VM_AUTH_TOKEN: *x-volume-manager-auth-token # 对应 AGENT_SANDBOX_VOLUME_MANAGER_TOKEN
VM_VOLUME_NAME_PREFIX: fastgpt-session # volume 名称前缀
VM_LOG_LEVEL: info
VM_DOCKER_API_VERSION: v1.44
healthcheck:
test:
[
'CMD',
'bun',
'-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
]
interval: 10s
timeout: 5s
retries: 5
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.6 image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -457,8 +368,6 @@ networks: ...@@ -457,8 +368,6 @@ networks:
name: fastgpt_app name: fastgpt_app
codesandbox: codesandbox:
name: fastgpt_codesandbox name: fastgpt_codesandbox
opensandbox:
name: fastgpt_opensandbox
aiproxy: aiproxy:
name: fastgpt_aiproxy name: fastgpt_aiproxy
...@@ -477,33 +386,7 @@ volumes: ...@@ -477,33 +386,7 @@ volumes:
fastgpt-aiproxy_pg: fastgpt-aiproxy_pg:
configs: configs:
opensandbox-config:
content: |
[server]
host = "0.0.0.0"
port = 8090
log_level = "INFO"
[runtime]
type = "docker"
execd_image = "registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-execd:v1.0.7"
[egress]
image = "registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-egress:v1.0.3"
[docker]
network_mode = "fastgpt_opensandbox"
# When server runs in a container, set host_ip to the host's IP or hostname so bridge-mode endpoints are reachable (e.g. host.docker.internal or the host LAN IP).
# It's required when server deployed with docker container under host.
host_ip = "host.docker.internal"
drop_capabilities = ["AUDIT_WRITE", "MKNOD", "NET_ADMIN", "NET_RAW", "SYS_ADMIN", "SYS_MODULE", "SYS_PTRACE", "SYS_TIME", "SYS_TTY_CONFIG"]
no_new_privileges = true
pids_limit = 512
[ingress]
mode = "direct"
init_sql: init_sql:
name: init_sql name: init_sql
content: | content: |
ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30; ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30;
...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx' ...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx'
x-plugin-auth-token: &x-plugin-auth-token 'token' x-plugin-auth-token: &x-plugin-auth-token 'token'
# code sandbox token # code sandbox token
x-code-sandbox-token: &x-code-sandbox-token 'codesandbox' x-code-sandbox-token: &x-code-sandbox-token 'codesandbox'
# volume manager auth token
x-volume-manager-auth-token: &x-volume-manager-auth-token 'vmtoken'
# aiproxy token # aiproxy token
x-aiproxy-token: &x-aiproxy-token 'token' x-aiproxy-token: &x-aiproxy-token 'token'
# 数据库连接相关配置 # 数据库连接相关配置
...@@ -152,14 +150,13 @@ services: ...@@ -152,14 +150,13 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.15.0-beta1
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
- data - data
- app - app
- codesandbox - codesandbox
- opensandbox
- aiproxy - aiproxy
depends_on: depends_on:
fastgpt-mongo: fastgpt-mongo:
...@@ -181,7 +178,7 @@ services: ...@@ -181,7 +178,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -210,20 +207,6 @@ services: ...@@ -210,20 +207,6 @@ services:
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY # AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
AIPROXY_API_TOKEN: *x-aiproxy-token AIPROXY_API_TOKEN: *x-aiproxy-token
# ==================== Agent sandbox 配置 ====================
AGENT_SANDBOX_PROVIDER: opensandbox
# OpenSandbox 配置(PROVIDER: opensandbox 时生效)
AGENT_SANDBOX_OPENSANDBOX_BASEURL: http://opensandbox-server:8090
AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
LOG_OTEL_SERVICE_NAME: fastgpt-client LOG_OTEL_SERVICE_NAME: fastgpt-client
...@@ -231,7 +214,7 @@ services: ...@@ -231,7 +214,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.15.0-beta1
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -270,17 +253,17 @@ services: ...@@ -270,17 +253,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.15.0-beta1
networks: networks:
- app - app
ports: ports:
...@@ -316,79 +299,9 @@ services: ...@@ -316,79 +299,9 @@ services:
timeout: 20s timeout: 20s
retries: 3 retries: 3
# 沙盒控制器:管理 Docker 容器的创建/执行/停止/删除
# runtime=docker 模式需要挂载 Docker socket
# 配置 docker.host_ip 为宿主机 LAN IP(容器内访问宿主机服务用)
opensandbox-server:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-server:v0.1.9
container_name: fastgpt-opensandbox-server
restart: always
networks:
- opensandbox
extra_hosts:
- 'host.docker.internal:host-gateway'
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
configs:
- source: opensandbox-config
target: /etc/opensandbox/config.toml
environment:
SANDBOX_CONFIG_PATH: /etc/opensandbox/config.toml
healthcheck:
test:
[
'CMD',
'python',
'-c',
'import urllib.request,sys; sys.exit(0 if urllib.request.urlopen("http://localhost:8090/health",timeout=3).status==200 else 1)'
]
interval: 10s
timeout: 5s
retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox:v0.1
profiles:
- prepull
opensandbox-execd-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-execd:v1.0.7
profiles:
- prepull
opensandbox-egress-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-egress:v1.0.3
profiles:
- prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-volume-manager:v0.1
container_name: fastgpt-volume-manager
restart: always
networks:
- opensandbox
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
environment:
PORT: 3000
VM_RUNTIME: docker
VM_AUTH_TOKEN: *x-volume-manager-auth-token # 对应 AGENT_SANDBOX_VOLUME_MANAGER_TOKEN
VM_VOLUME_NAME_PREFIX: fastgpt-session # volume 名称前缀
VM_LOG_LEVEL: info
VM_DOCKER_API_VERSION: v1.44
healthcheck:
test:
[
'CMD',
'bun',
'-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
]
interval: 10s
timeout: 5s
retries: 5
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.6 image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -439,8 +352,6 @@ networks: ...@@ -439,8 +352,6 @@ networks:
name: fastgpt_app name: fastgpt_app
codesandbox: codesandbox:
name: fastgpt_codesandbox name: fastgpt_codesandbox
opensandbox:
name: fastgpt_opensandbox
aiproxy: aiproxy:
name: fastgpt_aiproxy name: fastgpt_aiproxy
...@@ -457,31 +368,3 @@ volumes: ...@@ -457,31 +368,3 @@ volumes:
fastgpt-seekdb-data: fastgpt-seekdb-data:
fastgpt-seekdb-config: fastgpt-seekdb-config:
fastgpt-aiproxy_pg: fastgpt-aiproxy_pg:
configs:
opensandbox-config:
content: |
[server]
host = "0.0.0.0"
port = 8090
log_level = "INFO"
[runtime]
type = "docker"
execd_image = "registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-execd:v1.0.7"
[egress]
image = "registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-egress:v1.0.3"
[docker]
network_mode = "fastgpt_opensandbox"
# When server runs in a container, set host_ip to the host's IP or hostname so bridge-mode endpoints are reachable (e.g. host.docker.internal or the host LAN IP).
# It's required when server deployed with docker container under host.
host_ip = "host.docker.internal"
drop_capabilities = ["AUDIT_WRITE", "MKNOD", "NET_ADMIN", "NET_RAW", "SYS_ADMIN", "SYS_MODULE", "SYS_PTRACE", "SYS_TIME", "SYS_TTY_CONFIG"]
no_new_privileges = true
pids_limit = 512
[ingress]
mode = "direct"
...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx' ...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx'
x-plugin-auth-token: &x-plugin-auth-token 'token' x-plugin-auth-token: &x-plugin-auth-token 'token'
# code sandbox token # code sandbox token
x-code-sandbox-token: &x-code-sandbox-token 'codesandbox' x-code-sandbox-token: &x-code-sandbox-token 'codesandbox'
# volume manager auth token
x-volume-manager-auth-token: &x-volume-manager-auth-token 'vmtoken'
# aiproxy token # aiproxy token
x-aiproxy-token: &x-aiproxy-token 'token' x-aiproxy-token: &x-aiproxy-token 'token'
# 数据库连接相关配置 # 数据库连接相关配置
...@@ -63,7 +61,6 @@ services: ...@@ -63,7 +61,6 @@ services:
interval: 5s interval: 5s
timeout: 5s timeout: 5s
retries: 10 retries: 10
fastgpt-mongo: fastgpt-mongo:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29
container_name: fastgpt-mongo container_name: fastgpt-mongo
...@@ -151,14 +148,13 @@ services: ...@@ -151,14 +148,13 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.15.0-beta1
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
- data - data
- app - app
- codesandbox - codesandbox
- opensandbox
- aiproxy - aiproxy
depends_on: depends_on:
fastgpt-mongo: fastgpt-mongo:
...@@ -180,7 +176,7 @@ services: ...@@ -180,7 +176,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -209,20 +205,6 @@ services: ...@@ -209,20 +205,6 @@ services:
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY # AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
AIPROXY_API_TOKEN: *x-aiproxy-token AIPROXY_API_TOKEN: *x-aiproxy-token
# ==================== Agent sandbox 配置 ====================
AGENT_SANDBOX_PROVIDER: opensandbox
# OpenSandbox 配置(PROVIDER: opensandbox 时生效)
AGENT_SANDBOX_OPENSANDBOX_BASEURL: http://opensandbox-server:8090
AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
LOG_OTEL_SERVICE_NAME: fastgpt-client LOG_OTEL_SERVICE_NAME: fastgpt-client
...@@ -230,7 +212,7 @@ services: ...@@ -230,7 +212,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.15.0-beta1
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -269,17 +251,17 @@ services: ...@@ -269,17 +251,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.15.0-beta1
networks: networks:
- app - app
ports: ports:
...@@ -315,79 +297,9 @@ services: ...@@ -315,79 +297,9 @@ services:
timeout: 20s timeout: 20s
retries: 3 retries: 3
# 沙盒控制器:管理 Docker 容器的创建/执行/停止/删除
# runtime=docker 模式需要挂载 Docker socket
# 配置 docker.host_ip 为宿主机 LAN IP(容器内访问宿主机服务用)
opensandbox-server:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-server:v0.1.9
container_name: fastgpt-opensandbox-server
restart: always
networks:
- opensandbox
extra_hosts:
- 'host.docker.internal:host-gateway'
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
configs:
- source: opensandbox-config
target: /etc/opensandbox/config.toml
environment:
SANDBOX_CONFIG_PATH: /etc/opensandbox/config.toml
healthcheck:
test:
[
'CMD',
'python',
'-c',
'import urllib.request,sys; sys.exit(0 if urllib.request.urlopen("http://localhost:8090/health",timeout=3).status==200 else 1)'
]
interval: 10s
timeout: 5s
retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox:v0.1
profiles:
- prepull
opensandbox-execd-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-execd:v1.0.7
profiles:
- prepull
opensandbox-egress-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-egress:v1.0.3
profiles:
- prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-volume-manager:v0.1
container_name: fastgpt-volume-manager
restart: always
networks:
- opensandbox
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
environment:
PORT: 3000
VM_RUNTIME: docker
VM_AUTH_TOKEN: *x-volume-manager-auth-token # 对应 AGENT_SANDBOX_VOLUME_MANAGER_TOKEN
VM_VOLUME_NAME_PREFIX: fastgpt-session # volume 名称前缀
VM_LOG_LEVEL: info
VM_DOCKER_API_VERSION: v1.44
healthcheck:
test:
[
'CMD',
'bun',
'-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
]
interval: 10s
timeout: 5s
retries: 5
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.6 image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -438,8 +350,6 @@ networks: ...@@ -438,8 +350,6 @@ networks:
name: fastgpt_app name: fastgpt_app
codesandbox: codesandbox:
name: fastgpt_codesandbox name: fastgpt_codesandbox
opensandbox:
name: fastgpt_opensandbox
aiproxy: aiproxy:
name: fastgpt_aiproxy name: fastgpt_aiproxy
...@@ -456,31 +366,3 @@ volumes: ...@@ -456,31 +366,3 @@ volumes:
fastgpt-seekdb-data: fastgpt-seekdb-data:
fastgpt-seekdb-config: fastgpt-seekdb-config:
fastgpt-aiproxy_pg: fastgpt-aiproxy_pg:
configs:
opensandbox-config:
content: |
[server]
host = "0.0.0.0"
port = 8090
log_level = "INFO"
[runtime]
type = "docker"
execd_image = "registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-execd:v1.0.7"
[egress]
image = "registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-egress:v1.0.3"
[docker]
network_mode = "fastgpt_opensandbox"
# When server runs in a container, set host_ip to the host's IP or hostname so bridge-mode endpoints are reachable (e.g. host.docker.internal or the host LAN IP).
# It's required when server deployed with docker container under host.
host_ip = "host.docker.internal"
drop_capabilities = ["AUDIT_WRITE", "MKNOD", "NET_ADMIN", "NET_RAW", "SYS_ADMIN", "SYS_MODULE", "SYS_PTRACE", "SYS_TIME", "SYS_TTY_CONFIG"]
no_new_privileges = true
pids_limit = 512
[ingress]
mode = "direct"
...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx' ...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx'
x-plugin-auth-token: &x-plugin-auth-token 'token' x-plugin-auth-token: &x-plugin-auth-token 'token'
# code sandbox token # code sandbox token
x-code-sandbox-token: &x-code-sandbox-token 'codesandbox' x-code-sandbox-token: &x-code-sandbox-token 'codesandbox'
# volume manager auth token
x-volume-manager-auth-token: &x-volume-manager-auth-token 'vmtoken'
# aiproxy token # aiproxy token
x-aiproxy-token: &x-aiproxy-token 'token' x-aiproxy-token: &x-aiproxy-token 'token'
# 数据库连接相关配置 # 数据库连接相关配置
...@@ -43,7 +41,6 @@ x-log-config: &x-log-config ...@@ -43,7 +41,6 @@ x-log-config: &x-log-config
x-vec-config: &x-vec-config x-vec-config: &x-vec-config
SEEKDB_URL: mysql://root:seekdbpassword@fastgpt-vector:2881/mysql SEEKDB_URL: mysql://root:seekdbpassword@fastgpt-vector:2881/mysql
services: services:
# Vector DB # Vector DB
fastgpt-vector: fastgpt-vector:
...@@ -69,7 +66,6 @@ services: ...@@ -69,7 +66,6 @@ services:
timeout: 10s timeout: 10s
retries: 1000 retries: 1000
start_period: 10s start_period: 10s
fastgpt-mongo: fastgpt-mongo:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29
container_name: fastgpt-mongo container_name: fastgpt-mongo
...@@ -157,14 +153,13 @@ services: ...@@ -157,14 +153,13 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.15.0-beta1
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
- data - data
- app - app
- codesandbox - codesandbox
- opensandbox
- aiproxy - aiproxy
depends_on: depends_on:
fastgpt-mongo: fastgpt-mongo:
...@@ -186,7 +181,7 @@ services: ...@@ -186,7 +181,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -215,20 +210,6 @@ services: ...@@ -215,20 +210,6 @@ services:
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY # AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
AIPROXY_API_TOKEN: *x-aiproxy-token AIPROXY_API_TOKEN: *x-aiproxy-token
# ==================== Agent sandbox 配置 ====================
AGENT_SANDBOX_PROVIDER: opensandbox
# OpenSandbox 配置(PROVIDER: opensandbox 时生效)
AGENT_SANDBOX_OPENSANDBOX_BASEURL: http://opensandbox-server:8090
AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
LOG_OTEL_SERVICE_NAME: fastgpt-client LOG_OTEL_SERVICE_NAME: fastgpt-client
...@@ -236,7 +217,7 @@ services: ...@@ -236,7 +217,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.15.0-beta1
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -275,17 +256,17 @@ services: ...@@ -275,17 +256,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.15.0-beta1
networks: networks:
- app - app
ports: ports:
...@@ -321,79 +302,9 @@ services: ...@@ -321,79 +302,9 @@ services:
timeout: 20s timeout: 20s
retries: 3 retries: 3
# 沙盒控制器:管理 Docker 容器的创建/执行/停止/删除
# runtime=docker 模式需要挂载 Docker socket
# 配置 docker.host_ip 为宿主机 LAN IP(容器内访问宿主机服务用)
opensandbox-server:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-server:v0.1.9
container_name: fastgpt-opensandbox-server
restart: always
networks:
- opensandbox
extra_hosts:
- 'host.docker.internal:host-gateway'
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
configs:
- source: opensandbox-config
target: /etc/opensandbox/config.toml
environment:
SANDBOX_CONFIG_PATH: /etc/opensandbox/config.toml
healthcheck:
test:
[
'CMD',
'python',
'-c',
'import urllib.request,sys; sys.exit(0 if urllib.request.urlopen("http://localhost:8090/health",timeout=3).status==200 else 1)'
]
interval: 10s
timeout: 5s
retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox:v0.1
profiles:
- prepull
opensandbox-execd-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-execd:v1.0.7
profiles:
- prepull
opensandbox-egress-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-egress:v1.0.3
profiles:
- prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-volume-manager:v0.1
container_name: fastgpt-volume-manager
restart: always
networks:
- opensandbox
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
environment:
PORT: 3000
VM_RUNTIME: docker
VM_AUTH_TOKEN: *x-volume-manager-auth-token # 对应 AGENT_SANDBOX_VOLUME_MANAGER_TOKEN
VM_VOLUME_NAME_PREFIX: fastgpt-session # volume 名称前缀
VM_LOG_LEVEL: info
VM_DOCKER_API_VERSION: v1.44
healthcheck:
test:
[
'CMD',
'bun',
'-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
]
interval: 10s
timeout: 5s
retries: 5
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.6 image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -444,8 +355,6 @@ networks: ...@@ -444,8 +355,6 @@ networks:
name: fastgpt_app name: fastgpt_app
codesandbox: codesandbox:
name: fastgpt_codesandbox name: fastgpt_codesandbox
opensandbox:
name: fastgpt_opensandbox
aiproxy: aiproxy:
name: fastgpt_aiproxy name: fastgpt_aiproxy
...@@ -462,31 +371,3 @@ volumes: ...@@ -462,31 +371,3 @@ volumes:
fastgpt-seekdb-data: fastgpt-seekdb-data:
fastgpt-seekdb-config: fastgpt-seekdb-config:
fastgpt-aiproxy_pg: fastgpt-aiproxy_pg:
configs:
opensandbox-config:
content: |
[server]
host = "0.0.0.0"
port = 8090
log_level = "INFO"
[runtime]
type = "docker"
execd_image = "registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-execd:v1.0.7"
[egress]
image = "registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-egress:v1.0.3"
[docker]
network_mode = "fastgpt_opensandbox"
# When server runs in a container, set host_ip to the host's IP or hostname so bridge-mode endpoints are reachable (e.g. host.docker.internal or the host LAN IP).
# It's required when server deployed with docker container under host.
host_ip = "host.docker.internal"
drop_capabilities = ["AUDIT_WRITE", "MKNOD", "NET_ADMIN", "NET_RAW", "SYS_ADMIN", "SYS_MODULE", "SYS_PTRACE", "SYS_TIME", "SYS_TTY_CONFIG"]
no_new_privileges = true
pids_limit = 512
[ingress]
mode = "direct"
...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx' ...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx'
x-plugin-auth-token: &x-plugin-auth-token 'token' x-plugin-auth-token: &x-plugin-auth-token 'token'
# code sandbox token # code sandbox token
x-code-sandbox-token: &x-code-sandbox-token 'codesandbox' x-code-sandbox-token: &x-code-sandbox-token 'codesandbox'
# volume manager auth token
x-volume-manager-auth-token: &x-volume-manager-auth-token 'vmtoken'
# aiproxy token # aiproxy token
x-aiproxy-token: &x-aiproxy-token 'token' x-aiproxy-token: &x-aiproxy-token 'token'
# 数据库连接相关配置 # 数据库连接相关配置
...@@ -134,14 +132,13 @@ services: ...@@ -134,14 +132,13 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.15.0-beta1
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
- data - data
- app - app
- codesandbox - codesandbox
- opensandbox
- aiproxy - aiproxy
depends_on: depends_on:
fastgpt-mongo: fastgpt-mongo:
...@@ -163,7 +160,7 @@ services: ...@@ -163,7 +160,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -192,20 +189,6 @@ services: ...@@ -192,20 +189,6 @@ services:
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY # AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
AIPROXY_API_TOKEN: *x-aiproxy-token AIPROXY_API_TOKEN: *x-aiproxy-token
# ==================== Agent sandbox 配置 ====================
AGENT_SANDBOX_PROVIDER: opensandbox
# OpenSandbox 配置(PROVIDER: opensandbox 时生效)
AGENT_SANDBOX_OPENSANDBOX_BASEURL: http://opensandbox-server:8090
AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
LOG_OTEL_SERVICE_NAME: fastgpt-client LOG_OTEL_SERVICE_NAME: fastgpt-client
...@@ -213,7 +196,7 @@ services: ...@@ -213,7 +196,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.15.0-beta1
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -252,17 +235,17 @@ services: ...@@ -252,17 +235,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.15.0-beta1
networks: networks:
- app - app
ports: ports:
...@@ -298,79 +281,9 @@ services: ...@@ -298,79 +281,9 @@ services:
timeout: 20s timeout: 20s
retries: 3 retries: 3
# 沙盒控制器:管理 Docker 容器的创建/执行/停止/删除
# runtime=docker 模式需要挂载 Docker socket
# 配置 docker.host_ip 为宿主机 LAN IP(容器内访问宿主机服务用)
opensandbox-server:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-server:v0.1.9
container_name: fastgpt-opensandbox-server
restart: always
networks:
- opensandbox
extra_hosts:
- 'host.docker.internal:host-gateway'
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
configs:
- source: opensandbox-config
target: /etc/opensandbox/config.toml
environment:
SANDBOX_CONFIG_PATH: /etc/opensandbox/config.toml
healthcheck:
test:
[
'CMD',
'python',
'-c',
'import urllib.request,sys; sys.exit(0 if urllib.request.urlopen("http://localhost:8090/health",timeout=3).status==200 else 1)'
]
interval: 10s
timeout: 5s
retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox:v0.1
profiles:
- prepull
opensandbox-execd-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-execd:v1.0.7
profiles:
- prepull
opensandbox-egress-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-egress:v1.0.3
profiles:
- prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-volume-manager:v0.1
container_name: fastgpt-volume-manager
restart: always
networks:
- opensandbox
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
environment:
PORT: 3000
VM_RUNTIME: docker
VM_AUTH_TOKEN: *x-volume-manager-auth-token # 对应 AGENT_SANDBOX_VOLUME_MANAGER_TOKEN
VM_VOLUME_NAME_PREFIX: fastgpt-session # volume 名称前缀
VM_LOG_LEVEL: info
VM_DOCKER_API_VERSION: v1.44
healthcheck:
test:
[
'CMD',
'bun',
'-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
]
interval: 10s
timeout: 5s
retries: 5
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.6 image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -421,8 +334,6 @@ networks: ...@@ -421,8 +334,6 @@ networks:
name: fastgpt_app name: fastgpt_app
codesandbox: codesandbox:
name: fastgpt_codesandbox name: fastgpt_codesandbox
opensandbox:
name: fastgpt_opensandbox
aiproxy: aiproxy:
name: fastgpt_aiproxy name: fastgpt_aiproxy
...@@ -439,31 +350,3 @@ volumes: ...@@ -439,31 +350,3 @@ volumes:
fastgpt-seekdb-data: fastgpt-seekdb-data:
fastgpt-seekdb-config: fastgpt-seekdb-config:
fastgpt-aiproxy_pg: fastgpt-aiproxy_pg:
configs:
opensandbox-config:
content: |
[server]
host = "0.0.0.0"
port = 8090
log_level = "INFO"
[runtime]
type = "docker"
execd_image = "registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-execd:v1.0.7"
[egress]
image = "registry.cn-hangzhou.aliyuncs.com/fastgpt/opensandbox-egress:v1.0.3"
[docker]
network_mode = "fastgpt_opensandbox"
# When server runs in a container, set host_ip to the host's IP or hostname so bridge-mode endpoints are reachable (e.g. host.docker.internal or the host LAN IP).
# It's required when server deployed with docker container under host.
host_ip = "host.docker.internal"
drop_capabilities = ["AUDIT_WRITE", "MKNOD", "NET_ADMIN", "NET_RAW", "SYS_ADMIN", "SYS_MODULE", "SYS_PTRACE", "SYS_TIME", "SYS_TTY_CONFIG"]
no_new_privileges = true
pids_limit = 512
[ingress]
mode = "direct"
...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx' ...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx'
x-plugin-auth-token: &x-plugin-auth-token 'token' x-plugin-auth-token: &x-plugin-auth-token 'token'
# code sandbox token # code sandbox token
x-code-sandbox-token: &x-code-sandbox-token 'codesandbox' x-code-sandbox-token: &x-code-sandbox-token 'codesandbox'
# volume manager auth token
x-volume-manager-auth-token: &x-volume-manager-auth-token 'vmtoken'
# aiproxy token # aiproxy token
x-aiproxy-token: &x-aiproxy-token 'token' x-aiproxy-token: &x-aiproxy-token 'token'
# 数据库连接相关配置 # 数据库连接相关配置
...@@ -43,7 +41,6 @@ x-log-config: &x-log-config ...@@ -43,7 +41,6 @@ x-log-config: &x-log-config
x-vec-config: &x-vec-config x-vec-config: &x-vec-config
MILVUS_ADDRESS: http://fastgpt-vector:19530 MILVUS_ADDRESS: http://fastgpt-vector:19530
MILVUS_TOKEN: none MILVUS_TOKEN: none
services: services:
# Vector DB # Vector DB
...@@ -104,7 +101,6 @@ services: ...@@ -104,7 +101,6 @@ services:
depends_on: depends_on:
- 'fastgpt-milvus-etcd' - 'fastgpt-milvus-etcd'
- 'fastgpt-milvus-minio' - 'fastgpt-milvus-minio'
fastgpt-mongo: fastgpt-mongo:
image: mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29 image: mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29
container_name: fastgpt-mongo container_name: fastgpt-mongo
...@@ -192,14 +188,13 @@ services: ...@@ -192,14 +188,13 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: ghcr.io/labring/fastgpt:v4.14.20 image: ghcr.io/labring/fastgpt:v4.15.0-beta1
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
- data - data
- app - app
- codesandbox - codesandbox
- opensandbox
- aiproxy - aiproxy
depends_on: depends_on:
fastgpt-mongo: fastgpt-mongo:
...@@ -221,7 +216,7 @@ services: ...@@ -221,7 +216,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -250,20 +245,6 @@ services: ...@@ -250,20 +245,6 @@ services:
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY # AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
AIPROXY_API_TOKEN: *x-aiproxy-token AIPROXY_API_TOKEN: *x-aiproxy-token
# ==================== Agent sandbox 配置 ====================
AGENT_SANDBOX_PROVIDER: opensandbox
# OpenSandbox 配置(PROVIDER: opensandbox 时生效)
AGENT_SANDBOX_OPENSANDBOX_BASEURL: http://opensandbox-server:8090
AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: ghcr.io/labring/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
LOG_OTEL_SERVICE_NAME: fastgpt-client LOG_OTEL_SERVICE_NAME: fastgpt-client
...@@ -271,7 +252,7 @@ services: ...@@ -271,7 +252,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: ghcr.io/labring/fastgpt-code-sandbox:v4.14.20 image: ghcr.io/labring/fastgpt-code-sandbox:v4.15.0-beta1
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -310,17 +291,17 @@ services: ...@@ -310,17 +291,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: ghcr.io/labring/fastgpt-mcp_server:v4.14.20 image: ghcr.io/labring/fastgpt-mcp_server:v4.15.0-beta1
networks: networks:
- app - app
ports: ports:
...@@ -356,79 +337,9 @@ services: ...@@ -356,79 +337,9 @@ services:
timeout: 20s timeout: 20s
retries: 3 retries: 3
# 沙盒控制器:管理 Docker 容器的创建/执行/停止/删除
# runtime=docker 模式需要挂载 Docker socket
# 配置 docker.host_ip 为宿主机 LAN IP(容器内访问宿主机服务用)
opensandbox-server:
image: opensandbox/server:v0.1.9
container_name: fastgpt-opensandbox-server
restart: always
networks:
- opensandbox
extra_hosts:
- 'host.docker.internal:host-gateway'
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
configs:
- source: opensandbox-config
target: /etc/opensandbox/config.toml
environment:
SANDBOX_CONFIG_PATH: /etc/opensandbox/config.toml
healthcheck:
test:
[
'CMD',
'python',
'-c',
'import urllib.request,sys; sys.exit(0 if urllib.request.urlopen("http://localhost:8090/health",timeout=3).status==200 else 1)'
]
interval: 10s
timeout: 5s
retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image:
image: ghcr.io/labring/fastgpt-agent-sandbox:v0.1
profiles:
- prepull
opensandbox-execd-image:
image: opensandbox/execd:v1.0.7
profiles:
- prepull
opensandbox-egress-image:
image: opensandbox/egress:v1.0.3
profiles:
- prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager:
image: ghcr.io/labring/fastgpt-agent-volume-manager:v0.1
container_name: fastgpt-volume-manager
restart: always
networks:
- opensandbox
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
environment:
PORT: 3000
VM_RUNTIME: docker
VM_AUTH_TOKEN: *x-volume-manager-auth-token # 对应 AGENT_SANDBOX_VOLUME_MANAGER_TOKEN
VM_VOLUME_NAME_PREFIX: fastgpt-session # volume 名称前缀
VM_LOG_LEVEL: info
VM_DOCKER_API_VERSION: v1.44
healthcheck:
test:
[
'CMD',
'bun',
'-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
]
interval: 10s
timeout: 5s
retries: 5
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: ghcr.io/labring/aiproxy:v0.5.6 image: ghcr.io/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -479,8 +390,6 @@ networks: ...@@ -479,8 +390,6 @@ networks:
name: fastgpt_app name: fastgpt_app
codesandbox: codesandbox:
name: fastgpt_codesandbox name: fastgpt_codesandbox
opensandbox:
name: fastgpt_opensandbox
aiproxy: aiproxy:
name: fastgpt_aiproxy name: fastgpt_aiproxy
...@@ -497,31 +406,3 @@ volumes: ...@@ -497,31 +406,3 @@ volumes:
fastgpt-seekdb-data: fastgpt-seekdb-data:
fastgpt-seekdb-config: fastgpt-seekdb-config:
fastgpt-aiproxy_pg: fastgpt-aiproxy_pg:
configs:
opensandbox-config:
content: |
[server]
host = "0.0.0.0"
port = 8090
log_level = "INFO"
[runtime]
type = "docker"
execd_image = "opensandbox/execd:v1.0.7"
[egress]
image = "opensandbox/egress:v1.0.3"
[docker]
network_mode = "fastgpt_opensandbox"
# When server runs in a container, set host_ip to the host's IP or hostname so bridge-mode endpoints are reachable (e.g. host.docker.internal or the host LAN IP).
# It's required when server deployed with docker container under host.
host_ip = "host.docker.internal"
drop_capabilities = ["AUDIT_WRITE", "MKNOD", "NET_ADMIN", "NET_RAW", "SYS_ADMIN", "SYS_MODULE", "SYS_PTRACE", "SYS_TIME", "SYS_TTY_CONFIG"]
no_new_privileges = true
pids_limit = 512
[ingress]
mode = "direct"
...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx' ...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx'
x-plugin-auth-token: &x-plugin-auth-token 'token' x-plugin-auth-token: &x-plugin-auth-token 'token'
# code sandbox token # code sandbox token
x-code-sandbox-token: &x-code-sandbox-token 'codesandbox' x-code-sandbox-token: &x-code-sandbox-token 'codesandbox'
# volume manager auth token
x-volume-manager-auth-token: &x-volume-manager-auth-token 'vmtoken'
# aiproxy token # aiproxy token
x-aiproxy-token: &x-aiproxy-token 'token' x-aiproxy-token: &x-aiproxy-token 'token'
# 数据库连接相关配置 # 数据库连接相关配置
...@@ -43,7 +41,6 @@ x-log-config: &x-log-config ...@@ -43,7 +41,6 @@ x-log-config: &x-log-config
x-vec-config: &x-vec-config x-vec-config: &x-vec-config
OCEANBASE_URL: mysql://root%40tenantname:tenantpassword@fastgpt-vector:2881/mysql OCEANBASE_URL: mysql://root%40tenantname:tenantpassword@fastgpt-vector:2881/mysql
services: services:
# Vector DB # Vector DB
fastgpt-vector: fastgpt-vector:
...@@ -82,7 +79,6 @@ services: ...@@ -82,7 +79,6 @@ services:
timeout: 10s timeout: 10s
retries: 1000 retries: 1000
start_period: 10s start_period: 10s
fastgpt-mongo: fastgpt-mongo:
image: mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29 image: mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29
container_name: fastgpt-mongo container_name: fastgpt-mongo
...@@ -170,14 +166,13 @@ services: ...@@ -170,14 +166,13 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: ghcr.io/labring/fastgpt:v4.14.20 image: ghcr.io/labring/fastgpt:v4.15.0-beta1
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
- data - data
- app - app
- codesandbox - codesandbox
- opensandbox
- aiproxy - aiproxy
depends_on: depends_on:
fastgpt-mongo: fastgpt-mongo:
...@@ -199,7 +194,7 @@ services: ...@@ -199,7 +194,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -228,20 +223,6 @@ services: ...@@ -228,20 +223,6 @@ services:
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY # AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
AIPROXY_API_TOKEN: *x-aiproxy-token AIPROXY_API_TOKEN: *x-aiproxy-token
# ==================== Agent sandbox 配置 ====================
AGENT_SANDBOX_PROVIDER: opensandbox
# OpenSandbox 配置(PROVIDER: opensandbox 时生效)
AGENT_SANDBOX_OPENSANDBOX_BASEURL: http://opensandbox-server:8090
AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: ghcr.io/labring/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
LOG_OTEL_SERVICE_NAME: fastgpt-client LOG_OTEL_SERVICE_NAME: fastgpt-client
...@@ -249,7 +230,7 @@ services: ...@@ -249,7 +230,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: ghcr.io/labring/fastgpt-code-sandbox:v4.14.20 image: ghcr.io/labring/fastgpt-code-sandbox:v4.15.0-beta1
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -288,17 +269,17 @@ services: ...@@ -288,17 +269,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: ghcr.io/labring/fastgpt-mcp_server:v4.14.20 image: ghcr.io/labring/fastgpt-mcp_server:v4.15.0-beta1
networks: networks:
- app - app
ports: ports:
...@@ -334,79 +315,9 @@ services: ...@@ -334,79 +315,9 @@ services:
timeout: 20s timeout: 20s
retries: 3 retries: 3
# 沙盒控制器:管理 Docker 容器的创建/执行/停止/删除
# runtime=docker 模式需要挂载 Docker socket
# 配置 docker.host_ip 为宿主机 LAN IP(容器内访问宿主机服务用)
opensandbox-server:
image: opensandbox/server:v0.1.9
container_name: fastgpt-opensandbox-server
restart: always
networks:
- opensandbox
extra_hosts:
- 'host.docker.internal:host-gateway'
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
configs:
- source: opensandbox-config
target: /etc/opensandbox/config.toml
environment:
SANDBOX_CONFIG_PATH: /etc/opensandbox/config.toml
healthcheck:
test:
[
'CMD',
'python',
'-c',
'import urllib.request,sys; sys.exit(0 if urllib.request.urlopen("http://localhost:8090/health",timeout=3).status==200 else 1)'
]
interval: 10s
timeout: 5s
retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image:
image: ghcr.io/labring/fastgpt-agent-sandbox:v0.1
profiles:
- prepull
opensandbox-execd-image:
image: opensandbox/execd:v1.0.7
profiles:
- prepull
opensandbox-egress-image:
image: opensandbox/egress:v1.0.3
profiles:
- prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager:
image: ghcr.io/labring/fastgpt-agent-volume-manager:v0.1
container_name: fastgpt-volume-manager
restart: always
networks:
- opensandbox
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
environment:
PORT: 3000
VM_RUNTIME: docker
VM_AUTH_TOKEN: *x-volume-manager-auth-token # 对应 AGENT_SANDBOX_VOLUME_MANAGER_TOKEN
VM_VOLUME_NAME_PREFIX: fastgpt-session # volume 名称前缀
VM_LOG_LEVEL: info
VM_DOCKER_API_VERSION: v1.44
healthcheck:
test:
[
'CMD',
'bun',
'-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
]
interval: 10s
timeout: 5s
retries: 5
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: ghcr.io/labring/aiproxy:v0.5.6 image: ghcr.io/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -457,8 +368,6 @@ networks: ...@@ -457,8 +368,6 @@ networks:
name: fastgpt_app name: fastgpt_app
codesandbox: codesandbox:
name: fastgpt_codesandbox name: fastgpt_codesandbox
opensandbox:
name: fastgpt_opensandbox
aiproxy: aiproxy:
name: fastgpt_aiproxy name: fastgpt_aiproxy
...@@ -477,33 +386,7 @@ volumes: ...@@ -477,33 +386,7 @@ volumes:
fastgpt-aiproxy_pg: fastgpt-aiproxy_pg:
configs: configs:
opensandbox-config:
content: |
[server]
host = "0.0.0.0"
port = 8090
log_level = "INFO"
[runtime]
type = "docker"
execd_image = "opensandbox/execd:v1.0.7"
[egress]
image = "opensandbox/egress:v1.0.3"
[docker]
network_mode = "fastgpt_opensandbox"
# When server runs in a container, set host_ip to the host's IP or hostname so bridge-mode endpoints are reachable (e.g. host.docker.internal or the host LAN IP).
# It's required when server deployed with docker container under host.
host_ip = "host.docker.internal"
drop_capabilities = ["AUDIT_WRITE", "MKNOD", "NET_ADMIN", "NET_RAW", "SYS_ADMIN", "SYS_MODULE", "SYS_PTRACE", "SYS_TIME", "SYS_TTY_CONFIG"]
no_new_privileges = true
pids_limit = 512
[ingress]
mode = "direct"
init_sql: init_sql:
name: init_sql name: init_sql
content: | content: |
ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30; ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30;
...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx' ...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx'
x-plugin-auth-token: &x-plugin-auth-token 'token' x-plugin-auth-token: &x-plugin-auth-token 'token'
# code sandbox token # code sandbox token
x-code-sandbox-token: &x-code-sandbox-token 'codesandbox' x-code-sandbox-token: &x-code-sandbox-token 'codesandbox'
# volume manager auth token
x-volume-manager-auth-token: &x-volume-manager-auth-token 'vmtoken'
# aiproxy token # aiproxy token
x-aiproxy-token: &x-aiproxy-token 'token' x-aiproxy-token: &x-aiproxy-token 'token'
# 数据库连接相关配置 # 数据库连接相关配置
...@@ -152,14 +150,13 @@ services: ...@@ -152,14 +150,13 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: ghcr.io/labring/fastgpt:v4.14.20 image: ghcr.io/labring/fastgpt:v4.15.0-beta1
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
- data - data
- app - app
- codesandbox - codesandbox
- opensandbox
- aiproxy - aiproxy
depends_on: depends_on:
fastgpt-mongo: fastgpt-mongo:
...@@ -181,7 +178,7 @@ services: ...@@ -181,7 +178,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -210,20 +207,6 @@ services: ...@@ -210,20 +207,6 @@ services:
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY # AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
AIPROXY_API_TOKEN: *x-aiproxy-token AIPROXY_API_TOKEN: *x-aiproxy-token
# ==================== Agent sandbox 配置 ====================
AGENT_SANDBOX_PROVIDER: opensandbox
# OpenSandbox 配置(PROVIDER: opensandbox 时生效)
AGENT_SANDBOX_OPENSANDBOX_BASEURL: http://opensandbox-server:8090
AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: ghcr.io/labring/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
LOG_OTEL_SERVICE_NAME: fastgpt-client LOG_OTEL_SERVICE_NAME: fastgpt-client
...@@ -231,7 +214,7 @@ services: ...@@ -231,7 +214,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: ghcr.io/labring/fastgpt-code-sandbox:v4.14.20 image: ghcr.io/labring/fastgpt-code-sandbox:v4.15.0-beta1
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -270,17 +253,17 @@ services: ...@@ -270,17 +253,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: ghcr.io/labring/fastgpt-mcp_server:v4.14.20 image: ghcr.io/labring/fastgpt-mcp_server:v4.15.0-beta1
networks: networks:
- app - app
ports: ports:
...@@ -316,79 +299,9 @@ services: ...@@ -316,79 +299,9 @@ services:
timeout: 20s timeout: 20s
retries: 3 retries: 3
# 沙盒控制器:管理 Docker 容器的创建/执行/停止/删除
# runtime=docker 模式需要挂载 Docker socket
# 配置 docker.host_ip 为宿主机 LAN IP(容器内访问宿主机服务用)
opensandbox-server:
image: opensandbox/server:v0.1.9
container_name: fastgpt-opensandbox-server
restart: always
networks:
- opensandbox
extra_hosts:
- 'host.docker.internal:host-gateway'
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
configs:
- source: opensandbox-config
target: /etc/opensandbox/config.toml
environment:
SANDBOX_CONFIG_PATH: /etc/opensandbox/config.toml
healthcheck:
test:
[
'CMD',
'python',
'-c',
'import urllib.request,sys; sys.exit(0 if urllib.request.urlopen("http://localhost:8090/health",timeout=3).status==200 else 1)'
]
interval: 10s
timeout: 5s
retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image:
image: ghcr.io/labring/fastgpt-agent-sandbox:v0.1
profiles:
- prepull
opensandbox-execd-image:
image: opensandbox/execd:v1.0.7
profiles:
- prepull
opensandbox-egress-image:
image: opensandbox/egress:v1.0.3
profiles:
- prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager:
image: ghcr.io/labring/fastgpt-agent-volume-manager:v0.1
container_name: fastgpt-volume-manager
restart: always
networks:
- opensandbox
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
environment:
PORT: 3000
VM_RUNTIME: docker
VM_AUTH_TOKEN: *x-volume-manager-auth-token # 对应 AGENT_SANDBOX_VOLUME_MANAGER_TOKEN
VM_VOLUME_NAME_PREFIX: fastgpt-session # volume 名称前缀
VM_LOG_LEVEL: info
VM_DOCKER_API_VERSION: v1.44
healthcheck:
test:
[
'CMD',
'bun',
'-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
]
interval: 10s
timeout: 5s
retries: 5
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: ghcr.io/labring/aiproxy:v0.5.6 image: ghcr.io/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -439,8 +352,6 @@ networks: ...@@ -439,8 +352,6 @@ networks:
name: fastgpt_app name: fastgpt_app
codesandbox: codesandbox:
name: fastgpt_codesandbox name: fastgpt_codesandbox
opensandbox:
name: fastgpt_opensandbox
aiproxy: aiproxy:
name: fastgpt_aiproxy name: fastgpt_aiproxy
...@@ -457,31 +368,3 @@ volumes: ...@@ -457,31 +368,3 @@ volumes:
fastgpt-seekdb-data: fastgpt-seekdb-data:
fastgpt-seekdb-config: fastgpt-seekdb-config:
fastgpt-aiproxy_pg: fastgpt-aiproxy_pg:
configs:
opensandbox-config:
content: |
[server]
host = "0.0.0.0"
port = 8090
log_level = "INFO"
[runtime]
type = "docker"
execd_image = "opensandbox/execd:v1.0.7"
[egress]
image = "opensandbox/egress:v1.0.3"
[docker]
network_mode = "fastgpt_opensandbox"
# When server runs in a container, set host_ip to the host's IP or hostname so bridge-mode endpoints are reachable (e.g. host.docker.internal or the host LAN IP).
# It's required when server deployed with docker container under host.
host_ip = "host.docker.internal"
drop_capabilities = ["AUDIT_WRITE", "MKNOD", "NET_ADMIN", "NET_RAW", "SYS_ADMIN", "SYS_MODULE", "SYS_PTRACE", "SYS_TIME", "SYS_TTY_CONFIG"]
no_new_privileges = true
pids_limit = 512
[ingress]
mode = "direct"
...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx' ...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx'
x-plugin-auth-token: &x-plugin-auth-token 'token' x-plugin-auth-token: &x-plugin-auth-token 'token'
# code sandbox token # code sandbox token
x-code-sandbox-token: &x-code-sandbox-token 'codesandbox' x-code-sandbox-token: &x-code-sandbox-token 'codesandbox'
# volume manager auth token
x-volume-manager-auth-token: &x-volume-manager-auth-token 'vmtoken'
# aiproxy token # aiproxy token
x-aiproxy-token: &x-aiproxy-token 'token' x-aiproxy-token: &x-aiproxy-token 'token'
# 数据库连接相关配置 # 数据库连接相关配置
...@@ -63,7 +61,6 @@ services: ...@@ -63,7 +61,6 @@ services:
interval: 5s interval: 5s
timeout: 5s timeout: 5s
retries: 10 retries: 10
fastgpt-mongo: fastgpt-mongo:
image: mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29 image: mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29
container_name: fastgpt-mongo container_name: fastgpt-mongo
...@@ -151,14 +148,13 @@ services: ...@@ -151,14 +148,13 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: ghcr.io/labring/fastgpt:v4.14.20 image: ghcr.io/labring/fastgpt:v4.15.0-beta1
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
- data - data
- app - app
- codesandbox - codesandbox
- opensandbox
- aiproxy - aiproxy
depends_on: depends_on:
fastgpt-mongo: fastgpt-mongo:
...@@ -180,7 +176,7 @@ services: ...@@ -180,7 +176,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -209,20 +205,6 @@ services: ...@@ -209,20 +205,6 @@ services:
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY # AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
AIPROXY_API_TOKEN: *x-aiproxy-token AIPROXY_API_TOKEN: *x-aiproxy-token
# ==================== Agent sandbox 配置 ====================
AGENT_SANDBOX_PROVIDER: opensandbox
# OpenSandbox 配置(PROVIDER: opensandbox 时生效)
AGENT_SANDBOX_OPENSANDBOX_BASEURL: http://opensandbox-server:8090
AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: ghcr.io/labring/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
LOG_OTEL_SERVICE_NAME: fastgpt-client LOG_OTEL_SERVICE_NAME: fastgpt-client
...@@ -230,7 +212,7 @@ services: ...@@ -230,7 +212,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: ghcr.io/labring/fastgpt-code-sandbox:v4.14.20 image: ghcr.io/labring/fastgpt-code-sandbox:v4.15.0-beta1
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -269,17 +251,17 @@ services: ...@@ -269,17 +251,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: ghcr.io/labring/fastgpt-mcp_server:v4.14.20 image: ghcr.io/labring/fastgpt-mcp_server:v4.15.0-beta1
networks: networks:
- app - app
ports: ports:
...@@ -315,79 +297,9 @@ services: ...@@ -315,79 +297,9 @@ services:
timeout: 20s timeout: 20s
retries: 3 retries: 3
# 沙盒控制器:管理 Docker 容器的创建/执行/停止/删除
# runtime=docker 模式需要挂载 Docker socket
# 配置 docker.host_ip 为宿主机 LAN IP(容器内访问宿主机服务用)
opensandbox-server:
image: opensandbox/server:v0.1.9
container_name: fastgpt-opensandbox-server
restart: always
networks:
- opensandbox
extra_hosts:
- 'host.docker.internal:host-gateway'
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
configs:
- source: opensandbox-config
target: /etc/opensandbox/config.toml
environment:
SANDBOX_CONFIG_PATH: /etc/opensandbox/config.toml
healthcheck:
test:
[
'CMD',
'python',
'-c',
'import urllib.request,sys; sys.exit(0 if urllib.request.urlopen("http://localhost:8090/health",timeout=3).status==200 else 1)'
]
interval: 10s
timeout: 5s
retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image:
image: ghcr.io/labring/fastgpt-agent-sandbox:v0.1
profiles:
- prepull
opensandbox-execd-image:
image: opensandbox/execd:v1.0.7
profiles:
- prepull
opensandbox-egress-image:
image: opensandbox/egress:v1.0.3
profiles:
- prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager:
image: ghcr.io/labring/fastgpt-agent-volume-manager:v0.1
container_name: fastgpt-volume-manager
restart: always
networks:
- opensandbox
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
environment:
PORT: 3000
VM_RUNTIME: docker
VM_AUTH_TOKEN: *x-volume-manager-auth-token # 对应 AGENT_SANDBOX_VOLUME_MANAGER_TOKEN
VM_VOLUME_NAME_PREFIX: fastgpt-session # volume 名称前缀
VM_LOG_LEVEL: info
VM_DOCKER_API_VERSION: v1.44
healthcheck:
test:
[
'CMD',
'bun',
'-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
]
interval: 10s
timeout: 5s
retries: 5
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: ghcr.io/labring/aiproxy:v0.5.6 image: ghcr.io/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -438,8 +350,6 @@ networks: ...@@ -438,8 +350,6 @@ networks:
name: fastgpt_app name: fastgpt_app
codesandbox: codesandbox:
name: fastgpt_codesandbox name: fastgpt_codesandbox
opensandbox:
name: fastgpt_opensandbox
aiproxy: aiproxy:
name: fastgpt_aiproxy name: fastgpt_aiproxy
...@@ -456,31 +366,3 @@ volumes: ...@@ -456,31 +366,3 @@ volumes:
fastgpt-seekdb-data: fastgpt-seekdb-data:
fastgpt-seekdb-config: fastgpt-seekdb-config:
fastgpt-aiproxy_pg: fastgpt-aiproxy_pg:
configs:
opensandbox-config:
content: |
[server]
host = "0.0.0.0"
port = 8090
log_level = "INFO"
[runtime]
type = "docker"
execd_image = "opensandbox/execd:v1.0.7"
[egress]
image = "opensandbox/egress:v1.0.3"
[docker]
network_mode = "fastgpt_opensandbox"
# When server runs in a container, set host_ip to the host's IP or hostname so bridge-mode endpoints are reachable (e.g. host.docker.internal or the host LAN IP).
# It's required when server deployed with docker container under host.
host_ip = "host.docker.internal"
drop_capabilities = ["AUDIT_WRITE", "MKNOD", "NET_ADMIN", "NET_RAW", "SYS_ADMIN", "SYS_MODULE", "SYS_PTRACE", "SYS_TIME", "SYS_TTY_CONFIG"]
no_new_privileges = true
pids_limit = 512
[ingress]
mode = "direct"
...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx' ...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx'
x-plugin-auth-token: &x-plugin-auth-token 'token' x-plugin-auth-token: &x-plugin-auth-token 'token'
# code sandbox token # code sandbox token
x-code-sandbox-token: &x-code-sandbox-token 'codesandbox' x-code-sandbox-token: &x-code-sandbox-token 'codesandbox'
# volume manager auth token
x-volume-manager-auth-token: &x-volume-manager-auth-token 'vmtoken'
# aiproxy token # aiproxy token
x-aiproxy-token: &x-aiproxy-token 'token' x-aiproxy-token: &x-aiproxy-token 'token'
# 数据库连接相关配置 # 数据库连接相关配置
...@@ -43,7 +41,6 @@ x-log-config: &x-log-config ...@@ -43,7 +41,6 @@ x-log-config: &x-log-config
x-vec-config: &x-vec-config x-vec-config: &x-vec-config
SEEKDB_URL: mysql://root:seekdbpassword@fastgpt-vector:2881/mysql SEEKDB_URL: mysql://root:seekdbpassword@fastgpt-vector:2881/mysql
services: services:
# Vector DB # Vector DB
fastgpt-vector: fastgpt-vector:
...@@ -69,7 +66,6 @@ services: ...@@ -69,7 +66,6 @@ services:
timeout: 10s timeout: 10s
retries: 1000 retries: 1000
start_period: 10s start_period: 10s
fastgpt-mongo: fastgpt-mongo:
image: mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29 image: mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29
container_name: fastgpt-mongo container_name: fastgpt-mongo
...@@ -157,14 +153,13 @@ services: ...@@ -157,14 +153,13 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: ghcr.io/labring/fastgpt:v4.14.20 image: ghcr.io/labring/fastgpt:v4.15.0-beta1
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
- data - data
- app - app
- codesandbox - codesandbox
- opensandbox
- aiproxy - aiproxy
depends_on: depends_on:
fastgpt-mongo: fastgpt-mongo:
...@@ -186,7 +181,7 @@ services: ...@@ -186,7 +181,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -215,20 +210,6 @@ services: ...@@ -215,20 +210,6 @@ services:
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY # AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
AIPROXY_API_TOKEN: *x-aiproxy-token AIPROXY_API_TOKEN: *x-aiproxy-token
# ==================== Agent sandbox 配置 ====================
AGENT_SANDBOX_PROVIDER: opensandbox
# OpenSandbox 配置(PROVIDER: opensandbox 时生效)
AGENT_SANDBOX_OPENSANDBOX_BASEURL: http://opensandbox-server:8090
AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: ghcr.io/labring/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
LOG_OTEL_SERVICE_NAME: fastgpt-client LOG_OTEL_SERVICE_NAME: fastgpt-client
...@@ -236,7 +217,7 @@ services: ...@@ -236,7 +217,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: ghcr.io/labring/fastgpt-code-sandbox:v4.14.20 image: ghcr.io/labring/fastgpt-code-sandbox:v4.15.0-beta1
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -275,17 +256,17 @@ services: ...@@ -275,17 +256,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: ghcr.io/labring/fastgpt-mcp_server:v4.14.20 image: ghcr.io/labring/fastgpt-mcp_server:v4.15.0-beta1
networks: networks:
- app - app
ports: ports:
...@@ -321,79 +302,9 @@ services: ...@@ -321,79 +302,9 @@ services:
timeout: 20s timeout: 20s
retries: 3 retries: 3
# 沙盒控制器:管理 Docker 容器的创建/执行/停止/删除
# runtime=docker 模式需要挂载 Docker socket
# 配置 docker.host_ip 为宿主机 LAN IP(容器内访问宿主机服务用)
opensandbox-server:
image: opensandbox/server:v0.1.9
container_name: fastgpt-opensandbox-server
restart: always
networks:
- opensandbox
extra_hosts:
- 'host.docker.internal:host-gateway'
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
configs:
- source: opensandbox-config
target: /etc/opensandbox/config.toml
environment:
SANDBOX_CONFIG_PATH: /etc/opensandbox/config.toml
healthcheck:
test:
[
'CMD',
'python',
'-c',
'import urllib.request,sys; sys.exit(0 if urllib.request.urlopen("http://localhost:8090/health",timeout=3).status==200 else 1)'
]
interval: 10s
timeout: 5s
retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image:
image: ghcr.io/labring/fastgpt-agent-sandbox:v0.1
profiles:
- prepull
opensandbox-execd-image:
image: opensandbox/execd:v1.0.7
profiles:
- prepull
opensandbox-egress-image:
image: opensandbox/egress:v1.0.3
profiles:
- prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager:
image: ghcr.io/labring/fastgpt-agent-volume-manager:v0.1
container_name: fastgpt-volume-manager
restart: always
networks:
- opensandbox
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
environment:
PORT: 3000
VM_RUNTIME: docker
VM_AUTH_TOKEN: *x-volume-manager-auth-token # 对应 AGENT_SANDBOX_VOLUME_MANAGER_TOKEN
VM_VOLUME_NAME_PREFIX: fastgpt-session # volume 名称前缀
VM_LOG_LEVEL: info
VM_DOCKER_API_VERSION: v1.44
healthcheck:
test:
[
'CMD',
'bun',
'-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
]
interval: 10s
timeout: 5s
retries: 5
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: ghcr.io/labring/aiproxy:v0.5.6 image: ghcr.io/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -444,8 +355,6 @@ networks: ...@@ -444,8 +355,6 @@ networks:
name: fastgpt_app name: fastgpt_app
codesandbox: codesandbox:
name: fastgpt_codesandbox name: fastgpt_codesandbox
opensandbox:
name: fastgpt_opensandbox
aiproxy: aiproxy:
name: fastgpt_aiproxy name: fastgpt_aiproxy
...@@ -462,31 +371,3 @@ volumes: ...@@ -462,31 +371,3 @@ volumes:
fastgpt-seekdb-data: fastgpt-seekdb-data:
fastgpt-seekdb-config: fastgpt-seekdb-config:
fastgpt-aiproxy_pg: fastgpt-aiproxy_pg:
configs:
opensandbox-config:
content: |
[server]
host = "0.0.0.0"
port = 8090
log_level = "INFO"
[runtime]
type = "docker"
execd_image = "opensandbox/execd:v1.0.7"
[egress]
image = "opensandbox/egress:v1.0.3"
[docker]
network_mode = "fastgpt_opensandbox"
# When server runs in a container, set host_ip to the host's IP or hostname so bridge-mode endpoints are reachable (e.g. host.docker.internal or the host LAN IP).
# It's required when server deployed with docker container under host.
host_ip = "host.docker.internal"
drop_capabilities = ["AUDIT_WRITE", "MKNOD", "NET_ADMIN", "NET_RAW", "SYS_ADMIN", "SYS_MODULE", "SYS_PTRACE", "SYS_TIME", "SYS_TTY_CONFIG"]
no_new_privileges = true
pids_limit = 512
[ingress]
mode = "direct"
...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx' ...@@ -11,8 +11,6 @@ x-system-key: &x-system-key 'fastgpt-xxx'
x-plugin-auth-token: &x-plugin-auth-token 'token' x-plugin-auth-token: &x-plugin-auth-token 'token'
# code sandbox token # code sandbox token
x-code-sandbox-token: &x-code-sandbox-token 'codesandbox' x-code-sandbox-token: &x-code-sandbox-token 'codesandbox'
# volume manager auth token
x-volume-manager-auth-token: &x-volume-manager-auth-token 'vmtoken'
# aiproxy token # aiproxy token
x-aiproxy-token: &x-aiproxy-token 'token' x-aiproxy-token: &x-aiproxy-token 'token'
# 数据库连接相关配置 # 数据库连接相关配置
...@@ -134,14 +132,13 @@ services: ...@@ -134,14 +132,13 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: ghcr.io/labring/fastgpt:v4.14.20 image: ghcr.io/labring/fastgpt:v4.15.0-beta1
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
- data - data
- app - app
- codesandbox - codesandbox
- opensandbox
- aiproxy - aiproxy
depends_on: depends_on:
fastgpt-mongo: fastgpt-mongo:
...@@ -163,7 +160,7 @@ services: ...@@ -163,7 +160,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -192,20 +189,6 @@ services: ...@@ -192,20 +189,6 @@ services:
# AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY # AI Proxy 的 Admin Token,与 AI Proxy 中的环境变量 ADMIN_KEY
AIPROXY_API_TOKEN: *x-aiproxy-token AIPROXY_API_TOKEN: *x-aiproxy-token
# ==================== Agent sandbox 配置 ====================
AGENT_SANDBOX_PROVIDER: opensandbox
# OpenSandbox 配置(PROVIDER: opensandbox 时生效)
AGENT_SANDBOX_OPENSANDBOX_BASEURL: http://opensandbox-server:8090
AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: ghcr.io/labring/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
LOG_OTEL_SERVICE_NAME: fastgpt-client LOG_OTEL_SERVICE_NAME: fastgpt-client
...@@ -213,7 +196,7 @@ services: ...@@ -213,7 +196,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: ghcr.io/labring/fastgpt-code-sandbox:v4.14.20 image: ghcr.io/labring/fastgpt-code-sandbox:v4.15.0-beta1
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -252,17 +235,17 @@ services: ...@@ -252,17 +235,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: ghcr.io/labring/fastgpt-mcp_server:v4.14.20 image: ghcr.io/labring/fastgpt-mcp_server:v4.15.0-beta1
networks: networks:
- app - app
ports: ports:
...@@ -298,79 +281,9 @@ services: ...@@ -298,79 +281,9 @@ services:
timeout: 20s timeout: 20s
retries: 3 retries: 3
# 沙盒控制器:管理 Docker 容器的创建/执行/停止/删除
# runtime=docker 模式需要挂载 Docker socket
# 配置 docker.host_ip 为宿主机 LAN IP(容器内访问宿主机服务用)
opensandbox-server:
image: opensandbox/server:v0.1.9
container_name: fastgpt-opensandbox-server
restart: always
networks:
- opensandbox
extra_hosts:
- 'host.docker.internal:host-gateway'
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
configs:
- source: opensandbox-config
target: /etc/opensandbox/config.toml
environment:
SANDBOX_CONFIG_PATH: /etc/opensandbox/config.toml
healthcheck:
test:
[
'CMD',
'python',
'-c',
'import urllib.request,sys; sys.exit(0 if urllib.request.urlopen("http://localhost:8090/health",timeout=3).status==200 else 1)'
]
interval: 10s
timeout: 5s
retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image:
image: ghcr.io/labring/fastgpt-agent-sandbox:v0.1
profiles:
- prepull
opensandbox-execd-image:
image: opensandbox/execd:v1.0.7
profiles:
- prepull
opensandbox-egress-image:
image: opensandbox/egress:v1.0.3
profiles:
- prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager:
image: ghcr.io/labring/fastgpt-agent-volume-manager:v0.1
container_name: fastgpt-volume-manager
restart: always
networks:
- opensandbox
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Docker 模式必须挂载,需检查是否与主机的 socket 文件一致
environment:
PORT: 3000
VM_RUNTIME: docker
VM_AUTH_TOKEN: *x-volume-manager-auth-token # 对应 AGENT_SANDBOX_VOLUME_MANAGER_TOKEN
VM_VOLUME_NAME_PREFIX: fastgpt-session # volume 名称前缀
VM_LOG_LEVEL: info
VM_DOCKER_API_VERSION: v1.44
healthcheck:
test:
[
'CMD',
'bun',
'-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
]
interval: 10s
timeout: 5s
retries: 5
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: ghcr.io/labring/aiproxy:v0.5.6 image: ghcr.io/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -421,8 +334,6 @@ networks: ...@@ -421,8 +334,6 @@ networks:
name: fastgpt_app name: fastgpt_app
codesandbox: codesandbox:
name: fastgpt_codesandbox name: fastgpt_codesandbox
opensandbox:
name: fastgpt_opensandbox
aiproxy: aiproxy:
name: fastgpt_aiproxy name: fastgpt_aiproxy
...@@ -439,31 +350,3 @@ volumes: ...@@ -439,31 +350,3 @@ volumes:
fastgpt-seekdb-data: fastgpt-seekdb-data:
fastgpt-seekdb-config: fastgpt-seekdb-config:
fastgpt-aiproxy_pg: fastgpt-aiproxy_pg:
configs:
opensandbox-config:
content: |
[server]
host = "0.0.0.0"
port = 8090
log_level = "INFO"
[runtime]
type = "docker"
execd_image = "opensandbox/execd:v1.0.7"
[egress]
image = "opensandbox/egress:v1.0.3"
[docker]
network_mode = "fastgpt_opensandbox"
# When server runs in a container, set host_ip to the host's IP or hostname so bridge-mode endpoints are reachable (e.g. host.docker.internal or the host LAN IP).
# It's required when server deployed with docker container under host.
host_ip = "host.docker.internal"
drop_capabilities = ["AUDIT_WRITE", "MKNOD", "NET_ADMIN", "NET_RAW", "SYS_ADMIN", "SYS_MODULE", "SYS_PTRACE", "SYS_TIME", "SYS_TTY_CONFIG"]
no_new_privileges = true
pids_limit = 512
[ingress]
mode = "direct"
...@@ -43,7 +43,6 @@ x-log-config: &x-log-config ...@@ -43,7 +43,6 @@ x-log-config: &x-log-config
x-vec-config: &x-vec-config x-vec-config: &x-vec-config
MILVUS_ADDRESS: http://fastgpt-vector:19530 MILVUS_ADDRESS: http://fastgpt-vector:19530
MILVUS_TOKEN: none MILVUS_TOKEN: none
services: services:
# Vector DB # Vector DB
...@@ -104,7 +103,6 @@ services: ...@@ -104,7 +103,6 @@ services:
depends_on: depends_on:
- 'fastgpt-milvus-etcd' - 'fastgpt-milvus-etcd'
- 'fastgpt-milvus-minio' - 'fastgpt-milvus-minio'
fastgpt-mongo: fastgpt-mongo:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29
container_name: fastgpt-mongo container_name: fastgpt-mongo
...@@ -192,7 +190,7 @@ services: ...@@ -192,7 +190,7 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.14.22
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
...@@ -221,7 +219,7 @@ services: ...@@ -221,7 +219,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -257,12 +255,13 @@ services: ...@@ -257,12 +255,13 @@ services:
AGENT_SANDBOX_OPENSANDBOX_API_KEY: AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1 AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1.2
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选) # Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000 AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
AGENT_SANDBOX_VOLUME_MANAGER_MOUNT_PATH: /workspace
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
...@@ -271,7 +270,7 @@ services: ...@@ -271,7 +270,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.14.22
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -310,17 +309,17 @@ services: ...@@ -310,17 +309,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.14.22
networks: networks:
- app - app
ports: ports:
...@@ -387,7 +386,7 @@ services: ...@@ -387,7 +386,7 @@ services:
retries: 5 retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`). # Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image: opensandbox-agent-sandbox-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox:v0.1 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox:v0.1.2
profiles: profiles:
- prepull - prepull
opensandbox-execd-image: opensandbox-execd-image:
...@@ -400,7 +399,7 @@ services: ...@@ -400,7 +399,7 @@ services:
- prepull - prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC # 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager: fastgpt-volume-manager:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-volume-manager:v0.1 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-volume-manager:v0.1.2
container_name: fastgpt-volume-manager container_name: fastgpt-volume-manager
restart: always restart: always
networks: networks:
...@@ -428,7 +427,7 @@ services: ...@@ -428,7 +427,7 @@ services:
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.6 image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -524,4 +523,3 @@ configs: ...@@ -524,4 +523,3 @@ configs:
[ingress] [ingress]
mode = "direct" mode = "direct"
...@@ -43,7 +43,6 @@ x-log-config: &x-log-config ...@@ -43,7 +43,6 @@ x-log-config: &x-log-config
x-vec-config: &x-vec-config x-vec-config: &x-vec-config
OCEANBASE_URL: mysql://root%40tenantname:tenantpassword@fastgpt-vector:2881/mysql OCEANBASE_URL: mysql://root%40tenantname:tenantpassword@fastgpt-vector:2881/mysql
services: services:
# Vector DB # Vector DB
fastgpt-vector: fastgpt-vector:
...@@ -82,7 +81,6 @@ services: ...@@ -82,7 +81,6 @@ services:
timeout: 10s timeout: 10s
retries: 1000 retries: 1000
start_period: 10s start_period: 10s
fastgpt-mongo: fastgpt-mongo:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29
container_name: fastgpt-mongo container_name: fastgpt-mongo
...@@ -170,7 +168,7 @@ services: ...@@ -170,7 +168,7 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.14.22
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
...@@ -199,7 +197,7 @@ services: ...@@ -199,7 +197,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -235,12 +233,13 @@ services: ...@@ -235,12 +233,13 @@ services:
AGENT_SANDBOX_OPENSANDBOX_API_KEY: AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1 AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1.2
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选) # Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000 AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
AGENT_SANDBOX_VOLUME_MANAGER_MOUNT_PATH: /workspace
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
...@@ -249,7 +248,7 @@ services: ...@@ -249,7 +248,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.14.22
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -288,17 +287,17 @@ services: ...@@ -288,17 +287,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.14.22
networks: networks:
- app - app
ports: ports:
...@@ -365,7 +364,7 @@ services: ...@@ -365,7 +364,7 @@ services:
retries: 5 retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`). # Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image: opensandbox-agent-sandbox-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox:v0.1 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox:v0.1.2
profiles: profiles:
- prepull - prepull
opensandbox-execd-image: opensandbox-execd-image:
...@@ -378,7 +377,7 @@ services: ...@@ -378,7 +377,7 @@ services:
- prepull - prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC # 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager: fastgpt-volume-manager:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-volume-manager:v0.1 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-volume-manager:v0.1.2
container_name: fastgpt-volume-manager container_name: fastgpt-volume-manager
restart: always restart: always
networks: networks:
...@@ -406,7 +405,7 @@ services: ...@@ -406,7 +405,7 @@ services:
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.6 image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -506,4 +505,3 @@ configs: ...@@ -506,4 +505,3 @@ configs:
name: init_sql name: init_sql
content: | content: |
ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30; ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30;
...@@ -152,7 +152,7 @@ services: ...@@ -152,7 +152,7 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.14.22
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
...@@ -181,7 +181,7 @@ services: ...@@ -181,7 +181,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -217,12 +217,13 @@ services: ...@@ -217,12 +217,13 @@ services:
AGENT_SANDBOX_OPENSANDBOX_API_KEY: AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1 AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1.2
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选) # Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000 AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
AGENT_SANDBOX_VOLUME_MANAGER_MOUNT_PATH: /workspace
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
...@@ -231,7 +232,7 @@ services: ...@@ -231,7 +232,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.14.22
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -270,17 +271,17 @@ services: ...@@ -270,17 +271,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.14.22
networks: networks:
- app - app
ports: ports:
...@@ -347,7 +348,7 @@ services: ...@@ -347,7 +348,7 @@ services:
retries: 5 retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`). # Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image: opensandbox-agent-sandbox-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox:v0.1 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox:v0.1.2
profiles: profiles:
- prepull - prepull
opensandbox-execd-image: opensandbox-execd-image:
...@@ -360,7 +361,7 @@ services: ...@@ -360,7 +361,7 @@ services:
- prepull - prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC # 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager: fastgpt-volume-manager:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-volume-manager:v0.1 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-volume-manager:v0.1.2
container_name: fastgpt-volume-manager container_name: fastgpt-volume-manager
restart: always restart: always
networks: networks:
...@@ -388,7 +389,7 @@ services: ...@@ -388,7 +389,7 @@ services:
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.6 image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -484,4 +485,3 @@ configs: ...@@ -484,4 +485,3 @@ configs:
[ingress] [ingress]
mode = "direct" mode = "direct"
...@@ -63,7 +63,6 @@ services: ...@@ -63,7 +63,6 @@ services:
interval: 5s interval: 5s
timeout: 5s timeout: 5s
retries: 10 retries: 10
fastgpt-mongo: fastgpt-mongo:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29
container_name: fastgpt-mongo container_name: fastgpt-mongo
...@@ -151,7 +150,7 @@ services: ...@@ -151,7 +150,7 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.14.22
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
...@@ -180,7 +179,7 @@ services: ...@@ -180,7 +179,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -216,12 +215,13 @@ services: ...@@ -216,12 +215,13 @@ services:
AGENT_SANDBOX_OPENSANDBOX_API_KEY: AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1 AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1.2
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选) # Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000 AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
AGENT_SANDBOX_VOLUME_MANAGER_MOUNT_PATH: /workspace
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
...@@ -230,7 +230,7 @@ services: ...@@ -230,7 +230,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.14.22
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -269,17 +269,17 @@ services: ...@@ -269,17 +269,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.14.22
networks: networks:
- app - app
ports: ports:
...@@ -346,7 +346,7 @@ services: ...@@ -346,7 +346,7 @@ services:
retries: 5 retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`). # Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image: opensandbox-agent-sandbox-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox:v0.1 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox:v0.1.2
profiles: profiles:
- prepull - prepull
opensandbox-execd-image: opensandbox-execd-image:
...@@ -359,7 +359,7 @@ services: ...@@ -359,7 +359,7 @@ services:
- prepull - prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC # 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager: fastgpt-volume-manager:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-volume-manager:v0.1 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-volume-manager:v0.1.2
container_name: fastgpt-volume-manager container_name: fastgpt-volume-manager
restart: always restart: always
networks: networks:
...@@ -387,7 +387,7 @@ services: ...@@ -387,7 +387,7 @@ services:
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.6 image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -483,4 +483,3 @@ configs: ...@@ -483,4 +483,3 @@ configs:
[ingress] [ingress]
mode = "direct" mode = "direct"
...@@ -43,7 +43,6 @@ x-log-config: &x-log-config ...@@ -43,7 +43,6 @@ x-log-config: &x-log-config
x-vec-config: &x-vec-config x-vec-config: &x-vec-config
SEEKDB_URL: mysql://root:seekdbpassword@fastgpt-vector:2881/mysql SEEKDB_URL: mysql://root:seekdbpassword@fastgpt-vector:2881/mysql
services: services:
# Vector DB # Vector DB
fastgpt-vector: fastgpt-vector:
...@@ -69,7 +68,6 @@ services: ...@@ -69,7 +68,6 @@ services:
timeout: 10s timeout: 10s
retries: 1000 retries: 1000
start_period: 10s start_period: 10s
fastgpt-mongo: fastgpt-mongo:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29
container_name: fastgpt-mongo container_name: fastgpt-mongo
...@@ -157,7 +155,7 @@ services: ...@@ -157,7 +155,7 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.14.22
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
...@@ -186,7 +184,7 @@ services: ...@@ -186,7 +184,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -222,12 +220,13 @@ services: ...@@ -222,12 +220,13 @@ services:
AGENT_SANDBOX_OPENSANDBOX_API_KEY: AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1 AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1.2
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选) # Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000 AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
AGENT_SANDBOX_VOLUME_MANAGER_MOUNT_PATH: /workspace
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
...@@ -236,7 +235,7 @@ services: ...@@ -236,7 +235,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.14.22
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -275,17 +274,17 @@ services: ...@@ -275,17 +274,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.14.22
networks: networks:
- app - app
ports: ports:
...@@ -352,7 +351,7 @@ services: ...@@ -352,7 +351,7 @@ services:
retries: 5 retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`). # Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image: opensandbox-agent-sandbox-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox:v0.1 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox:v0.1.2
profiles: profiles:
- prepull - prepull
opensandbox-execd-image: opensandbox-execd-image:
...@@ -365,7 +364,7 @@ services: ...@@ -365,7 +364,7 @@ services:
- prepull - prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC # 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager: fastgpt-volume-manager:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-volume-manager:v0.1 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-volume-manager:v0.1.2
container_name: fastgpt-volume-manager container_name: fastgpt-volume-manager
restart: always restart: always
networks: networks:
...@@ -393,7 +392,7 @@ services: ...@@ -393,7 +392,7 @@ services:
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.6 image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -489,4 +488,3 @@ configs: ...@@ -489,4 +488,3 @@ configs:
[ingress] [ingress]
mode = "direct" mode = "direct"
...@@ -134,7 +134,7 @@ services: ...@@ -134,7 +134,7 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt:v4.14.22
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
...@@ -163,7 +163,7 @@ services: ...@@ -163,7 +163,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -199,12 +199,13 @@ services: ...@@ -199,12 +199,13 @@ services:
AGENT_SANDBOX_OPENSANDBOX_API_KEY: AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1 AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1.2
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选) # Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000 AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
AGENT_SANDBOX_VOLUME_MANAGER_MOUNT_PATH: /workspace
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
...@@ -213,7 +214,7 @@ services: ...@@ -213,7 +214,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-code-sandbox:v4.14.22
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -252,17 +253,17 @@ services: ...@@ -252,17 +253,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.14.20 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-mcp_server:v4.14.22
networks: networks:
- app - app
ports: ports:
...@@ -329,7 +330,7 @@ services: ...@@ -329,7 +330,7 @@ services:
retries: 5 retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`). # Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image: opensandbox-agent-sandbox-image:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox:v0.1 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-sandbox:v0.1.2
profiles: profiles:
- prepull - prepull
opensandbox-execd-image: opensandbox-execd-image:
...@@ -342,7 +343,7 @@ services: ...@@ -342,7 +343,7 @@ services:
- prepull - prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC # 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager: fastgpt-volume-manager:
image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-volume-manager:v0.1 image: registry.cn-hangzhou.aliyuncs.com/fastgpt/fastgpt-agent-volume-manager:v0.1.2
container_name: fastgpt-volume-manager container_name: fastgpt-volume-manager
restart: always restart: always
networks: networks:
...@@ -370,7 +371,7 @@ services: ...@@ -370,7 +371,7 @@ services:
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.6 image: registry.cn-hangzhou.aliyuncs.com/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -466,4 +467,3 @@ configs: ...@@ -466,4 +467,3 @@ configs:
[ingress] [ingress]
mode = "direct" mode = "direct"
...@@ -43,7 +43,6 @@ x-log-config: &x-log-config ...@@ -43,7 +43,6 @@ x-log-config: &x-log-config
x-vec-config: &x-vec-config x-vec-config: &x-vec-config
MILVUS_ADDRESS: http://fastgpt-vector:19530 MILVUS_ADDRESS: http://fastgpt-vector:19530
MILVUS_TOKEN: none MILVUS_TOKEN: none
services: services:
# Vector DB # Vector DB
...@@ -104,7 +103,6 @@ services: ...@@ -104,7 +103,6 @@ services:
depends_on: depends_on:
- 'fastgpt-milvus-etcd' - 'fastgpt-milvus-etcd'
- 'fastgpt-milvus-minio' - 'fastgpt-milvus-minio'
fastgpt-mongo: fastgpt-mongo:
image: mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29 image: mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29
container_name: fastgpt-mongo container_name: fastgpt-mongo
...@@ -192,7 +190,7 @@ services: ...@@ -192,7 +190,7 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: ghcr.io/labring/fastgpt:v4.14.20 image: ghcr.io/labring/fastgpt:v4.14.22
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
...@@ -221,7 +219,7 @@ services: ...@@ -221,7 +219,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -257,12 +255,13 @@ services: ...@@ -257,12 +255,13 @@ services:
AGENT_SANDBOX_OPENSANDBOX_API_KEY: AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: ghcr.io/labring/fastgpt-agent-sandbox AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: ghcr.io/labring/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1 AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1.2
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选) # Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000 AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
AGENT_SANDBOX_VOLUME_MANAGER_MOUNT_PATH: /workspace
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
...@@ -271,7 +270,7 @@ services: ...@@ -271,7 +270,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: ghcr.io/labring/fastgpt-code-sandbox:v4.14.20 image: ghcr.io/labring/fastgpt-code-sandbox:v4.14.22
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -310,17 +309,17 @@ services: ...@@ -310,17 +309,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: ghcr.io/labring/fastgpt-mcp_server:v4.14.20 image: ghcr.io/labring/fastgpt-mcp_server:v4.14.22
networks: networks:
- app - app
ports: ports:
...@@ -387,7 +386,7 @@ services: ...@@ -387,7 +386,7 @@ services:
retries: 5 retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`). # Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image: opensandbox-agent-sandbox-image:
image: ghcr.io/labring/fastgpt-agent-sandbox:v0.1 image: ghcr.io/labring/fastgpt-agent-sandbox:v0.1.2
profiles: profiles:
- prepull - prepull
opensandbox-execd-image: opensandbox-execd-image:
...@@ -400,7 +399,7 @@ services: ...@@ -400,7 +399,7 @@ services:
- prepull - prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC # 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager: fastgpt-volume-manager:
image: ghcr.io/labring/fastgpt-agent-volume-manager:v0.1 image: ghcr.io/labring/fastgpt-agent-volume-manager:v0.1.2
container_name: fastgpt-volume-manager container_name: fastgpt-volume-manager
restart: always restart: always
networks: networks:
...@@ -428,7 +427,7 @@ services: ...@@ -428,7 +427,7 @@ services:
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: ghcr.io/labring/aiproxy:v0.5.6 image: ghcr.io/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -524,4 +523,3 @@ configs: ...@@ -524,4 +523,3 @@ configs:
[ingress] [ingress]
mode = "direct" mode = "direct"
...@@ -43,7 +43,6 @@ x-log-config: &x-log-config ...@@ -43,7 +43,6 @@ x-log-config: &x-log-config
x-vec-config: &x-vec-config x-vec-config: &x-vec-config
OCEANBASE_URL: mysql://root%40tenantname:tenantpassword@fastgpt-vector:2881/mysql OCEANBASE_URL: mysql://root%40tenantname:tenantpassword@fastgpt-vector:2881/mysql
services: services:
# Vector DB # Vector DB
fastgpt-vector: fastgpt-vector:
...@@ -82,7 +81,6 @@ services: ...@@ -82,7 +81,6 @@ services:
timeout: 10s timeout: 10s
retries: 1000 retries: 1000
start_period: 10s start_period: 10s
fastgpt-mongo: fastgpt-mongo:
image: mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29 image: mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29
container_name: fastgpt-mongo container_name: fastgpt-mongo
...@@ -170,7 +168,7 @@ services: ...@@ -170,7 +168,7 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: ghcr.io/labring/fastgpt:v4.14.20 image: ghcr.io/labring/fastgpt:v4.14.22
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
...@@ -199,7 +197,7 @@ services: ...@@ -199,7 +197,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -235,12 +233,13 @@ services: ...@@ -235,12 +233,13 @@ services:
AGENT_SANDBOX_OPENSANDBOX_API_KEY: AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: ghcr.io/labring/fastgpt-agent-sandbox AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: ghcr.io/labring/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1 AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1.2
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选) # Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000 AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
AGENT_SANDBOX_VOLUME_MANAGER_MOUNT_PATH: /workspace
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
...@@ -249,7 +248,7 @@ services: ...@@ -249,7 +248,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: ghcr.io/labring/fastgpt-code-sandbox:v4.14.20 image: ghcr.io/labring/fastgpt-code-sandbox:v4.14.22
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -288,17 +287,17 @@ services: ...@@ -288,17 +287,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: ghcr.io/labring/fastgpt-mcp_server:v4.14.20 image: ghcr.io/labring/fastgpt-mcp_server:v4.14.22
networks: networks:
- app - app
ports: ports:
...@@ -365,7 +364,7 @@ services: ...@@ -365,7 +364,7 @@ services:
retries: 5 retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`). # Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image: opensandbox-agent-sandbox-image:
image: ghcr.io/labring/fastgpt-agent-sandbox:v0.1 image: ghcr.io/labring/fastgpt-agent-sandbox:v0.1.2
profiles: profiles:
- prepull - prepull
opensandbox-execd-image: opensandbox-execd-image:
...@@ -378,7 +377,7 @@ services: ...@@ -378,7 +377,7 @@ services:
- prepull - prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC # 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager: fastgpt-volume-manager:
image: ghcr.io/labring/fastgpt-agent-volume-manager:v0.1 image: ghcr.io/labring/fastgpt-agent-volume-manager:v0.1.2
container_name: fastgpt-volume-manager container_name: fastgpt-volume-manager
restart: always restart: always
networks: networks:
...@@ -406,7 +405,7 @@ services: ...@@ -406,7 +405,7 @@ services:
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: ghcr.io/labring/aiproxy:v0.5.6 image: ghcr.io/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -506,4 +505,3 @@ configs: ...@@ -506,4 +505,3 @@ configs:
name: init_sql name: init_sql
content: | content: |
ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30; ALTER SYSTEM SET ob_vector_memory_limit_percentage = 30;
...@@ -152,7 +152,7 @@ services: ...@@ -152,7 +152,7 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: ghcr.io/labring/fastgpt:v4.14.20 image: ghcr.io/labring/fastgpt:v4.14.22
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
...@@ -181,7 +181,7 @@ services: ...@@ -181,7 +181,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -217,12 +217,13 @@ services: ...@@ -217,12 +217,13 @@ services:
AGENT_SANDBOX_OPENSANDBOX_API_KEY: AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: ghcr.io/labring/fastgpt-agent-sandbox AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: ghcr.io/labring/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1 AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1.2
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选) # Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000 AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
AGENT_SANDBOX_VOLUME_MANAGER_MOUNT_PATH: /workspace
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
...@@ -231,7 +232,7 @@ services: ...@@ -231,7 +232,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: ghcr.io/labring/fastgpt-code-sandbox:v4.14.20 image: ghcr.io/labring/fastgpt-code-sandbox:v4.14.22
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -270,17 +271,17 @@ services: ...@@ -270,17 +271,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: ghcr.io/labring/fastgpt-mcp_server:v4.14.20 image: ghcr.io/labring/fastgpt-mcp_server:v4.14.22
networks: networks:
- app - app
ports: ports:
...@@ -347,7 +348,7 @@ services: ...@@ -347,7 +348,7 @@ services:
retries: 5 retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`). # Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image: opensandbox-agent-sandbox-image:
image: ghcr.io/labring/fastgpt-agent-sandbox:v0.1 image: ghcr.io/labring/fastgpt-agent-sandbox:v0.1.2
profiles: profiles:
- prepull - prepull
opensandbox-execd-image: opensandbox-execd-image:
...@@ -360,7 +361,7 @@ services: ...@@ -360,7 +361,7 @@ services:
- prepull - prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC # 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager: fastgpt-volume-manager:
image: ghcr.io/labring/fastgpt-agent-volume-manager:v0.1 image: ghcr.io/labring/fastgpt-agent-volume-manager:v0.1.2
container_name: fastgpt-volume-manager container_name: fastgpt-volume-manager
restart: always restart: always
networks: networks:
...@@ -388,7 +389,7 @@ services: ...@@ -388,7 +389,7 @@ services:
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: ghcr.io/labring/aiproxy:v0.5.6 image: ghcr.io/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -484,4 +485,3 @@ configs: ...@@ -484,4 +485,3 @@ configs:
[ingress] [ingress]
mode = "direct" mode = "direct"
...@@ -63,7 +63,6 @@ services: ...@@ -63,7 +63,6 @@ services:
interval: 5s interval: 5s
timeout: 5s timeout: 5s
retries: 10 retries: 10
fastgpt-mongo: fastgpt-mongo:
image: mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29 image: mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29
container_name: fastgpt-mongo container_name: fastgpt-mongo
...@@ -151,7 +150,7 @@ services: ...@@ -151,7 +150,7 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: ghcr.io/labring/fastgpt:v4.14.20 image: ghcr.io/labring/fastgpt:v4.14.22
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
...@@ -180,7 +179,7 @@ services: ...@@ -180,7 +179,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -216,12 +215,13 @@ services: ...@@ -216,12 +215,13 @@ services:
AGENT_SANDBOX_OPENSANDBOX_API_KEY: AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: ghcr.io/labring/fastgpt-agent-sandbox AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: ghcr.io/labring/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1 AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1.2
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选) # Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000 AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
AGENT_SANDBOX_VOLUME_MANAGER_MOUNT_PATH: /workspace
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
...@@ -230,7 +230,7 @@ services: ...@@ -230,7 +230,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: ghcr.io/labring/fastgpt-code-sandbox:v4.14.20 image: ghcr.io/labring/fastgpt-code-sandbox:v4.14.22
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -269,17 +269,17 @@ services: ...@@ -269,17 +269,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: ghcr.io/labring/fastgpt-mcp_server:v4.14.20 image: ghcr.io/labring/fastgpt-mcp_server:v4.14.22
networks: networks:
- app - app
ports: ports:
...@@ -346,7 +346,7 @@ services: ...@@ -346,7 +346,7 @@ services:
retries: 5 retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`). # Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image: opensandbox-agent-sandbox-image:
image: ghcr.io/labring/fastgpt-agent-sandbox:v0.1 image: ghcr.io/labring/fastgpt-agent-sandbox:v0.1.2
profiles: profiles:
- prepull - prepull
opensandbox-execd-image: opensandbox-execd-image:
...@@ -359,7 +359,7 @@ services: ...@@ -359,7 +359,7 @@ services:
- prepull - prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC # 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager: fastgpt-volume-manager:
image: ghcr.io/labring/fastgpt-agent-volume-manager:v0.1 image: ghcr.io/labring/fastgpt-agent-volume-manager:v0.1.2
container_name: fastgpt-volume-manager container_name: fastgpt-volume-manager
restart: always restart: always
networks: networks:
...@@ -387,7 +387,7 @@ services: ...@@ -387,7 +387,7 @@ services:
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: ghcr.io/labring/aiproxy:v0.5.6 image: ghcr.io/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -483,4 +483,3 @@ configs: ...@@ -483,4 +483,3 @@ configs:
[ingress] [ingress]
mode = "direct" mode = "direct"
...@@ -43,7 +43,6 @@ x-log-config: &x-log-config ...@@ -43,7 +43,6 @@ x-log-config: &x-log-config
x-vec-config: &x-vec-config x-vec-config: &x-vec-config
SEEKDB_URL: mysql://root:seekdbpassword@fastgpt-vector:2881/mysql SEEKDB_URL: mysql://root:seekdbpassword@fastgpt-vector:2881/mysql
services: services:
# Vector DB # Vector DB
fastgpt-vector: fastgpt-vector:
...@@ -69,7 +68,6 @@ services: ...@@ -69,7 +68,6 @@ services:
timeout: 10s timeout: 10s
retries: 1000 retries: 1000
start_period: 10s start_period: 10s
fastgpt-mongo: fastgpt-mongo:
image: mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29 image: mongo:5.0.32 # cpu 不支持 AVX 时候使用 4.4.29
container_name: fastgpt-mongo container_name: fastgpt-mongo
...@@ -157,7 +155,7 @@ services: ...@@ -157,7 +155,7 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: ghcr.io/labring/fastgpt:v4.14.20 image: ghcr.io/labring/fastgpt:v4.14.22
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
...@@ -186,7 +184,7 @@ services: ...@@ -186,7 +184,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -222,12 +220,13 @@ services: ...@@ -222,12 +220,13 @@ services:
AGENT_SANDBOX_OPENSANDBOX_API_KEY: AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: ghcr.io/labring/fastgpt-agent-sandbox AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: ghcr.io/labring/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1 AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1.2
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选) # Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000 AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
AGENT_SANDBOX_VOLUME_MANAGER_MOUNT_PATH: /workspace
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
...@@ -236,7 +235,7 @@ services: ...@@ -236,7 +235,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: ghcr.io/labring/fastgpt-code-sandbox:v4.14.20 image: ghcr.io/labring/fastgpt-code-sandbox:v4.14.22
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -275,17 +274,17 @@ services: ...@@ -275,17 +274,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: ghcr.io/labring/fastgpt-mcp_server:v4.14.20 image: ghcr.io/labring/fastgpt-mcp_server:v4.14.22
networks: networks:
- app - app
ports: ports:
...@@ -352,7 +351,7 @@ services: ...@@ -352,7 +351,7 @@ services:
retries: 5 retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`). # Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image: opensandbox-agent-sandbox-image:
image: ghcr.io/labring/fastgpt-agent-sandbox:v0.1 image: ghcr.io/labring/fastgpt-agent-sandbox:v0.1.2
profiles: profiles:
- prepull - prepull
opensandbox-execd-image: opensandbox-execd-image:
...@@ -365,7 +364,7 @@ services: ...@@ -365,7 +364,7 @@ services:
- prepull - prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC # 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager: fastgpt-volume-manager:
image: ghcr.io/labring/fastgpt-agent-volume-manager:v0.1 image: ghcr.io/labring/fastgpt-agent-volume-manager:v0.1.2
container_name: fastgpt-volume-manager container_name: fastgpt-volume-manager
restart: always restart: always
networks: networks:
...@@ -393,7 +392,7 @@ services: ...@@ -393,7 +392,7 @@ services:
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: ghcr.io/labring/aiproxy:v0.5.6 image: ghcr.io/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -489,4 +488,3 @@ configs: ...@@ -489,4 +488,3 @@ configs:
[ingress] [ingress]
mode = "direct" mode = "direct"
...@@ -134,7 +134,7 @@ services: ...@@ -134,7 +134,7 @@ services:
fastgpt-app: fastgpt-app:
container_name: fastgpt-app container_name: fastgpt-app
image: ghcr.io/labring/fastgpt:v4.14.20 image: ghcr.io/labring/fastgpt:v4.14.22
ports: ports:
- 3000:3000 - 3000:3000
networks: networks:
...@@ -163,7 +163,7 @@ services: ...@@ -163,7 +163,7 @@ services:
HOSTNAME: 0.0.0.0 HOSTNAME: 0.0.0.0
# ==================== 基础配置 ==================== # ==================== 基础配置 ====================
# 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。 # 前端外部可访问的地址,用于自动补全文件资源路径。例如 https:fastgpt.cn,不能填 localhost。这个值可以不填,不填则发给模型的图片会是一个相对路径,而不是全路径,模型可能伪造Host。
FE_DOMAIN: FE_DOMAIN:
# root key(最高权限) # root key(最高权限)
ROOT_KEY: *x-system-key ROOT_KEY: *x-system-key
# root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。 # root 密码,用户名为: root。如果需要修改 root 密码,直接修改这个环境变量,并重启即可。
...@@ -199,12 +199,13 @@ services: ...@@ -199,12 +199,13 @@ services:
AGENT_SANDBOX_OPENSANDBOX_API_KEY: AGENT_SANDBOX_OPENSANDBOX_API_KEY:
AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker AGENT_SANDBOX_OPENSANDBOX_RUNTIME: docker
AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: ghcr.io/labring/fastgpt-agent-sandbox AGENT_SANDBOX_OPENSANDBOX_IMAGE_REPO: ghcr.io/labring/fastgpt-agent-sandbox
AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1 AGENT_SANDBOX_OPENSANDBOX_IMAGE_TAG: v0.1.2
AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true AGENT_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY: true
# Volume 持久化配置(opensandbox provider 下可选) # Volume 持久化配置(opensandbox provider 下可选)
AGENT_SANDBOX_ENABLE_VOLUME: true AGENT_SANDBOX_ENABLE_VOLUME: true
AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000 AGENT_SANDBOX_VOLUME_MANAGER_URL: http://fastgpt-volume-manager:3000
AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token AGENT_SANDBOX_VOLUME_MANAGER_TOKEN: *x-volume-manager-auth-token
AGENT_SANDBOX_VOLUME_MANAGER_MOUNT_PATH: /workspace
# ==================== 日志与监控 ==================== # ==================== 日志与监控 ====================
# 传递给 OTLP 收集器的服务名称 # 传递给 OTLP 收集器的服务名称
...@@ -213,7 +214,7 @@ services: ...@@ -213,7 +214,7 @@ services:
- ./config.json:/app/data/config.json - ./config.json:/app/data/config.json
fastgpt-code-sandbox: fastgpt-code-sandbox:
container_name: fastgpt-code-sandbox container_name: fastgpt-code-sandbox
image: ghcr.io/labring/fastgpt-code-sandbox:v4.14.20 image: ghcr.io/labring/fastgpt-code-sandbox:v4.14.22
networks: networks:
- codesandbox - codesandbox
restart: always restart: always
...@@ -252,17 +253,17 @@ services: ...@@ -252,17 +253,17 @@ services:
SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib SANDBOX_PYTHON_ALLOWED_MODULES: math,cmath,decimal,fractions,random,statistics,collections,array,heapq,bisect,queue,copy,itertools,functools,operator,string,re,difflib,textwrap,unicodedata,codecs,datetime,time,calendar,_strptime,json,csv,base64,binascii,struct,hashlib,hmac,secrets,uuid,typing,abc,enum,dataclasses,contextlib,pprint,weakref,numpy,pandas,matplotlib
healthcheck: healthcheck:
test: [ test: [
'CMD', 'CMD',
'bun', 'bun',
'-e', '-e',
"fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })" "fetch('http://localhost:3000/health').then((res) => { if (!res.ok) throw new Error(String(res.status)); })"
] ]
interval: 30s interval: 30s
timeout: 20s timeout: 20s
retries: 3 retries: 3
fastgpt-mcp-server: fastgpt-mcp-server:
container_name: fastgpt-mcp-server container_name: fastgpt-mcp-server
image: ghcr.io/labring/fastgpt-mcp_server:v4.14.20 image: ghcr.io/labring/fastgpt-mcp_server:v4.14.22
networks: networks:
- app - app
ports: ports:
...@@ -329,7 +330,7 @@ services: ...@@ -329,7 +330,7 @@ services:
retries: 5 retries: 5
# Pre-pull only: not started by `docker compose up` (uses profile `prepull`). # Pre-pull only: not started by `docker compose up` (uses profile `prepull`).
opensandbox-agent-sandbox-image: opensandbox-agent-sandbox-image:
image: ghcr.io/labring/fastgpt-agent-sandbox:v0.1 image: ghcr.io/labring/fastgpt-agent-sandbox:v0.1.2
profiles: profiles:
- prepull - prepull
opensandbox-execd-image: opensandbox-execd-image:
...@@ -342,7 +343,7 @@ services: ...@@ -342,7 +343,7 @@ services:
- prepull - prepull
# 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC # 卷管理微服务:负责幂等创建/删除 Docker named volume 或 k8s PVC
fastgpt-volume-manager: fastgpt-volume-manager:
image: ghcr.io/labring/fastgpt-agent-volume-manager:v0.1 image: ghcr.io/labring/fastgpt-agent-volume-manager:v0.1.2
container_name: fastgpt-volume-manager container_name: fastgpt-volume-manager
restart: always restart: always
networks: networks:
...@@ -370,7 +371,7 @@ services: ...@@ -370,7 +371,7 @@ services:
# AI Proxy # AI Proxy
fastgpt-aiproxy: fastgpt-aiproxy:
image: ghcr.io/labring/aiproxy:v0.5.6 image: ghcr.io/labring/aiproxy:v0.5.8
container_name: fastgpt-aiproxy container_name: fastgpt-aiproxy
restart: unless-stopped restart: unless-stopped
depends_on: depends_on:
...@@ -466,4 +467,3 @@ configs: ...@@ -466,4 +467,3 @@ configs:
[ingress] [ingress]
mode = "direct" mode = "direct"
...@@ -57,14 +57,70 @@ radio_select() { ...@@ -57,14 +57,70 @@ radio_select() {
# 确保退出时恢复光标 # 确保退出时恢复光标
trap 'tput cnorm 2>/dev/null; exit' INT TERM trap 'tput cnorm 2>/dev/null; exit' INT TERM
# ========== 部署版本列表(由 deploy/init.mjs 自动生成) ==========
# BEGIN GENERATED DEPLOY VERSIONS
DEPLOY_VERSIONS=(
"v4.14"
"main"
)
# END GENERATED DEPLOY VERSIONS
# 获取部署版本展示文案:main 为迭代版,其他版本均视为稳定版
get_version_label() {
local version="$1"
if [ "$version" == "main" ]; then
echo "迭代版 main"
else
echo "稳定版 $version"
fi
}
# ========== 1. 选择镜像源 ========== # ========== 1. 选择镜像源 ==========
radio_select "请选择镜像源 (↑↓ 选择, 回车确认):" "阿里云 (中国大陆)" "GitHub (全球)" radio_select "请选择镜像源 (↑↓ 选择, 回车确认):" "阿里云 (中国大陆)" "GitHub (全球)"
case $RADIO_RESULT in case $RADIO_RESULT in
1) REGION="global" ;; 1)
*) REGION="cn" ;; REGION="global"
BASE_URL="https://doc.fastgpt.io/deploy"
;;
*)
REGION="cn"
BASE_URL="https://doc.fastgpt.cn/deploy"
;;
esac esac
# ========== 2. 选择向量数据库 ========== # ========== 2. 选择部署版本 ==========
if [ ${#DEPLOY_VERSIONS[@]} -eq 0 ]; then
echo "错误: 未配置部署版本"
exit 1
fi
if [ -n "$FASTGPT_DEPLOY_VERSION" ]; then
version_matched=false
for version in "${DEPLOY_VERSIONS[@]}"; do
if [ "$FASTGPT_DEPLOY_VERSION" == "$version" ]; then
version_matched=true
break
fi
done
if [ "$version_matched" = true ]; then
DEPLOY_VERSION="$FASTGPT_DEPLOY_VERSION"
else
echo "错误: 不支持的 FASTGPT_DEPLOY_VERSION: $FASTGPT_DEPLOY_VERSION"
echo "可选版本: ${DEPLOY_VERSIONS[*]}"
exit 1
fi
else
VERSION_OPTIONS=()
for version in "${DEPLOY_VERSIONS[@]}"; do
VERSION_OPTIONS+=("$(get_version_label "$version")")
done
radio_select "请选择部署版本 (↑↓ 选择, 回车确认):" "${VERSION_OPTIONS[@]}"
DEPLOY_VERSION="${DEPLOY_VERSIONS[$RADIO_RESULT]}"
fi
# ========== 3. 选择向量数据库 ==========
radio_select "请选择向量数据库 (↑↓ 选择, 回车确认):" "PostgreSQL + pgvector" "Milvus" "Zilliz" "OceanBase" "SeekDB" radio_select "请选择向量数据库 (↑↓ 选择, 回车确认):" "PostgreSQL + pgvector" "Milvus" "Zilliz" "OceanBase" "SeekDB"
case $RADIO_RESULT in case $RADIO_RESULT in
1) VECTOR="milvus" ;; 1) VECTOR="milvus" ;;
...@@ -74,7 +130,7 @@ case $RADIO_RESULT in ...@@ -74,7 +130,7 @@ case $RADIO_RESULT in
*) VECTOR="pg" ;; *) VECTOR="pg" ;;
esac esac
# ========== 3. 检测可用 IP ========== # ========== 4. 检测可用 IP ==========
IP_LIST=() IP_LIST=()
PRIMARY_IP="" PRIMARY_IP=""
...@@ -152,17 +208,19 @@ select_address() { ...@@ -152,17 +208,19 @@ select_address() {
fi fi
} }
# ========== 4. 选择 S3 访问地址 (端口 9000) ========== # ========== 5. 选择 S3 访问地址 (端口 9000) ==========
select_address "请选择 S3 访问地址 - 客户端和容器均需可访问 (↑↓ 选择, 回车确认, 通常默认第一个即可):" 9000 select_address "请选择 S3 访问地址 - 客户端和容器均需可访问 (↑↓ 选择, 回车确认, 通常默认第一个即可):" 9000
S3_ADDR="$SELECTED_ADDR" S3_ADDR="$SELECTED_ADDR"
S3_CUSTOM=$SELECTED_CUSTOM S3_CUSTOM=$SELECTED_CUSTOM
# ========== 5. 选择 SSE MCP 访问地址 (端口 3003) ========== # ========== 6. 选择 SSE MCP 访问地址 (端口 3003) ==========
select_address "请选择 SSE MCP 访问地址 - 客户端和容器均需可访问 (↑↓ 选择, 回车确认, 通常默认第一个即可):" 3003 select_address "请选择 SSE MCP 访问地址 - 客户端和容器均需可访问 (↑↓ 选择, 回车确认, 通常默认第一个即可):" 3003
MCP_ADDR="$SELECTED_ADDR" MCP_ADDR="$SELECTED_ADDR"
MCP_CUSTOM=$SELECTED_CUSTOM MCP_CUSTOM=$SELECTED_CUSTOM
# ========== 确认配置 ========== # ========== 确认配置 ==========
DEPLOY_VERSION_LABEL="$(get_version_label "$DEPLOY_VERSION")"
REGION_LABEL="阿里云 (中国大陆)" REGION_LABEL="阿里云 (中国大陆)"
if [ "$REGION" == "global" ]; then if [ "$REGION" == "global" ]; then
REGION_LABEL="GitHub (全球)" REGION_LABEL="GitHub (全球)"
...@@ -191,6 +249,7 @@ fi ...@@ -191,6 +249,7 @@ fi
echo "" echo ""
echo "==============================" echo "=============================="
echo " 部署版本: $DEPLOY_VERSION_LABEL"
echo " 镜像源: $REGION_LABEL" echo " 镜像源: $REGION_LABEL"
echo " 向量数据库: $VECTOR" echo " 向量数据库: $VECTOR"
echo " S3 地址: $S3_DISPLAY" echo " S3 地址: $S3_DISPLAY"
...@@ -213,13 +272,7 @@ if [ "$REGION" == "global" ] && [ "$VECTOR" == "zilliz" ]; then ...@@ -213,13 +272,7 @@ if [ "$REGION" == "global" ] && [ "$VECTOR" == "zilliz" ]; then
VECTOR_FILE="zilliz" VECTOR_FILE="zilliz"
fi fi
if [ "$REGION" == "cn" ]; then YML_URL="${BASE_URL}/docker/${DEPLOY_VERSION}/${REGION}/docker-compose.${VECTOR_FILE}.yml"
BASE_URL="https://doc.fastgpt.cn/deploy"
YML_URL="${BASE_URL}/docker/cn/docker-compose.${VECTOR_FILE}.yml"
else
BASE_URL="https://doc.fastgpt.io/deploy"
YML_URL="${BASE_URL}/docker/global/docker-compose.${VECTOR_FILE}.yml"
fi
CONFIG_URL="${BASE_URL}/config/config.json" CONFIG_URL="${BASE_URL}/config/config.json"
...@@ -316,69 +369,79 @@ else ...@@ -316,69 +369,79 @@ else
echo "警告: 未设置 MCP 地址,请手动编辑 config.json 中的 mcpServerProxyEndpoint" echo "警告: 未设置 MCP 地址,请手动编辑 config.json 中的 mcpServerProxyEndpoint"
fi fi
# ========== 检测并替换 docker.sock 路径 ========== if [ "$DEPLOY_VERSION" != "main" ]; then
# 某些发行版 / Docker Desktop / rootless 模式下,宿主机 docker.sock 不在 /var/run/docker.sock # ========== 检测并替换 docker.sock 路径 ==========
# 若路径错误,Docker 会把挂载目标在容器内创建为空目录,导致 volume-manager / opensandbox 无法调用 Docker API # 某些发行版 / Docker Desktop / rootless 模式下,宿主机 docker.sock 不在 /var/run/docker.sock
detect_docker_sock() { # 若路径错误,Docker 会把挂载目标在容器内创建为空目录,导致 volume-manager / opensandbox 无法调用 Docker API
# 1. DOCKER_HOST 环境变量 detect_docker_sock() {
if [ -n "$DOCKER_HOST" ] && [[ "$DOCKER_HOST" == unix://* ]]; then # 1. DOCKER_HOST 环境变量
local sock="${DOCKER_HOST#unix://}" if [ -n "$DOCKER_HOST" ] && [[ "$DOCKER_HOST" == unix://* ]]; then
[ -S "$sock" ] && { echo "$sock"; return 0; } local sock="${DOCKER_HOST#unix://}"
fi [ -S "$sock" ] && { echo "$sock"; return 0; }
fi
# 2. docker context 当前上下文 # 2. docker context 当前上下文
if command -v docker &>/dev/null; then if command -v docker &>/dev/null; then
local ctx local ctx
ctx=$(docker context inspect --format '{{ .Endpoints.docker.Host }}' 2>/dev/null) ctx=$(docker context inspect --format '{{ .Endpoints.docker.Host }}' 2>/dev/null)
if [[ "$ctx" == unix://* ]]; then if [[ "$ctx" == unix://* ]]; then
ctx="${ctx#unix://}" ctx="${ctx#unix://}"
[ -S "$ctx" ] && { echo "$ctx"; return 0; } [ -S "$ctx" ] && { echo "$ctx"; return 0; }
fi
fi fi
fi
# 3. 常见路径依次探测 # 3. 常见路径依次探测
local candidates=( local candidates=(
"/var/run/docker.sock" "/var/run/docker.sock"
"/run/docker.sock" "/run/docker.sock"
"$HOME/.docker/run/docker.sock" # macOS Docker Desktop "$HOME/.docker/run/docker.sock" # macOS Docker Desktop
"$HOME/.docker/desktop/docker.sock" "$HOME/.docker/desktop/docker.sock"
"/run/user/$(id -u 2>/dev/null)/docker.sock" # rootless "/run/user/$(id -u 2>/dev/null)/docker.sock" # rootless
) )
for p in "${candidates[@]}"; do for p in "${candidates[@]}"; do
[ -S "$p" ] && { echo "$p"; return 0; } [ -S "$p" ] && { echo "$p"; return 0; }
done done
return 1 return 1
} }
HOST_SOCK=$(detect_docker_sock) HOST_SOCK=$(detect_docker_sock)
if [ -n "$HOST_SOCK" ]; then if [ -n "$HOST_SOCK" ]; then
if [ "$HOST_SOCK" != "/var/run/docker.sock" ]; then if [ "$HOST_SOCK" != "/var/run/docker.sock" ]; then
# 只改宿主侧路径(冒号左边),容器内仍为 /var/run/docker.sock # 只改宿主侧路径(冒号左边),容器内仍为 /var/run/docker.sock
ESCAPED_SOCK=$(printf '%s' "$HOST_SOCK" | sed -e 's/[\/&|]/\\&/g') ESCAPED_SOCK=$(printf '%s' "$HOST_SOCK" | sed -e 's/[\/&|]/\\&/g')
if [[ "$OSTYPE" == "darwin"* ]]; then if [[ "$OSTYPE" == "darwin"* ]]; then
sed -i '' "s|- /var/run/docker.sock:/var/run/docker.sock|- ${ESCAPED_SOCK}:/var/run/docker.sock|g" docker-compose.yml sed -i '' "s|- /var/run/docker.sock:/var/run/docker.sock|- ${ESCAPED_SOCK}:/var/run/docker.sock|g" docker-compose.yml
else
sed -i "s|- /var/run/docker.sock:/var/run/docker.sock|- ${ESCAPED_SOCK}:/var/run/docker.sock|g" docker-compose.yml
fi
echo "已检测到 Docker socket: $HOST_SOCK,已更新 docker-compose.yml 挂载路径"
else else
sed -i "s|- /var/run/docker.sock:/var/run/docker.sock|- ${ESCAPED_SOCK}:/var/run/docker.sock|g" docker-compose.yml echo "Docker socket 路径正常: /var/run/docker.sock"
fi fi
echo "已检测到 Docker socket: $HOST_SOCK,已更新 docker-compose.yml 挂载路径"
else else
echo "Docker socket 路径正常: /var/run/docker.sock" echo "警告: 未检测到 Docker socket。请确认 Docker 正在运行,"
echo " 并手动编辑 docker-compose.yml,将两处 '- /var/run/docker.sock:/var/run/docker.sock'"
echo " 左侧改成宿主机实际的 socket 路径。"
fi fi
else
echo "警告: 未检测到 Docker socket。请确认 Docker 正在运行,"
echo " 并手动编辑 docker-compose.yml,将两处 '- /var/run/docker.sock:/var/run/docker.sock'"
echo " 左侧改成宿主机实际的 socket 路径。"
fi fi
# ========== 完成 ========== # ========== 完成 ==========
echo "" echo ""
echo "配置下载成功! 后续操作:" echo "配置下载成功! 后续操作:"
echo " 1. 预热沙盒: docker compose --profile prepull pull opensandbox-agent-sandbox-image opensandbox-execd-image opensandbox-egress-image" if [ "$DEPLOY_VERSION" != "main" ]; then
echo " 2. 启动服务: docker compose up -d" echo " 1. 预热沙盒: docker compose --profile prepull pull opensandbox-agent-sandbox-image opensandbox-execd-image opensandbox-egress-image"
echo " 3. 开放端口: 3000, 9000, 3003" echo " 2. 启动服务: docker compose up -d"
echo " 4. 访问服务: http://localhost:3000" echo " 3. 开放端口: 3000, 9000, 3003"
echo " 5. 登录服务: 默认账号为 'root', 密码为: '1234'" echo " 4. 访问服务: http://localhost:3000"
echo " 6. 配置模型: 在 '账号-模型提供商' 页面,进行模型配置" echo " 5. 登录服务: 默认账号为 'root', 密码为: '1234'"
echo " 6. 配置模型: 在 '账号-模型提供商' 页面,进行模型配置"
else
echo " 1. 启动服务: docker compose up -d"
echo " 2. 开放端口: 3000, 9000, 3003"
echo " 3. 访问服务: http://localhost:3000"
echo " 4. 登录服务: 默认账号为 'root', 密码为: '1234'"
echo " 5. 配置模型: 在 '账号-模型提供商' 页面,进行模型配置"
fi
echo "" echo ""
echo "详细文档: https://doc.fastgpt.cn/self-host/deploy/docker" echo "详细文档: https://doc.fastgpt.cn/self-host/deploy/docker"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment