SuperAPI AI 工具集

env

部署与运维

查看项目

更新于 10-16 05:06

技能介绍

用途:帮助在 Kamal 的 deploy.yml 中正确配置环境变量,让明文值保持可读、密钥不进入版本控制,并能针对特定主机或角色注入变量。部署时 Kamal 会把变量传给启动容器的 docker run 命令。

主要能力:env 有两种写法。简单形式直接写键值对,适用于非敏感变量,例如 env:\n DATABASE_HOST: mysql-db1\n DATABASE_PORT: 3306。需要密钥时改用 clear 与 secret 形式:clear 下写键值映射,secret 下只列变量名列表,例如 env:\n clear:\n DB_USER: app\n secret:\n - DB_PASSWORD。clear 值直接传给 docker run,可提交到版本控制;secret 值存放在主机上的 env 文件,不直接传入容器,不应提交。

使用方式:先读现有 config/deploy.yml 的 env 块及 servers 角色、accessories 下的 env,再读 .kamal/secrets(以及 .kamal/secrets-common、.kamal/secrets.<destination>)确认已定义的密钥名;逐个判断变量是否敏感,再决定放 clear 还是 secret。密钥值在 .kamal/secrets 中定义,Kamal 用 dotenv 自动加载,支持变量替换与命令替换,例如 KAMAL_REGISTRY_PASSWORD=$KAMAL_REGISTRY_PASSWORD、RAILS_MASTER_KEY=$(cat config/master.key)。加载顺序为先 .kamal/secrets-common 后 .kamal/secrets,后者覆盖前者。若不想明文存储,可用 kamal secrets fetch 与 kamal secrets extract 从密码管理器取值。变量名与密钥名不一致时用 ENV_NAME:SECRET_NAME 别名,如 DB_PASSWORD:MAIN_DB_PASSWORD。

适用场景:多角色部署时可在 servers 下某角色的 env 中设置仅作用于该角色容器的变量;env.tags 可为已打标签的主机追加变量,标签内同样可用 clear 与 secret。

限制:tags 只能出现在顶层 env 配置中,不能写在角色专属 env 内;按主机覆盖需使用顶层 env.tags。若把密钥直接写入 .kamal/secrets,须确保该文件未被纳入版本控制。关于密钥文件加载顺序、替换语法与密码管理器适配器的完整列表,资料指向 references/secrets-files.md,具体内容暂未提供。