📦 Dev Serve — 一键子域开发服务

v1.0.0

基于 tmux 启动本地开发服务器,并借助 Caddy 自动生成通配符子域名反向代理,实现多项目并行开发、端口自动分配与域名隔离。

0· 405·3 当前·3 累计
by @brennerspear (BrennerSpear)·MIT-0
下载技能包
License
MIT-0
最后更新
2026/4/14
0
安全扫描
VirusTotal
可疑
查看报告
OpenClaw
可疑
medium confidence
代码功能与描述基本一致(管理 tmux 开发服务器并编辑 Caddy 路由),但元数据未声明必需环境变量与二进制依赖,且脚本会侵入式修改用户 Caddyfile 及项目配置,整体不一致,需谨慎。
评估建议
在安装/运行此技能之前:1) 请自行检查提供的 scripts/dev-serve.sh 脚本——它会编辑您的 ~/.config/caddy/Caddyfile 并可能修补您仓库中的源文件(vite 配置)。2) 在运行前设置并验证 DEV_SERVE_DOMAIN;如果未设置此环境变量脚本将退出(注册表元数据未声明此要求)。3) 备份您的 Caddyfile 和您关心的任何仓库文件。4) 确保 Caddy 管理 API(http://localhost:2019)只能在本地访问,不能暴露到不受信任的网络——脚本会将您的 Caddyfile POST 到该端点。5) 确认所需的二进制文件存在(tmux、jq、curl、lsof、sed、grep),并在可接受修改反向代理配置和运行任意开发命令的机器上运行脚本。6) 优先从命名且可信的来源或仓库获取此工具(主页/来源未知);如果提供了作者或规范仓库,请在验证后重新评估。如果元数据被修正为列出所需的环境变量/二进制文件,且脚本包含安全防护(确认提示或试运行模式),我的信心将会增加。...
详细分析 ▾
用途与能力
名称与描述与脚本行为一致:启动 tmux 会话、选端口、编辑 Caddyfile、调用 Caddy 管理 API、修补项目配置(如 vite)。但注册元数据未声明必需环境变量或二进制,而脚本需 DEV_SERVE_DOMAIN 并依赖 tmux、jq、curl、sed/awk/grep/lsof 等,缺失声明造成不一致,降低信任度。
指令范围
SKILL.md 与脚本指引用户复制脚本,将:修改 Caddyfile、POST 到 Caddy 管理 API、自动修补源码(vite 配置)、创建/销毁 tmux 会话,并把状态写入 ~/.config/dev-serve/state.json。这些行为在功能范围内,但属侵入式编辑,未要求用户事前确认或备份,应明确提示。
安装机制
无自动安装规范,仅提示用户手动 cp 脚本到 ~/.local/bin,降低风险。脚本为本地文件,运行前可完整审阅。
凭证需求
脚本依赖 DEV_SERVE_DOMAIN(并读取 CADDY_ADMIN、CADDYFILE、DEV_SERVE_STATE_DIR、DEV_CMD),但注册元数据未列出任何必需环境变量或主凭证,且未声明所需二进制,存在声明缺失。脚本不请求外部凭据,与其功能相符。
持久化与权限
技能未请求 always:true,也不要求提权。但会修改用户文件(Caddyfile 及仓库配置)并通过 localhost:2019 重载 Caddy;该 API 应受保护。这些行为对功能必要,若在共享或暴露主机运行,影响面增大。
安全有层次,运行前请审查代码。

License

MIT-0

可自由使用、修改和再分发,无需署名。

运行时依赖

无特殊依赖

版本

latestv1.0.02026/2/25

Initial publish

可疑

安装命令

点击复制
官方npx clawhub@latest install dev-serve
镜像加速npx clawhub@latest install dev-serve --registry https://cn.longxiaskill.com

技能文档

# dev-serve — 一条命令搞定开发服务器托管 在 tmux 会话中启动开发服务器,并通过 Caddy 在 .YOUR_DOMAIN 暴露。一条命令启动,一条命令关闭。 ## 设置 1. 安装脚本: ``bash cp scripts/dev-serve.sh ~/.local/bin/dev-serve chmod +x ~/.local/bin/dev-serve ` 2. 设置你的域名(二选一): - 在 shell 配置中导出 DEV_SERVE_DOMAIN - 或编辑脚本中的 DOMAIN 变量 3. 依赖要求: - Caddy 已运行,支持通配符 DNS + TLS(见 caddy 技能) - tmuxjqcurl - Caddy 管理 API 监听 localhost:2019 ## CLI `bash dev-serve up [port] # 启动开发服务器 + 添加 Caddy 路由 dev-serve down # 停止开发服务器 + 移除 Caddy 路由 dev-serve ls # 列出活跃的开发服务器 dev-serve restart # 重启开发服务器(保留 Caddy 路由) ` ## 工作原理 1. 从仓库文件夹名生成子域名(~/projects/myappmyapp.YOUR_DOMAIN) 2. 从 package.jsonscripts.dev 自动检测开发命令(支持 vite、next、nuxt、sveltekit) 3. 若存在 vite 配置文件,自动修补 allowedHosts 4. 在名为 dev- 的 tmux 会话中启动开发服务器,带 --host 0.0.0.0 --port 5. 向 Caddyfile 添加路由 + 仪表板链接 6. 通过管理 API 重载 Caddy(无需 sudo,无需重启) 7. 端到端验证:等待开发服务器监听,再轮询 HTTPS 直到返回 2xx/3xx(最长 90 秒) ## 示例 `bash # 使用自动分配端口(从 5200 起,跳过已被占用的端口) dev-serve up ~/projects/myapp # → https://myapp.YOUR_DOMAIN # 指定端口 dev-serve up ~/projects/myapp 5200 # 覆盖开发命令 DEV_CMD="bun dev" dev-serve up ~/projects/myapp 5300 # 停止并清理 dev-serve down myapp # 查看运行列表 dev-serve ls ` ## 配置 | 变量 | 默认值 | 说明 | |----------|---------|-------------| | DEV_SERVE_DOMAIN | (必须设置) | 你的通配符域名(如 mini.example.com) | | DEV_SERVE_STATE_DIR | ~/.config/dev-serve | 存储状态 JSON 的目录 | | CADDYFILE | ~/.config/caddy/Caddyfile | Caddyfile 路径 | | CADDY_ADMIN | http://localhost:2019 | Caddy 管理 API 地址 | | DEV_CMD | (自动检测) | 覆盖开发服务器命令 | ## 端口约定 - 永久服务: 3100 段(直接在 Caddyfile 管理) - 开发服务器: 5200+(由 dev-serve 管理,自动分配) ## Vite allowedHosts Vite 会屏蔽来自未识别主机名的请求。执行 dev-serve up 时,会自动修补 vite.config.ts(或 .js/.mts/.mjs)以添加子域名。若自动修补失败,会提示手动修复方法。 ## 架构 ` 浏览器(Tailscale / 局域网 / 等) → DNS: *.YOUR_DOMAIN → 你的服务器 IP → Caddy(自动 HTTPS 证书) → reverse_proxy localhost: → 开发服务器(tmux 会话内) ` ## 配套技能 - caddy —— 必需。配置带通配符 TLS 的 Caddy 反向代理。 ## 故障排查 开发服务器未启动: `bash tmux attach -t dev- # 查看发生了什么 ` 证书未下发(curl 退出码 35): 等待 30-60 秒,让 DNS-01 验证完成。检查 tail -20 /var/log/caddy-error.logCaddy 重载失败: `bash caddy reload --config ~/.config/caddy/Caddyfile --address localhost:2019 ` Vite 返回 403: 子域名未加入 allowedHosts。手动在 vite.config.ts 中添加: `ts server: { allowedHosts: ['myapp.YOUR_DOMAIN'] } ``

数据来源ClawHub ↗ · 中文优化:龙虾技能库