0
0
0

阿里云 ECS 与 Workbench CLI

2026-09-13
2026-09-13
文章摘要
|

来源:intranet-tunnel/docs/AGENTS-ARCHIVE.md## intranet-tunnel 云服务器部署(2026-09-12)· 完整版(原文 2191 字符)

intranet-tunnel 云服务器部署(2026-09-12)· 完整版

(2026-09-13 自工作区 AGENTS.md 的「intranet-tunnel 云服务器部署(2026-09-12 实测)」一节 逐字移出;AGENTS.md 里只留判据与指针。移出原因是指令字节预算,不是内容无用。)

部署时踩的坑(均已实测确认)

  1. compose 缺 certs/backups 挂载tunnel-server 只挂了 tunnel-data:/app/data

注释却写「宿主机 ./certs 即容器 /app/certs」——该映射并不存在。 Dockerfile 为 /app/certs 声明了匿名卷,证书不会丢,但宿主机 ./certs 恒为空, 而前置 nginx 读的正是那里。已补 ./certs:/app/certs./backups:/app/backups

  1. bind mount 后必须 chown 10001:10001:容器以 USER tunnel(uid 10001)运行,

匿名卷会继承镜像内属主,bind mount 不会。宿主机目录属 root 时报 open certs/acme_account.key: permission denied,且日志不断刷「服务端启动失败」并无限重启

  1. 面板「外网访问」开关以数据库为准.envPANEL_OUTSIDE_ACCESS

只在 system_settings首次初始化时写入,运行期读表里的 panel.outside_access。 于是形成鸡生蛋(改设置要进面板、进面板要改设置),只能直接改库: update system_settings set setting_value='true' where setting_key='panel.outside_access'; 注意列名是 setting_key / setting_value不是 key / value

  1. 项目自带的 DNS-01 在阿里云不可用cert/acme.go 把 ACME 授权标识符

直接当作 DNS 托管主域传给服务商,对 tunnel.sushike.cloudInvalidDomainName.NoExist(阿里云要求 DomainName 必须是托管主域 sushike.cloud)。 本次改用 acme.sh--dns dns_ali)签发,续期走 acme.sh 自带 cron。 不要把该证书再导入面板——两套续期会互相干扰。

  1. 源码落后于运行镜像:面板 API 要求传 dns_provider / dns_credentials

但仓库源码的 handleCreateCert 并未把这些字段传给签发器,且该报错文案在源码中根本不存在。 改后端之前先确认镜像与源码的版本关系,别默认两者一致。

Workbench CLI 的两个传参坑

  1. 远程命令里以 - 开头的 token 会被 workbench 当成自己的 flag

bad flag syntax: ---,或 unknown shorthand flag: 'l' in -l(后者来自 wc -l)。 根因是 PowerShell 5.1 把多行字符串传给原生程序时会拆分参数。 对策:远程脚本写成文件上传,再用 sh /path/script.sh 这种极简命令执行。 同理 upload 有覆盖保护(默认答案 No,非交互直接终止),重新上传前先 rm 远程文件。

  1. exec 的 stdout 会被截断psql 的对齐表格尤其明显;

需要完整输出时重定向到文件再 cat

阿里云 API 手写签名的排序陷阱

  1. 参数排序必须用 Ordinal(ASCII)。PowerShell 的 Sort-Object 默认是

不区分大小写的文化排序,会把 TTL 排到 Timestamp 之后 (文化排序比较 ttl vs timestampi < t),而阿里云要求 ASCII 序 ('T'=0x54 < 'i'=0x69)。症状是 SignatureDoesNotMatch。 正确写法:[array]::Sort($arr, [System.StringComparer]::Ordinal)。 隐蔽之处:参数名首字母各不相同时两种排序结果一致(所以 ECS 调用正常), 只有出现 TTL/Timestamp/Type 这类同首字母参数才暴露。


来源:intranet-tunnel/deploy/cloud/BAOTA-DEPLOY.md## 七、Workbench CLI 的两个传参坑(用本工具部署时必踩)(原文 408 字符)

七、Workbench CLI 的两个传参坑(用本工具部署时必踩)

  1. 远程命令里以 - 开头的 token 会被 workbench 当成自己的 flag。

报错形如 bad flag syntax: ---unknown shorthand flag: 'l' in -l(后者来自 wc -l)。 PowerShell 5.1 把多行字符串传给原生程序时会拆分参数。 对策:把远程脚本写成文件上传,再用 sh /path/script.sh 这种极简命令执行。

  1. upload 有覆盖保护,默认答案为 No,非交互场景会直接终止。

重新上传前先 rm 远程同名文件。

另:exec 的 stdout 会被截断,psql 的对齐表格尤其明显, 需要完整输出时把结果重定向到文件再 cat


支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

评论