环境变量
您可以为资源定义环境变量,这些变量将在您的应用程序中可用。
预览部署可以拥有不同的环境变量,例如您可以将其用作暂存环境来测试您的应用程序。
普通视图与开发者视图
Coolify 提供了两种管理环境变量的方式:普通视图和开发者视图。您可以使用环境变量区域顶部的按钮在这两种视图之间切换。
普通视图
默认视图将每个环境变量显示为独立的表单卡片。每张卡片包含可编辑的键和值字段,以及用于配置 Build Variable(构建变量)、Multiline(多行)和 Literal(字面量)等选项的复选框。
当您需要根据特定选项配置单个变量,或处理多行值和锁定密钥时,此视图最为合适。
开发者视图
开发者视图提供了一个纯文本编辑器,所有环境变量均以 .env 文件格式显示(KEY=VALUE,每行一个)。这对于批量编辑或从现有的 .env 文件粘贴变量非常有用。
保存时,Coolify 会解析文本并相应地创建、更新或删除变量。文本编辑器中变量的顺序将被保留。
以 # 开头的行被视为注释,在保存时会被忽略。
限制
- 锁定密钥 显示为
KEY=(Locked Secret, delete and add again to change),无法在开发者视图中编辑。您必须删除并重新添加它们。 - 多行变量 显示为
KEY=(Multiline environment variable, edit in normal view),必须在普通视图中编辑。
构建时与运行时变量
每个环境变量都有两个独立的标志来控制其何时可用:Build Variable(构建变量)和 Runtime Variable(运行时变量)。默认情况下两者均启用,因此新变量在两个阶段都可用,除非您更改此设置。
| 配置 | 构建阶段 | 运行中的容器 |
|---|---|---|
| 构建 + 运行(默认) | 可用 | 可用 |
| 仅构建 | 可用 | 不可用 |
| 仅运行 | 不可用 | 可用 |
您可以在 普通视图 中独立切换这些复选框。
构建变量
构建变量在镜像构建过程中注入。对于 Dockerfile 部署,它们作为 ARG 指令添加。对于 Docker Compose 和 Nixpacks/Buildpack 部署,它们通过 --env-file 传递。
构建时变量存储在一个独立的文件(/artifacts/build-time.env)中,该文件位于 Docker 构建上下文之外,因此不会包含在最终镜像中。
运行时变量
运行时变量在运行中的容器内可用。构建完成后,Coolify 会写入一个 .env 文件,其中包含所有启用运行时的变量,Docker Compose 会在容器启动时通过 env_file 指令加载该文件。
如果您仅在运行时需要一个变量(例如,应用程序启动时读取的 API 密钥),请禁用 Build Variable 以使其完全脱离构建阶段。
Docker 构建密钥
默认情况下,构建变量作为 --build-arg 值传递。这些值会被记录在镜像元数据中——任何有权访问该镜像的人都可以查看它们。对于私有仓库令牌或 API 密钥等敏感值,您可以在应用程序的环境变量设置中启用 Use Docker Build Secrets(使用 Docker 构建密钥)。这将使用 Docker BuildKit(需要 Docker 18.09+)将密钥临时挂载到构建步骤中,而不是将其嵌入镜像层,从而确保它们在最终镜像中不留痕迹。
启用后,Coolify 会自动重写您 Dockerfile 中的 RUN 指令以使用 --mount=type=secret ——您无需手动修改 Dockerfile。对于 Docker Compose 构建,Coolify 会直接在 compose 文件中添加原生的 secrets: 部分。
启用后,Coolify 将执行以下操作:
- 通过
--secret id=KEY,env=KEY传递构建变量,而不是--build-arg。 - 如果缺少,会自动向您的 Dockerfile 添加
# syntax=docker/dockerfile:1指令。 - 向每个
RUN指令注入--mount=type=secret,使密钥在该步骤中作为环境变量可用。 - 密钥绝不会被嵌入镜像层,也不会出现在
docker history中。
对于 Docker Compose 构建,Coolify 会直接在 compose 文件中添加原生的 secrets: 部分。
| 构建参数(默认) | 构建密钥 | |
|---|---|---|
| Docker 标志 | --build-arg KEY=value | --secret id=KEY,env=KEY |
在 docker history 中可见 | 是 | 否 |
| 存储在镜像层中 | 是 | 否 |
| 需要 BuildKit | 否 | 是(Docker 18.09+) |
构建缓存
Coolify 会根据所有密钥值生成一个 COOLIFY_BUILD_SECRETS_HASH。当您的密钥未更改时,Docker 构建缓存将被保留;当密钥更改时,缓存将自动失效。
如果构建服务器上不可用 BuildKit,即使启用了此设置,Coolify 也会回退到传统的 --build-arg 行为。
多行变量
在 普通视图 中勾选 Multiline(多行)复选框,可保留变量值中的换行符和特殊字符。当您的值跨越多行时(例如:)请启用此选项:
- SSH 私钥
- TLS/SSL 证书
- 多行配置文件或脚本
部署时,多行值会被单引号包裹,从而防止任何 Shell 解析。在 Docker 构建期间,多行构建变量通过 ARG KEY 传递(不带内联值赋值),以避免破坏 Dockerfile 语法——实际值会通过 --build-arg 单独提供。
字面量变量
在 普通视图 中勾选 Literal(字面量)复选框可防止变量插值。默认情况下,Coolify 会展开您值内部的 $OTHER_VAR 等引用。启用 Literal 会将整个值视为纯文本——美元符号和其他 Shell 特殊字符将按原样保留。
当您的值包含不应被解释为变量引用的 $ 字符时,请使用此选项:
- 包含
$的密码(例如P@ss$word123) - 正则表达式模式(例如
^user\d+$) - 模板语法或字面量 Shell 表达式
当 Multiline 已启用时,Literal 复选框将隐藏,因为多行值始终被视为字面量。
共享变量
您可以设置三种类型的共享变量:
- 基于团队
- 基于项目
- 基于环境(生产、暂存等)
您可以在各自的页面上设置共享变量。
然后您可以在任何地方使用这些变量。例如:您将 NODE_ENV 定义为 production。
基于团队
您可以在 Team 页面上设置它们,并使用 {{team.NODE_ENV}} 调用。请勿将 "team" 替换为您的实际团队名称。
基于项目
您可以在 Projects 页面(齿轮图标下)设置它们,并使用 {{project.NODE_ENV}} 调用。请勿将 "project" 替换为您的实际项目名称。
基于环境
您可以在 Environments 页面(选择 Project)的齿轮图标下设置它们,并使用 {{environment.NODE_ENV}} 调用。请勿将 "environment" 替换为您的实际环境名称。
在 Docker Compose 中使用环境变量和共享变量
在 Coolify 中,您可以按照 Docker Compose 知识库 中的详细说明轻松配置这些变量。
预定义变量
Coolify 为您预定义了一些变量,以便您在应用程序或服务中使用。您只需向应用程序或服务添加如下环境变量即可。
# 例如,您可以在应用程序中使用此变量
MY_VARIABLE=$SOURCE_COMMIT
# 您将在应用程序中将源代码的提交哈希作为环境变量 MY_VARIABLE 获取应用程序变量
COOLIFY_FQDN
应用程序的完全限定域名。
COOLIFY_URL
应用程序的 URL。
COOLIFY_BRANCH
源代码的分支名称。
COOLIFY_RESOURCE_UUID
Coolify 生成的唯一资源标识符。
COOLIFY_CONTAINER_NAME
Coolify 生成的容器名称。
SOURCE_COMMIT
源代码的提交哈希。
构建缓存
默认情况下,SOURCE_COMMIT 不包含在 Docker 构建中以保留缓存。如果您的构建过程需要此值,请在应用程序的“常规”设置中启用“Include Source Commit in Build”(在构建中包含源代码提交)。
PORT
如果未设置:则默认为 Port Exposes(端口暴露)中的第一个端口。
HOST
如果未设置:则默认为 0.0.0.0
服务栈变量
SERVICE_NAME_<ID>
栈中给定服务的名称。例如,如果您有一个名为 web 的服务,可以使用 SERVICE_NAME_WEB 访问它。对于服务名称可能变化的预览部署非常有用。
魔法环境变量
对于 Docker Compose / 服务栈部署,Coolify 可以使用 SERVICE_<TYPE>_<IDENTIFIER> 语法自动生成动态值。这些变量可帮助您生成 URL、FQDN、密码和随机字符串,并确保它们在栈中的所有服务中保持一致。
| 类型 | 生成内容 | 示例输出 |
|---|---|---|
SERVICE_URL_<ID> | 基于通配符域名的 URL | http://app-vgsco4o.example.com |
SERVICE_URL_<ID>_3000 | 带代理路由到特定端口的 URL | http://app-vgsco4o.example.com:3000 |
SERVICE_URL_<ID>=/api | 带附加路径的 URL | http://app-vgsco4o.example.com/api |
SERVICE_URL_<ID>_3000=/api | 同时带端口路由和路径的 URL | http://app-vgsco4o.example.com:3000/api |
SERVICE_FQDN_<ID> | 生成 URL 中的 FQDN 部分 | app-vgsco4o.example.com |
SERVICE_FQDN_<ID>_3000 | 带代理路由到特定端口的 FQDN | app-vgsco4o.example.com:3000 |
SERVICE_FQDN_<ID>=/api | 带附加路径的 FQDN | app-vgsco4o.example.com/api |
SERVICE_USER_<ID> | 随机字符串,16 个字符 | a8Kd3fR2mNpQ1xYz |
SERVICE_PASSWORD_<ID> | 不含符号的随机密码 | G7hkL9mpQ2rT4vXw |
SERVICE_PASSWORD_64_<ID> | 不含符号的随机密码,64 个字符 | qG7hkL9mpQ2rT4vXw8BnP6sYd... |
SERVICE_PASSWORDWITHSYMBOLS_<ID> | 含符号的随机密码 | G7!kL9#pQ2rT4vXw |
SERVICE_PASSWORDWITHSYMBOLS_64_<ID> | 含符号的随机密码,64 个字符 | qG7!kL9#pQ2rT4vXw8BnP6sYd... |
SERVICE_BASE64_<ID> 或 SERVICE_BASE64_32_<ID> | 随机字符串,非 Base64 编码,32 个字符 | x9Yf2KqLm4NpR7TdWb8ZcA1eG3hJ5kM |
SERVICE_BASE64_64_<ID> | 随机字符串,非 Base64 编码,64 个字符 | x9Yf2KqLm4NpR7TdWb8ZcA1eG3hJ5kM... |
SERVICE_BASE64_128_<ID> | 随机字符串,非 Base64 编码,128 个字符 | x9Yf2KqLm4NpR7TdWb8ZcA1eG3hJ5kM... |
SERVICE_REALBASE64_<ID> 或 SERVICE_REALBASE64_32_<ID> | Base64 编码的随机字符串,32 个字符 | eDlZZjJLcUxtNE5wUjdUZA== |
SERVICE_REALBASE64_64_<ID> | Base64 编码的随机字符串,64 个字符 | cU83aGtMOW1wUTJyVDR2WHc4Qm4=... |
SERVICE_REALBASE64_128_<ID> | Base64 编码的随机字符串,128 个字符 | cU83aGtMOW1wUTJyVDR2WHc4Qm4=... |
SERVICE_HEX_32_<ID> | 十六进制随机字符串,32 个字符 | a6b9f34e43c112d79f9a3d5c7983344f |
SERVICE_HEX_64_<ID> | 十六进制随机字符串,64 个字符 | db8c8a1a3b9df5a9fb8fd3f87df62f4... |
SERVICE_HEX_128_<ID> | 十六进制随机字符串,128 个字符 | 7f8c98a98db56b0c6c8768b1db6d24... |
生成的值可在服务间复用,并在部署之间保持持久化。如需在 compose 文件中的完整使用示例,请参阅 Docker Compose 中的魔法环境变量。
