📦 Dev Serve — 一键子域开发服务
v1.0.0基于 tmux 启动本地开发服务器,并借助 Caddy 自动生成通配符子域名反向代理,实现多项目并行开发、端口自动分配与域名隔离。
详细分析 ▾
运行时依赖
版本
Initial publish
安装命令
点击复制技能文档
# 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 技能) - tmux、jq、curl - Caddy 管理 API 监听 localhost:2019 ## CLI `bash dev-serve up [port] # 启动开发服务器 + 添加 Caddy 路由 dev-serve down # 停止开发服务器 + 移除 Caddy 路由 dev-serve ls # 列出活跃的开发服务器 dev-serve restart # 重启开发服务器(保留 Caddy 路由) ` ## 工作原理 1. 从仓库文件夹名生成子域名(~/projects/myapp → myapp.YOUR_DOMAIN) 2. 从 package.json 的 scripts.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.log。 Caddy 重载失败: `bash caddy reload --config ~/.config/caddy/Caddyfile --address localhost:2019 ` Vite 返回 403: 子域名未加入 allowedHosts。手动在 vite.config.ts 中添加: `ts server: { allowedHosts: ['myapp.YOUR_DOMAIN'] } ``