
portless 无交互环境指南CI 与任务运行器中没有 TTY 时如何正确启动【免费下载链接】portlessReplace port numbers with stable, named local URLs. For humans and agents.项目地址: https://gitcode.com/GitHub_Trending/por/portlessportless 是一款用稳定的命名本地 URL如https://myapp.localhost替代端口号的开发工具让人类和 AI Agent 都能通过固定域名访问本地应用。但把它放进CI 流水线或turborepo 任务运行器这类无 TTY 的无交互环境时直接运行portless往往会失败。这篇指南带你快速搞懂 portless 的非交互行为并给出 3 种正确启动方式让任务运行器零提示、秒失败、可诊断。为什么 portless 在没有 TTY 时会拒绝继续在本地终端里portless 启动代理proxy绑定 443 端口时可能需要sudo 提权此时它会弹出交互提示等你确认。但在 CI、脚本、任务运行器里根本没有人在确认。portless 的设计原则是无交互环境直接报错退出而不是挂起等待输入。这样 turborepo、CI 脚本能在第一时间拿到清晰错误信息而不是卡死半小时。环境portless 行为有 TTY 的终端且未设CI1正常交互可提示输入 sudo 密码无 TTYCI、脚本、任务运行器输出描述性错误并立即退出exit 1相关实现可参见 cli.ts 中的交互性判断与错误提示逻辑官方说明见 README.md。portless 如何判定非交互模式portless 的判定条件只有两个见 cli.tsprocess.stdin.isTTY为 false—— 标准输入不是终端管道、CI 环境常见CI1环境变量已设置—— 即使有 TTY也强制进入非交互模式 小贴士如果你的脚本其实可以交互比如本地 cron 有终端但被 CI 平台注入了CI1portless 也会按非交互处理。调试时可以先unset CI验证。最常见的报错场景是代理没在运行 需要 sudo端口 1024 没有 TTY。此时 portless 会打印两条出路# Option 1: 在终端里手动启动代理会提示 sudo sudo portless proxy start # Option 2: 使用非特权端口无需 sudo portless proxy start -p 1355其中1355是 portless 内置的回退端口常量见 cli-utils.ts。方式一先在交互终端预启动代理最快上手最朴素的做法代理由人启动应用由机器启动。在自己的终端执行sudo portless proxy start首次会生成本地 CA 并提示信任代理常驻后台后CI / 任务运行器里直接运行portless myapp next dev即可不再触发任何交互代理的启动配置端口、TLS、TLD会持久化复用重启机器后不会悄悄回退到默认值。适合开发机 本地任务运行器的组合。方式二用非特权端口 1355彻底绕开 sudo无 TTY 场景下最省心的一招让代理绑定 1355 等非特权端口全程不需要 sudo。portless proxy start -p 1355 # 之后访问 https://myapp.localhost:1355也可以用环境变量固化端口避免每次传参环境变量清单见 README.mdPORTLESS_PORT1355 portless proxy start⚠️ 注意非特权端口时URL 会带上:1355端口号。对本地开发无影响但如果你的框架需要把 URL 写入配置记得带上端口。方式三安装系统启动服务CI 常驻机器的推荐姿势如果目标机器比如自建 CI Runner、长期在线的开发服务器每次开机都需要代理最优雅的方案是让操作系统替你启动portless service install # 安装启动服务launchd / systemd / 任务计划程序 portless service status # 查看端口、HTTPS 模式、TLD 等状态 portless service uninstall # 卸载macOS / Linux 会安装 root 级服务开机即可绑定 443 端口Windows 则安装以 SYSTEM 运行的任务计划程序见 service.ts安装一次之后任何无 TTY 进程都能直接使用代理无需 sudo、无需预启动portless clean会自动清理该服务这也是 skills/portless/SKILL.md 中给 AI Agent 的建议任务运行器场景应预先确保代理可用。任务运行器turborepo集成清单针对 monorepo turborepo 的常见组合按下面 4 步检查即可✅确认代理已就绪跑一次portless service status或portless doctor确认代理存活✅在package.json中配置将真实命令放入独立脚本如dev: portlessdev:app: next dev完整写法见 README.md✅避免脚本内触发 sudo若代理尚未启动CI 会拿到两条出路的报错cli.ts此时按报错提示选择方式一或方式二✅需要时关闭 turbo 直连模式portless.json中可将turbo设为false改用直接子进程方式字段说明见 README.md无交互环境快速排障出问题时按顺序执行portless doctor # 检查代理、路由、DNS、CA 信任并给出修复建议 portless list # 查看当前活跃路由 portless prune # 清理上次崩溃会话残留的孤儿进程报错 no TTY is available for sudo走本文方式二或方式三报错 Proxy is already running ... different config先portless proxy stop再重启portless 在非交互环境下不会替你改配置而是直接退出历史背景早期版本曾在非交互终端如 IDE 任务运行器中自动启动失败已在 CHANGELOG.md 对应版本中修复总结场景推荐方式本地开发机 偶尔跑任务方式一终端预启动代理脚本 / 一次性 CI 任务方式二-p 1355非特权端口常驻 CI Runner / 服务器方式三portless service install记住一句话让需要人的事情sudo、信任 CA发生在终端里让需要机器的事情跑应用、注册路由发生在无 TTY 环境里。portless 用快速失败 清晰报错帮你在 CI 里第一时间定位问题而不是无声挂起。【免费下载链接】portlessReplace port numbers with stable, named local URLs. For humans and agents.项目地址: https://gitcode.com/GitHub_Trending/por/portless创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考