跳转到内容

密钥和环境文件

Tarsail 只传输你显式配置的密钥文件。

它不是密钥管理器。它不会生成、加密、轮换、备份、验证或审计密钥值。它只通过 SSH 复制配置的文件,并设置配置的文件权限。

Tarsail 有两个相关配置区域:

compose:
file: compose.yaml
env_file:
source: .deploy/prod.env
target: shared/.env
mode: 600
secrets:
- source: .deploy/app.key
target: shared/secrets/app.key
mode: 600

compose.env_file 会通过 --env-file 传给 Docker Compose。

secrets 是上传的普通文件。Compose 服务可以挂载或读取它们,但 Tarsail 不会自动把它们传给 Compose。

部署机器拥有运行时环境文件时,使用 compose.env_file.source

compose:
file: compose.yaml
env_file:
source: .deploy/production.env
target: shared/.env
mode: 600

部署时,Tarsail 会把 .deploy/production.env 上传到:

<target.path>/shared/.env

远端 Compose 会收到:

Terminal window
--env-file shared/.env

如果环境文件由其他流程在服务器上创建,省略 source

compose:
file: compose.yaml
env_file:
target: shared/.env

这种模式下:

  • doctor 会检查 shared/.env 是否存在;
  • deploy 不会上传本地环境文件;
  • Compose 仍然会收到 --env-file shared/.env

使用 secrets 配置应该存在于 shared/ 下的文件:

secrets:
- source: .deploy/htpasswd
target: shared/auth/htpasswd
mode: 600
- source: .deploy/tls/fullchain.pem
target: shared/tls/fullchain.pem
mode: 644
- source: .deploy/tls/privkey.pem
target: shared/tls/privkey.pem
mode: 600

target 必须位于 shared/ 下。

Compose 服务可以挂载 shared 文件:

services:
reverse-proxy:
image: nginx:1.27-alpine
volumes:
- ./shared/tls/fullchain.pem:/etc/nginx/tls/fullchain.pem:ro
- ./shared/tls/privkey.pem:/etc/nginx/tls/privkey.pem:ro
- ./current/files/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro

Tarsail 从 <target.path> 运行 Compose,因此 ./shared/... 指向远端 shared 目录,./current/... 指向当前激活发布。

默认权限:

mode: 600

可接受格式:

600
0644

私密文件使用 600。只有公钥证书这类普通读取安全的文件才使用 644

把真实文件放在被忽略的目录里:

.deploy/
production.env
app.key
tls/
fullchain.pem
privkey.pem

示例 .gitignore

.deploy/*
!.deploy/.gitignore
!.deploy/README.md

提交占位文件:

.env.example
.deploy/README.md

Tarsail 会对命令输出和错误中的常见敏感模式做脱敏。这可以降低日志里意外泄漏的概率,但不能替代谨慎的密钥处理。

不要把脱敏当成安全边界。

Tarsail 不会:

  • 打印环境文件内容;
  • 把配置的环境文件放进发布包;
  • 把配置的密钥文件放进发布包;
  • 存储 SSH 密码;
  • 上传 SSH 私钥;
  • 自动发现 .env 文件;
  • 扫描项目里的密钥;
  • 轮换泄漏凭据;
  • 加密 shared/
  • 备份 shared/

简单项目建议:

  1. 把生产环境文件放在 .deploy/
  2. .deploy/* 加入 .gitignore
  3. 配置 compose.env_file.source
  4. 使用 mode: 600
  5. 尽量用 SSH 密钥认证部署;
  6. 任何意外提交或贴到公开日志里的密钥都要轮换。

更严格的环境可以在 Tarsail 外部预先下发 shared/.env 和密钥文件,然后只在配置里写远端 target 路径。这样 Tarsail 只验证文件存在,不负责传输密钥。