密钥和环境文件
Tarsail 只传输你显式配置的密钥文件。
它不是密钥管理器。它不会生成、加密、轮换、备份、验证或审计密钥值。它只通过 SSH 复制配置的文件,并设置配置的文件权限。
两类密钥路径
Section titled “两类密钥路径”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: 600compose.env_file 会通过 --env-file 传给 Docker Compose。
secrets 是上传的普通文件。Compose 服务可以挂载或读取它们,但 Tarsail 不会自动把它们传给 Compose。
上传环境文件
Section titled “上传环境文件”部署机器拥有运行时环境文件时,使用 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 会收到:
--env-file shared/.env预先下发的环境文件
Section titled “预先下发的环境文件”如果环境文件由其他流程在服务器上创建,省略 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: 600target 必须位于 shared/ 下。
挂载上传的密钥
Section titled “挂载上传的密钥”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:roTarsail 从 <target.path> 运行 Compose,因此 ./shared/... 指向远端 shared 目录,./current/... 指向当前激活发布。
默认权限:
mode: 600可接受格式:
6000644私密文件使用 600。只有公钥证书这类普通读取安全的文件才使用 644。
本地文件安全
Section titled “本地文件安全”把真实文件放在被忽略的目录里:
.deploy/ production.env app.key tls/ fullchain.pem privkey.pem示例 .gitignore:
.deploy/*!.deploy/.gitignore!.deploy/README.md提交占位文件:
.env.example.deploy/README.mdTarsail 会脱敏什么
Section titled “Tarsail 会脱敏什么”Tarsail 会对命令输出和错误中的常见敏感模式做脱敏。这可以降低日志里意外泄漏的概率,但不能替代谨慎的密钥处理。
不要把脱敏当成安全边界。
Tarsail 永远不会做什么
Section titled “Tarsail 永远不会做什么”Tarsail 不会:
- 打印环境文件内容;
- 把配置的环境文件放进发布包;
- 把配置的密钥文件放进发布包;
- 存储 SSH 密码;
- 上传 SSH 私钥;
- 自动发现
.env文件; - 扫描项目里的密钥;
- 轮换泄漏凭据;
- 加密
shared/; - 备份
shared/。
推荐生产实践
Section titled “推荐生产实践”简单项目建议:
- 把生产环境文件放在
.deploy/; - 将
.deploy/*加入.gitignore; - 配置
compose.env_file.source; - 使用
mode: 600; - 尽量用 SSH 密钥认证部署;
- 任何意外提交或贴到公开日志里的密钥都要轮换。
更严格的环境可以在 Tarsail 外部预先下发 shared/.env 和密钥文件,然后只在配置里写远端 target 路径。这样 Tarsail 只验证文件存在,不负责传输密钥。