arthem/config-file-bundle

将环境变量中的文件注入到您的 Symfony 配置中

安装: 186

依赖者: 0

建议者: 0

安全性: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

类型:symfony-bundle

0.0.1 2023-04-14 13:06 UTC

This package is auto-updated.

Last update: 2024-09-14 16:18:58 UTC


README

动机

在 Symfony 配置中,您可以使用 env(file:FOO) 语法将文件内容作为参数注入

但是,一些 Symfony 扩展期望您提供文件路径,而您的基础设施只能提供环境变量。在某些 Docker 部署中,挂载文件非常复杂,而处理环境变量则更简单。

此扩展会生成包含您的环境变量的缓存文件,允许您编写模板。

让我们看看一个 Docker 示例!

# docker-compose.yaml
services:
  symfony-app:
    environments:
    - JWT_PRIVATE_KEY

Docker Compose 的默认环境变量可能看起来像这样

# .env
JWT_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCN/VTNk1Sdr9mg
...
tDMMHT4ch+pSmyyndMSeu+I+pjF5+cour3FrmmzZFzKivzj0EXbcb+LPUQKBgHWA
WRv4Q33WAa3BFKqCZOKhfFY=
-----END PRIVATE KEY-----
"

您有一个需要 private_key_file(是的,一个文件路径!)的 jwt_provider 扩展

# config/packages/jwt_provider.yaml
    jwt_provider:
        private_key_file: "I don't have file, just a JWT_PRIVATE_KEY env var"

这就是扩展帮您解决的地方!

安装

composer require arthem/config-file-bundle

用法

内联配置

您可以使用以下语法直接编写文件的预期内容

param_value: |
    &file:<filename.ext>
    <content of your file>

示例

# config/packages/jwt_provider.yaml
    jwt_provider:
        private_key_file: |
            &file:jwt_private_key.pem
            %env(JWT_PRIVATE_KEY)%

这将

  • 在项目缓存目录中生成 jwt_private_key-%hash%.pem 文件。(%hash% 代表文件内容的解析结果)
  • 将配置编译为
# config/packages/jwt_provider.yaml
    jwt_provider:
        private_key_file: 'cache/dir/jwt_private_key-c131d7b5c6bd917a83e0cbea6296bf95.pem'

预配配置

生成文件的另一种方法是定义它们在扩展配置中

# config/packages/arthem_config_file.yaml
arthem_config_file:
    files:
        service_account:
            extension: json
            content: |
                {
                  "type": "service_account",
                  "project_id": "my-project",
                  "private_key_id": "%env(json_string:SERVICE_ACCOUNT_ID)%",
                  "private_key": "%env(json_string:SERVICE_ACCOUNT_PRIVATE_KEY)%"
                }
        jwt_private_key:
            extension: pem
            content: '%env(JWT_SECRET_KEY)%'
        jwt_public_key:
            extension: pem
            content: '%env(JWT_PUBLIC_KEY)%'

然后在您的配置中注入文件

# config/packages/jwt_provider.yaml
jwt_provider:
    private_key_file: '%arthem_config_file.file.jwt_public_key%'

文件内容

转义值

此扩展还提供了其 JSON 环境变量处理器

{
  "private_key_id": "%env(json_string:SERVICE_ACCOUNT_PRIVATE_KEY)%"
}

此处理器对 JSON 字符串进行转义,这在处理多行环境变量时很有用。