部署文件与目录
安装是在一个部署目录里执行的。这些文件由 CLI 直接在目标主机上生成,不需要先下载到别的机器再拷过去。.env 缺失时 soln install 会从 .env.example 复制生成。
第 1 步:安装 CLI
npm install -g @soln/cli
- 成功:命令正常结束,没有
EACCES或404报错 EACCES: permission denied—— 全局安装目录无权限,可以改成用户级前缀:npm install -g @soln/cli --prefix "$HOME/.local",再把$HOME/.local/bin加进PATH;或者干脆不装全局,所有命令用npx @soln/cli404 Not Found—— 当前 npm registry 没有@soln/cli,用npm config get registry检查源,或向管理员索取内网仓库地址
sl help
- 成功:打印帮助,能看到
sl prepare、sl install、sl doctor、sl status、sl upgrade、sl rollback command not found: sl—— 全局 bin 目录不在PATH,执行npm prefix -g把它的bin目录加进去;或所有命令前面加npx @soln/cli
本页用到的命令都在 Soln CLI 里统一说明;那个页面还包括查询版本(soln version)、部署命令(prepare、doctor、install、status、upgrade、rollback)和退出码。
第 2 步:创建部署目录
本机部署(Docker Desktop,不要用 sudo):
mkdir -p "$HOME/soln-tenant-runtime"
cd "$HOME/soln-tenant-runtime"
Windows(PowerShell)对应命令:
New-Item -ItemType Directory -Force "$HOME\soln-tenant-runtime"
Set-Location "$HOME\soln-tenant-runtime"
服务器部署(Linux):
sudo mkdir -p /opt/soln-tenant-runtime
sudo chown "$USER" /opt/soln-tenant-runtime
cd /opt/soln-tenant-runtime
--dir 的路径怎么写
所有部署命令(prepare、doctor、install、status、upgrade、rollback)都接受 --dir <路径>,这个路径是部署目录本身,也就是放 docker-compose.yml 和 .env 的那个目录,不是某个文件。
deployment register、deployment prepare 和 deployment origin 必须显式填写 --dir。生命周期命令不写 --dir 时,CLI 用的是你当前所在的目录;所以上面 cd 进去之后,sl doctor 和 soln doctor --dir "$HOME/soln-tenant-runtime" 完全等价。
# 本机部署,即第 2 步创建的目录
soln doctor --dir "$HOME/soln-tenant-runtime"
# 服务器部署
soln doctor --dir /opt/soln-tenant-runtime
soln doctor --dir "$HOME\soln-tenant-runtime"
soln doctor --dir "D:\soln\tenant-runtime"
- 相对路径按当前所在目录解析,绝对路径直接使用
- 路径里有空格要加引号:
--dir "/Users/me/Soln Tenant Runtime" ~不要写在引号里:--dir "~/soln-tenant-runtime"会去找一个名字就叫~的目录。写成--dir "$HOME/soln-tenant-runtime",或者不加引号写成~/soln-tenant-runtime- 路径指错时,
sl doctor会报<dir>/docker-compose.yml的No such file or directory,以及<dir>/.env不存在;这只说明目录指错了,不代表主机有问题
第 3 步:通过 CLI 登记并生成文件
先按 CLI 部署登记与授权 登录并登记目标 Runtime,然后执行:
sl deployment prepare --dir '<部署目录>'
它从控制面登记和本地 .soln-install-setup.json 生成部署文件,无需手工填写租户 ID、Runtime ID 或 Agent 密钥。登记时选择 --deployment-target local|server 和 --deployment-mode singleMachine|externalServices;本机只支持单机模式。
已有文件会拒绝覆盖,只有检查过文件后才使用 prepare --force。已安装目录使用 sl upgrade。安装配置与控制面登记不一致时,先核对登记,不要手改安装配置里的身份信息。
第 4 步:确认文件已就位
ls -l docker-compose.yml .env.example reverse-proxy.conf \
cloudflared-config.yml agent.config.json
- 成功:五个文件都能列出来
No such file or directory—— 说明prepare不是在这个目录执行的,回到第 3 步
| 文件 | 内容 |
|---|---|
docker-compose.yml | 四个 Soln 产品与反向代理,单机模式下还包含 PostgreSQL、Temporal、MinIO |
.env.example | 部署需要的全部环境变量,权限 0600;安装时会用它生成 .env |
reverse-proxy.conf | 同源反向代理的 nginx 配置 |
cloudflared-config.yml | 可选的 Cloudflare Named Tunnel ingress;在 Runtime Origin 确定前主机名是占位符 |
storage-iam-policy.example.json | 外部服务模式下 Bucket 策略的起点 |
README.md | 生成的部署说明 |
隧道凭据放在 Compose 挂载的 secrets 目录里,可以提前建好:
mkdir -p secrets
chmod 0700 secrets
Compose 挂载的其他运行目录由 CLI 在安装时自动创建,不需要手工准备。
状态文件与自动生成的密钥
安装完成后,CLI 会把部署状态写入 .soln/deployment.json,权限 0600;该文件永远不包含 Agent 密钥,也不要手工编辑。安装时会自动替换缺失或仍为占位符的密钥:RUNTIME_SESSION_ENCRYPTION_KEY、SOLN_BACKUP_ENCRYPTION_KEY、TENANT_RUNTIME_INTERNAL_SECRET、LUNA_TOOL_APPROVAL_SECRET,以及单机模式下内置 PostgreSQL 和 MinIO 的密码。.env 需保持 0600。