本地开发部署
本文档说明 SkillFlaw 基于源码工作区的本地开发流程,适用于本地开发、联调与文档贡献。
前置工具
开始前请确保已经安装:
gitmakeuv- Node.js 与 npm
- 如需验证 Compose 部署链路,请安装 Docker
1. 准备源码工作区
_10git clone https://github.com/cwinux/skillflaw.git_10cd skillflaw
复制环境模板:
_10cp .env.example .env
在初始化前,请先确认以下必需变量有效:
SKILLFLAW_DATABASE_URLSKILLFLAW_SECRET_KEY_FILE- 你测试所需的外部 API Key
本地 .env 配置清单
在本地开发场景下,应将核心基础设施配置显式写入 .env,以保证环境行为可预测且可复现。
PostgreSQL
本地后端开发必须使用 PostgreSQL。请确认 SKILLFLAW_DATABASE_URL 指向当前机器可访问的 PostgreSQL 实例,例如:
_10SKILLFLAW_DATABASE_URL=postgresql://skillflaw:skillflaw@localhost:5432/skillflaw
如果 SKILLFLAW_DATABASE_URL 中指定的数据库尚不存在,make init_db 会先尝试自动创建该数据库,再导入 schema 和初始化数据。连接串中的 PostgreSQL 用户必须具备 CREATE DATABASE 权限。
如果你还要在本地跑依赖 PostgreSQL 的后端测试,也建议同时配置独立测试库:
_10SKILLFLAW_TEST_DATABASE_URL=postgresql://skillflaw_test:123456@localhost:5432/skillflaw_test
Redis
如果本地运行时使用 Redis 缓存,请显式配置缓存模式与 Redis 连接:
_10SKILLFLAW_CACHE_TYPE=redis_10SKILLFLAW_REDIS_HOST=127.0.0.1_10SKILLFLAW_REDIS_PORT=6379_10SKILLFLAW_REDIS_DB=0_10SKILLFLAW_REDIS_CACHE_EXPIRE=3600_10SKILLFLAW_REDIS_PASSWORD=
如果本地开发不使用 Redis,请将 SKILLFLAW_CACHE_TYPE 设置为非 Redis 模式,例如 memory,并避免为后端配置不存在的 Redis 连接。
Store 相关配置
只有在你需要联调 Store 集成,或要验证依赖远端 Store 的上传、下载、点赞等链路时,才需要配置 Store 相关地址。此时至少应确认:
_10SKILLFLAW_STORE_URL=_10SKILLFLAW_DOWNLOAD_WEBHOOK_URL=_10SKILLFLAW_LIKE_WEBHOOK_URL=
如果当前本地开发不涉及 Store 功能,这些值可以留空。
本地文件存储
对于基于源码工作区的本地开发,建议显式指定存储引擎和本地目录,这样工作流文件、技能文件、图片和临时导出文件都会落到可预期的位置:
_10SKILLFLAW_FLOW_STORE_TYPE=local_10SKILLFLAW_FLOW_STORE_LOCAL_PATH=~/data/skillflow/storage/flow_10SKILLFLAW_SKILL_STORE_TYPE=local_10SKILLFLAW_SKILL_STORE_LOCAL_PATH=~/data/skillflow/storage/skill_10SKILLFLAW_PIC_STORE_TYPE=local_10SKILLFLAW_PIC_STORE_LOCAL_PATH=~/data/skillflow/storage/pic_10SKILLFLAW_TMP_STORE_TYPE=local_10SKILLFLAW_TMP_STORE_LOCAL_PATH=~/data/skillflow/storage/tmp
如果你把某个存储切换为 S3,则必须为该存储补齐对应的 bucket、endpoint、region 与访问凭据。
Skill 沙箱 / OpenSandbox
如果你要在本地验证 Skill 执行、AI 辅助 Skill 流程,或任何依赖沙箱运行时的能力,请显式配置 OpenSandbox 连接:
_10SKILLFLAW_SKILL_SANDBOX_OPENSANDBOX_DOMAIN=localhost:8080_10SKILLFLAW_SKILL_SANDBOX_OPENSANDBOX_PROTOCOL=http_10SKILLFLAW_SKILL_SANDBOX_OPENSANDBOX_API_KEY=_10SKILLFLAW_SKILL_SANDBOX_OPENSANDBOX_USE_SERVER_PROXY=false_10SKILLFLAW_SKILL_SANDBOX_OPENSANDBOX_REQUEST_TIMEOUT_SECONDS=600
这些值必须与后端实际可访问的 OpenSandbox 服务保持一致。如果所在环境使用不同的服务地址、协议或 API Key,请在执行 make backend 前完成更新。
本地开发中的安全沙箱说明
Skill 运行时执行与 MCP stdio 沙箱执行均通过沙箱服务完成,而不是直接在 SkillFlaw 后端主进程内运行不受信任代码。
- Skill 执行默认通过 Skill 沙箱服务接入 OpenSandbox。
- MCP 的 stdio 沙箱执行同样依赖 OpenSandbox,但会独立解析自己的沙箱镜像和运行时工作目录。
在本地联调这些能力时,应把沙箱视为必需运行时依赖,而不是可有可无的附加项。
Skill 如何使用沙箱
Skill 执行当前默认使用 opensandbox 后端。本地开发至少应确认以下事项:
SKILLFLAW_SKILL_SANDBOX_OPENSANDBOX_DOMAIN指向的 OpenSandbox 服务,SkillFlaw 后端能够访问SKILLFLAW_SKILL_SANDBOX_OPENSANDBOX_PROTOCOL与实际服务协议一致- 如目标环境启用了鉴权,
SKILLFLAW_SKILL_SANDBOX_OPENSANDBOX_API_KEY与目标环境保持一致 SKILLFLAW_SKILL_SANDBOX_OPENSANDBOX_REQUEST_TIMEOUT_SECONDS足以覆盖你当前要验证的 Skill 执行时长
如果你还要验证依赖自动安装、长时间运行脚本或文件导出行为,也建议把 Skill 沙箱运行限制显式写入 .env:
_10SKILLFLAW_SKILL_SANDBOX_CPUS=1.0_10SKILLFLAW_SKILL_SANDBOX_MEMORY_MB=512_10SKILLFLAW_SKILL_SANDBOX_PIDS_LIMIT=256_10SKILLFLAW_SKILL_SANDBOX_TIMEOUT_SECONDS=60_10SKILLFLAW_SKILL_SANDBOX_NETWORK=none_10SKILLFLAW_SKILL_SANDBOX_READ_ONLY_ROOT=true_10SKILLFLAW_SKILL_SANDBOX_TMPFS_ENABLED=true_10SKILLFLAW_SKILL_SANDBOX_WORKSPACE_ACCESS=rw_10SKILLFLAW_SKILL_SANDBOX_ENV_ALLOWLIST=[]
这些值应以你的实际验证范围为准。例如某个 Skill 在本地调试时必须访问外部网络,就需要显式调整 SKILLFLAW_SKILL_SANDBOX_NETWORK,而不能默认假设沙箱已经具备网络访问能力。
MCP 如何使用沙箱
MCP 沙箱执行会复用 Skill 沙箱的 OpenSandbox 连接配置,因此本地后端必须能够访问同一个 OpenSandbox 服务。同时,MCP 还需要补充自己的沙箱镜像配置,因为 MCP 会按服务语言选择不同镜像。
本地开发至少应配置以下三类方式之一:
- 使用共享 MCP 沙箱镜像:
SKILLFLAW_MCP_SANDBOX_IMAGE - 使用按语言拆分的镜像:
SKILLFLAW_MCP_SANDBOX_PYTHON_IMAGE、SKILLFLAW_MCP_SANDBOX_TYPESCRIPT_IMAGE - 使用镜像 repository/tag 组合:例如
SKILLFLAW_MCP_SANDBOX_PYTHON_IMAGE_REPOSITORY与SKILLFLAW_MCP_SANDBOX_PYTHON_IMAGE_TAG
示例:
_10SKILLFLAW_MCP_SANDBOX_BASE_DIR=~/.skillflaw/mcp-sandboxes_10SKILLFLAW_MCP_SANDBOX_PYTHON_IMAGE=ghcr.io/cwinux/skillflow_mcp_python:v1.0.1_10SKILLFLAW_MCP_SANDBOX_TYPESCRIPT_IMAGE=ghcr.io/cwinux/skillflow_mcp_ts:v1.0.1
MCP 沙箱镜像必须填写 Docker 镜像引用,不能填写 HTTP URL。如果你改为分别配置 repository 和 tag,也要保证二者和 OpenSandbox 实际可拉起的运行镜像一致。
沙箱配置要求
在本地测试 Skill 或 MCP 前,请至少确认以下要求:
- OpenSandbox 已完成部署,并且 SkillFlaw 后端可以访问。
.env中的 OpenSandbox 协议、域名和 API Key 与实际服务一致。- 沙箱镜像与当前要验证的运行语言一致。
- CPU、内存、进程数、超时、文件系统和网络限制与本地验证范围匹配。
- 任何需要传入 Skill 沙箱的环境变量,都应显式列入
SKILLFLAW_SKILL_SANDBOX_ENV_ALLOWLIST,不要依赖隐式继承。 - 如果你修改了沙箱镜像、运行镜像 repository/tag,或 OpenSandbox 的
execd_image,必须先重启沙箱服务再重新测试。
如果这些配置未保持一致,本地联调可能出现与实际产品行为不一致的结果,例如镜像解析失败、运行时启动失败、依赖缺失或沙箱超时。