本指南介绍在 Linux 系统采用本地方式安装 openJiuwen。本地高级安装提供两种方法:
- 方法一:使用一键安装部署脚本:自动完成大部分安装和配置工作,包括前后端和所有依赖服务,简化安装流程,适合快速部署。
- 方法二:全部手动安装(不推荐):需要手动安装和配置所有依赖服务,适合需要灵活调整配置的开发者。
一、环境准备
请确保机器满足以下要求:
-
硬件:
- CPU:最低 2 核,推荐 4 核及以上
- RAM:最低 4GB,推荐 8GB 及以上
-
操作系统:
- Ubuntu:最低 Ubuntu 20.04,推荐 Ubuntu 22.04 (Jammy) 及以上
注意:Ubuntu 官方与主流软件源已停止支持 Ubuntu 20.04 (Focal) 及以下版本系统。
- Ubuntu:最低 Ubuntu 20.04,推荐 Ubuntu 22.04 (Jammy) 及以上
二、安装方法
方法一:使用一键安装部署脚本
一键安装脚本可以自动完成基础工具检查、代码拉取、环境配置和服务启动等步骤,大幅简化安装流程。
1. 获取安装脚本
- 下载 安装包脚本,安装包脚本包含以下文件:
setup.sh:主安装脚本,串联整个安装流程utils.sh:公共工具check_curl.sh:检查 curl 是否安装,未安装则安装 curlcheck_git.sh:检查 Git 是否安装,未安装则安装 Gitcheck_nodejs.sh:检查 Node.js 是否安装,未安装则通过 NVM 安装 Node.jscheck_python.sh:检查 Python 是否安装,未安装则安装 Pythoncheck_mysql.sh:检查 MySQL 是否安装,未安装则安装 MySQLconfig_mysql.sh:配置 MySQL(创建数据库、用户等)manage_service.sh:服务管理,管理 Runtime、后端与前端的启动、停止、重启与状态user_config.sh:用户配置文件(可选,包含代理、uv 源、NVM 镜像、npm 源、数据库连接地址等)
2. 配置代理、uv 源、NVM 镜像、npm 源与数据库地址(可选)
如果您的网络环境需要通过代理访问外网,或者需要使用自定义的 uv 源、NVM Node.js 镜像、npm 源,或需要指定数据库服务的主机与端口(例如远程 MySQL、Docker 映射端口),可以在 user_config.sh 文件中进行配置:
-
打开
user_config.sh文件,修改以下变量:# 代理配置(可选) HTTP_PROXY="" # HTTP 代理地址,例如 http://127.0.0.1:7890 HTTPS_PROXY="" # HTTPS 代理地址,例如 http://127.0.0.1:7890 SSL_VERIFY="" # 可选:true/false(对应 git http.sslVerify) # uv 源配置(可选) UV_INDEX="" # uv 源地址,例如 https://pypi.tuna.tsinghua.edu.cn/simple UV_TRUSTED_HOST="" # 信任的主机地址,例如 pypi.tuna.tsinghua.edu.cn # NVM Node.js 下载镜像(可选,安装 Node.js 时使用) NVM_NODEJS_ORG_MIRROR="" # 例如 https://npmmirror.com/mirrors/node # npm 源配置(可选) NPM_REGISTRY="" # npm 源地址,例如 https://registry.npmmirror.com # 数据库连接配置(可选) DB_HOST="" # 留空默认 127.0.0.1 DB_PORT="" # 留空默认 3306 -
代理配置说明:
- 不需要代理:保持变量为空即可(脚本会自动跳过代理配置)
- 需要代理:填写完整代理地址,例如
http://127.0.0.1:7890 - 带认证的代理:支持用户名密码,例如
http://user:pass@proxy.example.com:8080 - SSL 验证:
SSL_VERIFY设置为true或false,true表示开启 Git 的 SSL 证书验证,false为不开启。
-
uv 源配置说明:
- 不需要配置 uv 源:保持
UV_INDEX和UV_TRUSTED_HOST为空即可(脚本会使用 uv 默认源) - 需要配置 uv 源:建议同时设置
UV_INDEX和UV_TRUSTED_HOST两个参数 - 常用国内镜像源示例:
- 清华大学:
https://pypi.tuna.tsinghua.edu.cn/simple,信任主机:pypi.tuna.tsinghua.edu.cn - 阿里云:
https://mirrors.aliyun.com/pypi/simple/,信任主机:mirrors.aliyun.com - 中科大:
https://pypi.mirrors.ustc.edu.cn/simple/,信任主机:pypi.mirrors.ustc.edu.cn
- 清华大学:
- 不需要配置 uv 源:保持
-
NVM Node.js 镜像说明:
- 不需要配置:保持
NVM_NODEJS_ORG_MIRROR为空,使用 nvm 默认源(nodejs.org) - 需要加速或无法访问默认源:可配置为
https://npmmirror.com/mirrors/node等镜像,供 check_nodejs.sh 安装 Node.js 时使用。
- 不需要配置:保持
-
npm 源配置说明:
- 不需要配置 npm 源:保持
NPM_REGISTRY为空即可(脚本会自动跳过 npm 源配置,使用默认源) - 需要配置 npm 源:设置
NPM_REGISTRY为所需的 npm 源地址 - 常用国内镜像源示例:
- 淘宝镜像:
https://registry.npmmirror.com - 腾讯云:
https://mirrors.cloud.tencent.com/npm/ - 华为云:
https://repo.huaweicloud.com/repository/npm/
- 淘宝镜像:
- 不需要配置 npm 源:保持
-
数据库连接配置说明(
DB_HOST/DB_PORT):- 作用:使用的数据库在远程或非默认主机和端口时配置。
3. 运行安装脚本
-
进入脚本目录,赋予执行权限:
chmod +x *.sh -
运行主安装脚本:
# 默认使用 MySQL 数据库 ./setup.sh # 或指定使用 SQLite 数据库 ./setup.sh --db_type=sqlite -
脚本执行完成后,会输出后端和前端服务的PID、日志文件路径、前端页面访问地址,在浏览器中访问输出的页面访问地址即可进入openJiuwen界面。

4. 脚本常用参数说明
# 查看前后端服务状态和访问地址
./setup.sh --status
# 启动后端和前端服务
./setup.sh --start
# 停止后端和前端服务
./setup.sh --stop
# 重启后端和前端服务
./setup.sh --restart
# 查看脚本支持的所有参数
./setup.sh --help
方法二:全部手动安装(不推荐)
注意:此方法需要手动安装所有依赖服务,步骤复杂,不推荐使用。建议优先使用方法一或方法二。
进行正式安装前需先完成依赖的安装,再执行源码获取和安装等后续步骤。
1. 安装依赖(以下以 Ubuntu 22.04 为例)
1.1. 安装与配置 Git
-
运行以下命令安装 Git:
sudo apt update sudo apt install git -
请确认已获取 openJiuwen 代码仓 的访问权限,若无权限请及时申请。
-
在 gitcode 代码仓按照图示步骤 2 获取 Git 的全局配置,输入以下命令配置 Git:
git config --global user.name your_username git config --global user.email your_useremail
-
按照图示步骤 3 获取个人访问令牌,克隆代码时需要输入 gitcode 账号以及个人访问令牌。
-
安装过程需要多次 git 操作,建议配置凭证存储,避免认证错误:
git config --global credential.helper store
1.2. 安装 Node.js 和 npm
-
运行以下命令安装 Node.js 和 npm:
sudo apt update sudo apt install -y nodejs # 确认 node 与 npm 版本号 node -v && npm -v注意:部分 linux 系统软件源 nodejs 与 npm 版本较老,如 node 版本号低于 20.0 或 npm 版本号低于10.0,请参考 nodejs 官网 安装新版本。
1.3. 安装 Python 和 uv
-
运行以下命令安装 Python3.11:
sudo add-apt-repository ppa:deadsnakes/ppa sudo apt update sudo apt install python3.11 python3-pip注意:Deadsnakes PPA 已停止支持 Ubuntu 20.04 (Focal) 及以下版本系统。如您的系统为上述版本,请参考 Miniconda 官方指导 使用 conda 创建 Python 3.11 环境。
-
运行以下命令安装 uv:
pip3 install uv注意:若安装失败,请参考 uv 官方指导 。
1.4. 安装数据库
- SQLite vs MySQL:
- SQLite 无需额外安装和配置,适合开发和测试环境,但功能受限(如不支持高并发写入、无用户权限管理等)。
- MySQL 功能更完善,能够满足复杂场景的需求,因此在实际工程和生产环境中更推荐使用。
1.4.1 SQLite
- 说明:默认使用 SQLite,只需
.env.example保持DB_TYPE为sqlite即可直接启动后端服务,无需额外安装或配置。
1.4.2 MySQL
-
说明:若需使用 MySQL,请将
.env.example中的DB_TYPE改为mysql,并按照下列步骤完成 MySQL 的安装与配置。 -
运行以下命令安装 MySQL:
sudo apt update sudo apt install mysql-server sudo apt install libmysqlclient-dev pkg-config build-essential python3-dev -
安装完成后,运行以下命令登录 MySQL:
sudo mysql -u root -
在 MySQL 中执行以下命令创建数据库:
说明:
your_user_name、your_password需自行设置,后续配置 .env 文件将会用到。# 新建数据库 CREATE DATABASE openjiuwen_agent; CREATE DATABASE openjiuwen_ops; # Runtime(agent-runtime)使用的数据库,库名以该仓库 .env.example 为准(常见为 jiuwen_runtime) CREATE DATABASE jiuwen_runtime; # 新建 MySQL 用户 CREATE USER 'your_user_name'@'localhost' IDENTIFIED BY 'your_password'; # 用户授权并刷新 GRANT ALL PRIVILEGES ON openjiuwen_agent.* TO 'your_user_name'@'localhost'; GRANT ALL PRIVILEGES ON openjiuwen_ops.* TO 'your_user_name'@'localhost'; GRANT ALL PRIVILEGES ON jiuwen_runtime.* TO 'your_user_name'@'localhost'; FLUSH PRIVILEGES;
1.5. Milvus(可选组件)
-
说明:
.env.example默认使用 Chroma,只需保持INDEX_MANAGER_TYPE为chroma即可直接启动后端服务,无需额外安装或配置;若需使用 Milvus,请将.env.example中的INDEX_MANAGER_TYPE改为milvus,并参考 如何启用记忆及知识库功能 完成 Milvus 的安装配置。 -
Chroma vs Milvus:
- Chroma 无需额外安装,配置简单,只需要获取向量模型,适合快速体验,适合开发和测试环境。 向量模型的获取可参考 如何获取向量模型。
- Milvus 功能更完善,能够满足复杂场景的需求,因此在实际工程和生产环境中更推荐使用。
2. 部署 Runtime 服务
Runtime(agent-runtime)提供 Agent 运行态能力,为独立仓库。
2.1. 获取 Runtime 源码
-
在终端执行以下命令克隆源码并进入源码根目录:
git clone -b main https://gitcode.com/openJiuwen/agent-runtime.git cd agent-runtime
2.2. 配置 server 目录下的环境
-
进入
agent-runtime/server目录。 -
复制 .env 文件:
cp .env.example .env -
使用文本编辑器打开 .env 文件,请根据实际情况修改文件中以下变量的值(勿覆盖其他变量):
说明:
DB_HOST、DB_PORT、DB_USER、DB_PASSWORD、DB_NAME可替换为实际数据库信息,与上文 MySQL 步骤中新建的用户、密码等保持一致。若密码中包含特殊字符,可参考 特殊字符转义表 将特殊字符替换为 URL 编码。配置样例:
# 数据库类型(支持 mysql、sqlite) DB_TYPE=mysql # 配置数据库(样例) DB_HOST=localhost DB_PORT=3306 DB_USER=root DB_PASSWORD=root DB_NAME=jiuwen_runtime # 运行网络与路径(样例) IP=127.0.0.1 LOWCODE_IMAGE=swr.cn-north-4.myhuaweicloud.com/openjiuwen/studio-lowercode-agent-amd64:8.8.8 DEPLOY_DIR=/app/deploys DIST_DIR=/app/dist HOST=0.0.0.0 PORT=8186变量说明可参考如下表格。
变量名 变量说明 配置样例 DB_TYPE 数据库类型(支持 mysql、sqlite)mysqlDB_HOST 数据库主机地址 localhostDB_PORT MySQL 服务监听端口 3306DB_USER 数据库登录用户名 rootDB_PASSWORD 数据库登录密码 rootDB_NAME 要连接的数据库名称 jiuwen_runtimeIP 低码 agent 与 runtime-server 运行主机 IP 127.0.0.1LOWCODE_IMAGE 低码 agent 的容器镜像地址 swr.cn-north-4.myhuaweicloud.com/openjiuwen/studio-lowercode-agent-amd64:8.8.8DEPLOY_DIR 部署目录(存放部署过程产物) /app/deploysDIST_DIR 依赖包目录(存放运行低码 agent 所需 .whl)/app/distHOST 服务监听主机( 0.0.0.0表示允许所有网络地址访问)0.0.0.0PORT 服务启动端口号 8186
2.3. 运行 deploy.sh 安装依赖并启动服务
-
前置条件:已安装 Python 3.11、Git,且可在终端执行
uv。deploy.sh通常依赖uv创建虚拟环境并同步依赖。 -
在
server目录执行部署脚本(路径按你的克隆位置替换):cd /path/to/agent-runtime/server chmod +x deploy.sh ./deploy.sh
3. openJiuwen 安装
3.1. 获取源码
-
执行以下命令克隆源码并进入源码根目录:
git clone https://gitcode.com/openJiuwen/agent-studio.git cd agent-studio
3.2. 生成 AES 密钥(可选)
- 如果不需要对关键字段加密存储,可跳过当前步骤
- 运行以下命令生成密钥:
cd scripts bash build_AES_master_key.sh - 脚本执行完,会将密钥打屏输出,可按需使用,推荐作为环境变量使用并另行保存。
export SERVER_AES_MASTER_KEY_ENV=your_aes_key - 注意,AES密钥需要保持稳定,中途更换密钥会导致已加密数据无法解密。
3.3. 启动 openJiuwen
-
进入源码根目录;
-
复制 .env 文件:
cp .env.example .env -
请在 .env 文件中根据实际情况修改以下变量的值(勿覆盖其他变量):
说明:DB_HOST、DB_PORT 等变量的值可替换为实际数据库信息,DB_USER、DB_PASSWORD 为上文新建的 MySQL 用户与密码。如果密码中包含特殊字符,可参考 特殊字符转义表 将特殊字符替换为 URL 编码。
OBS 配置:单机/本地部署且不使用对象存储时,OBS 相关项(OBS_BUCKET、OBS_SERVER 等)在
.env.example中已留空,复制为.env后无需填写;仅在使用对象存储(如分布式部署)时再填写真实值,详见 分布式部署安装。# 配置数据库(样例) DB_HOST=localhost DB_PORT=3306 DB_USER=your_user_name DB_PASSWORD=your_password # 向量索引类型配置(样例,可选值:chroma、milvus,默认值:chroma) INDEX_MANAGER_TYPE=chroma # 记忆数据存储路径(样例,默认值:memory-data,可根据实际情况修改) MEMORY_DATA_PATH=memory-data # 配置Milvus(样例,仅当 INDEX_MANAGER_TYPE=milvus 时需要配置) MILVUS_HOST=127.0.0.1 MILVUS_PORT=19530 MILVUS_COLLECTION_NAME=memory_vector # 配置代码沙箱服务(样例,启动代码执行沙箱服务详情请见[问题二:如何启用沙箱功能]) CODE_SANDBOX_URL=http://localhost:8188/run # 配置插件服务(样例,启动插件服务详情请见[问题三:如何启用插件服务]) VITE_PLUGIN_SERVICE_URL=http://localhost:8185 VITE_PLUGIN_CONFIG_PATH=/config.json # Runtime 服务配置(样例) RUNTIME_HOST=localhost RUNTIME_PORT=8100变量说明可参考如下表格,如需选择 Milvus 启用记忆功能,请参考 如何启用记忆及知识库功能,如果选择 Chroma 启用记忆功能,只需要获取向量模型,可参考 如何获取向量模型。
变量名 变量说明 配置样例 DB_HOST 数据库的主机地址 localhostDB_PORT 数据库的端口号 3306DB_USER 数据库的用户名 your_user_nameDB_PASSWORD 数据库的密码 your_passwordINDEX_MANAGER_TYPE 向量数据库类型,可选值:chroma、milvus,默认值:chroma chromaMEMORY_DATA_PATH 记忆数据存储路径,默认值:memory-data memory-dataMILVUS_HOST Milvus服务的主机地址 127.0.0.1MILVUS_PORT Milvus服务的端口 19530MILVUS_COLLECTION_NAME Milvus服务的数据库名 memory_vectorCODE_SANDBOX_URL 代码沙箱服务地址 http://localhost:8188/runVITE_PLUGIN_SERVICE_URL 插件服务地址 http://localhost:8185VITE_PLUGIN_CONFIG_PATH 前端使用的插件服务配置文件 /config.jsonRUNTIME_HOST Runtime 服务访问主机(通常为本机 localhost)localhostRUNTIME_PORT Runtime 服务端口(需与 Runtime server 实际监听端口一致) 8100 -
在源码根目录下,运行以下命令启动后端服务,并耐心等待:
cd backend uv venv uv sync -
执行数据库版本标识命令,确认当前数据库版本:
# Agent数据库 alembic -n alembic_mysql_agent stamp head alembic -n alembic_mysql_ops stamp head # SQLite数据库 alembic -n alembic_sqlite_agent stamp head alembic -n alembic_sqlite_ops stamp head详细说明:以上命令用于标识当前数据库已是最新版本,方便后续进行数据库操作。需要分别对agent和ops数据库执行。如使用MySQL需执行alembic -n alembic_mysql_agent stamp head和alembic -n alembic_mysql_ops stamp head,关于alembic的使用方法参考DATABASE_MIGRATION_DEVELOPMENT_GUIDE.md
注意:如果持续卡死超过 20 分钟,请按下 “Ctrl + C”,尝试修改本目录下 “pyproject.toml” 文件中 [[tool.uv.index]] 的 url 值,切换成其他可用源后,再重新执行 “uv sync”。
注意:若执行
uv sync失败,可尝试:uv sync --native-tls强制使用系统原生TLS库(解决HTTPS下载兼容问题) -
创建日志目录并启动后端服务
mkdir -p logs/run source .venv/bin/activate python main.py启动成功后,会输出 "Application startup complete"。
说明:若需代码执行沙箱服务,可参考 如何启用沙箱功能 完成沙箱服务启动和配置。若需插件服务,可参考 如何启用插件服务 完成插件服务启动和配置。
-
新打开一个窗口,在源码根目录下,运行以下命令安装依赖:
cd frontend npm install注意:图示漏洞为 npm 官方已知漏洞,不影响后续运行。

-
运行以下命令启动前端服务:
npm run dev -
启动成功后会输出:
Local:本地访问地址
Network:网络访问地址
3.4. 访问系统
-
若在本地查看,ctrl+左键单击 本地访问地址 可在本地浏览器查看到 openJiuwen 的界面;或者复制上述 本地访问地址 到浏览器地址栏,按下“回车键”将看到 openJiuwen 的界面。
-
若在外部机器查看,复制上述 网络访问地址 到浏览器地址栏,按下“回车键”将看到 openJiuwen 的界面。
三、常见问题(FAQ)
问题一:如何启用记忆及知识库功能
记忆功能的体验与大模型的参数规模相关。
记忆及知识库功能支持 Chroma 和 Milvus 两种向量数据库,如果选择 Milvus,具体安装步骤可参考下文。
1. 启动 Milvus
-
启动 Milvus 推荐使用 Docker 方式,请参照 Docker 官方安装指南 以及 Docker Compose 官方安装指南 完成配置。
-
安装后请执行命令启动 Docker:
sudo systemctl start docker。 -
执行以下命令,将在当前目录下保存 “standalone_embed.sh” 脚本
curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh -
执行以下命令拉取镜像:
# x86 架构 docker pull swr.cn-north-4.myhuaweicloud.com/openjiuwen/milvusdb/milvus-amd64:v2.6.2# arm 架构 docker pull swr.cn-north-4.myhuaweicloud.com/openjiuwen/milvusdb/milvus-arm64:v2.6.2 -
将 “standalone_embed.sh” 文件内的 milvus 官方镜像名(比如:
milvusdb/milvus:v2.6.7) 内容修改为 对应的镜像名(X86机器镜像名:swr.cn-north-4.myhuaweicloud.com/openjiuwen/milvusdb/milvus-amd64:v2.6.2)。 -
修改完成后,执行以下命令运行,将 Milvus 作为 Docker 容器启动:
bash standalone_embed.sh start -
启动后,输入
docker ps -a命令可查看到名为 Milvus-standalone 的 docker 容器在19530端口启动。说明:若在部署过程中出现问题可参考 Milvus官方指导文档
-
若要停止 Milvus,请执行以下命令
bash standalone_embed.sh stop -
若启动之后使用记忆或知识库时出现如下报错信息
""Milvus 连接失败: <MilvusException: (code=2, message=Fail connecting to server on milvus-standalone:19530, illegal connection params or server unavailable)>"需修改.env中的MILVUS_HOST配置,与启动Milvus服务的IP保持一致
2. 获取向量模型
记忆及知识库功能的运行依赖向量模型,以下流程以华为云为例,介绍向量模型的获取步骤。
-
点击 链接 进入模型广场。
-
体验记忆及知识库功能请点击 “向量模型”,可根据需要自行选择向量模型,以下内容以 BGE-M3 为例。

-
找到合适的向量模型后点击推理调用,进入模型信息获取界面。

-
记录API地址、model参数。
-
点击 "API Key 管理",按照官方界面引导获取 API Key。
问题二:如何启用沙箱功能
若要使用代码插件或在工作流中运行代码节点,需要先启用沙箱服务,按以下步骤操作:
-
配置沙箱依赖环境
沙箱服务通过统一配置指定执行代码时使用的 Python、JavaScript 解释器及依赖包。若不配置,将使用系统默认的 Python 与 JavaScript 环境。
依赖配置文件路径:
- Python:
sandbox_server/sandbox/openjiuwen_sandbox_server/conf/dependency/pyproject.toml - JavaScript:
sandbox_server/sandbox/openjiuwen_sandbox_server/conf/dependency/package.json
在以上文件中配置好解释器版本与依赖列表后,在
sandbox_server/sandbox目录执行以下命令构建并安装依赖环境:python -m openjiuwen_sandbox_server.app.build_dependency默认安装目录为
/sandbox/dependencies。若需指定其它目录,请在执行上述命令前设置环境变量DEPENDENCY_DIR。 - Python:
-
启动沙箱服务
沙箱服务支持两种运行模式:
- local 模式:代码在宿主机上直接执行。
- sandbox 模式:代码在 bwrap 沙箱内执行,具备隔离与安全限制。
参考
sandbox_server/sandbox/.env.example,在sandbox_server/sandbox目录下创建.env文件,示例:HOST=0.0.0.0 PORT=5001 ENABLE_LINUX_SANDBOX=falseHOST与PORT为沙箱服务监听地址与端口;ENABLE_LINUX_SANDBOX为true时启用 sandbox 模式。启用 sandbox 模式时,需编辑沙箱配置文件sandbox_server/sandbox/openjiuwen_sandbox_server/conf/sandbox_config.yaml,示例配置如下:seccomp: # whitelist mode allow: x86_64: ["setsockopt", "mbind", "sched_getaffinity", "epoll_wait", "getcwd", "wait4", "pread64", "set_tid_address", "prlimit64", "capget", "pipe2", "eventfd2", "pkey_alloc", "madvise", "sysinfo", "readlink", "geteuid", "getegid", "statx", "access", "clone", "arch_prctl", "clone3", "execve", "open", "lstat", "stat", "newfstatat", "lseek", "getdents64", "write", "close", "openat", "read", "futex", "mmap", "brk", "mprotect", "munmap", "rt_sigreturn", "mremap", "getgid", "getuid", "getpid", "getppid", "gettid", "exit", "exit_group", "rt_sigaction", "sched_yield", "set_robust_list", "get_robust_list", "rseq", "clock_gettime", "gettimeofday", "nanosleep", "epoll_create1", "epoll_ctl", "clock_nanosleep", "pselect6", "time", "rt_sigprocmask", "sigaltstack", "getrandom", "mkdirat", "mkdir", "socket", "connect", "bind", "listen", "accept", "sendto", "recvfrom", "getsockname", "recvmsg", "getpeername", "ppoll", "uname", "sendmsg", "sendmmsg", "fstat", "fcntl", "fstatfs", "poll", "epoll_pwait", 'ioctl'] aarch64: ["statx", "getcwd", "readlinkat", "madvise", "sysinfo", "clone", "eventfd2", "pipe2", "fcntl", "prlimit64", "set_tid_address", "faccessat", "execve", "write", "close", "openat", "read", "lseek", "getdents64", "futex", "mmap", "brk", "mprotect", "munmap", "rt_sigreturn", "rt_sigprocmask", "sigaltstack", "mremap", "getuid", "getgid", "geteuid", "getegid", "getpid", "getppid", "gettid", "exit", "exit_group", "rt_sigaction", "sched_yield", "get_robust_list", "set_robust_list", "rseq", "epoll_create1", "clock_gettime", "gettimeofday", "nanosleep", "epoll_ctl", "clock_nanosleep", "pselect6", "timerfd_create", "timerfd_settime", "timerfd_gettime", "getrandom", "mkdirat", "socket", "connect", "bind", "listen", "accept", "sendto", "recvfrom", "recvmsg", "getsockname", "getpeername", "ppoll", "uname", "sendmmsg", "newfstatat", "fstat", "fstatfs", "epoll_pwait", "ioctl"] namespace: user: True net: False pid: True ipc: True uts: True cgroup: True mount: [ {src: '/lib', dst: '/lib', mode: 'read'}, {src: '/lib64', dst: '/lib64', mode: 'read'}, {src: '/usr/bin', dst: '/usr/bin', mode: 'read'}, {src: '/usr/lib', dst: '/usr/lib', mode: 'read'}, {src: '/usr/lib64', dst: '/usr/lib64', mode: 'read'}, {src: '/etc/resolv.conf', dst: '/etc/resolv.conf', mode: 'read'}, {src: '/usr/share/nodejs', dst: '/usr/share/nodejs', mode: 'read'}, {src: '/dev/urandom', dst: '/dev/urandom', mode: 'dev'}, ] sandbox: type: bubblewrap path: bwrap environment: PATH: /bin:/usr/bin timeout: 10 options: ['--proc', '/proc']配置项说明:
seccomp为沙箱内进程允许使用的系统调用白名单;namespace为需隔离的命名空间;mount为主机与沙箱内的目录映射,模式read/write/dev分别表示只读、读写与设备映射;sandbox指定沙箱类型与可执行路径(当前仅支持bubblewrap);environment为沙箱内进程的环境变量;timeout为单次任务最大执行时间(秒),超时将被强制终止;options为传递给bwrap的额外命令行参数。配置完成后,执行
sandbox_server/sandbox/openjiuwen_sandbox_server/server.py启动沙箱服务。 -
启动沙箱网关服务
参考
sandbox_server/gateway/.env.example,在sandbox_server/gateway目录下创建.env文件,示例:HOST=0.0.0.0 PORT=8188 SANDBOX_SERVER_URL=http://localhost:5001/runHOST与PORT为网关服务监听地址与端口;SANDBOX_SERVER_URL为第 2 步中已启动的沙箱服务运行地址。然后执行
sandbox_server/gateway/openjiuwen_sandbox_gateway/server.py启动沙箱网关服务。 -
配置应用侧网关地址
在项目的
.env中配置沙箱网关调用地址,例如:CODE_SANDBOX_URL=http://localhost:8188/run。
问题三:如何启用插件服务
若要配置插件,需开启插件服务,需要进行如下操作:
-
参考
plugin_server/openjiuwen_plugin_server文件,创建所需的插件,然后启动插件服务,即运行plugin_server/openjiuwen_plugin_server/run_restful.py脚本,其中uvicorn.run(app, host="0.0.0.0", port=8185)定义了插件服务的 IP 和端口。 -
启动插件服务后请在
.env文件中配置插件服务的路径,例如:VITE_PLUGIN_SERVICE_URL=http://localhost:8185
问题四:特殊字符转义表
| 字符 | URL编码 | 字符 | URL编码 | 字符 | URL编码 | 字符 | URL编码 | 字符 | URL编码 |
|---|---|---|---|---|---|---|---|---|---|
| 空格 | %20 | " | %22 | # | %23 | % | %25 | & | %26 |
| ( | %28 | ) | %29 | + | %2B | , | %2C | / | %2F |
| : | %3A | ; | %3B | < | %3C | = | %3D | > | %3E |
| ? | %3F | @ | %40 | \ | %5C | | | %7C | - | - |
问题五:本地安装为何默认使用http协议而非https协议
在本地安装方式下,系统默认通过HTTP协议进行通信。这一设计主要考虑到本地环境通常用于开发与测试,避免强制要求证书配置,从而降低初始使用门槛。 相比之下,Docker安装方式已预置了HTTPS支持,用户无需额外配置即可直接使用安全通信。 如需在本地环境启用HTTPS,开发者需根据实际部署需求自行完成证书生成与配置。