AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1042635
Accepted
Jose
Jose
Asked: 2020-11-16 08:56:41 +0800 CST2020-11-16 08:56:41 +0800 CST 2020-11-16 08:56:41 +0800 CST

在 Postfix 和 Dovecot 配置文件中使用 ENV 变量

  • 772

我正在尝试对我的邮件服务器进行dockerize处理,但在我应该如何在 Postfix 和 Dovecot 配置文件中使用环境变量方面遇到了一些麻烦(我正在使用通过 apt for ubuntu:18.04 获得的最新软件包)。

我已经在 Dovecot.conf (1) 和 main.cf (2) 中导入了我想使用的变量,但老实说,我现在不知道我必须遵循哪种语法才能使用它们。

(1) Dovecot.conf

import_environment= MYSQL_DATABASE, MYSQL_USER, MYSQL_PASSWORD, DOMAIN_NAME, CERTS_DIR, DOVECOT_SASL_PORT

(2) Postfix的main.cf

import_environment= MYSQL_DATABASE, MYSQL_USER, {MYSQL_PASSWORD}, DOMAIN_NAME, CERTS_DIR, DOVECOT_SASL_PORT

根据Dovecot 的文档,我应该env:MYSQL_DATABASE在我想引用我的数据库时使用,env:DOMAIN_NAME每当我想引用我的域名时,等等。但是,根据2019 年的邮件列表,用户将其 ENV 变量称为%{env:EXAMPLE_VAR}. 哪种方法是正确的?它们是否同样有效?

另一方面,关于 Postfix,我找不到与引用环境变量时必须使用什么语法相关的任何内容,如果有人能告诉我应该如何进行,我将不胜感激。

非常感谢!

linux environment-variables postfix troubleshooting dovecot
  • 3 3 个回答
  • 1321 Views

3 个回答

  • Voted
  1. Timor
    2020-11-17T01:53:24+08:002020-11-17T01:53:24+08:00

    你是对的,dovecot 允许使用环境作为源进行变量扩展。%{env:FOR_WHAT_ITS_WORTH}是正确的语法。但请记住,dovecot 有两种类型的配置文件:以 结尾的“普通”配置文件.conf和以 结尾的配置文件.conf.ext,通常用于外部连接,例如从 LDAP 或某些 SQL DBMS 获取用户数据库。后者根本不提供变量扩展,因此您需要采用不同的方法(更多内容见下文)。

    说到后缀,我知道没有标准机制,文档也没有提到任何关于它的内容。

    有一个解决方案,您可能已经猜到了,它涉及一些工作,但适用于您想要容器化的任何东西。我假设您正在使用一些docker-entrypoint.sh脚本在您的容器内启动 postfix 和 dovecot,并预先检查是否已完成首次设置。如果没有,它会运行第一次设置。您甚至可以在每次容器启动时无条件地运行此设置,以根据环境中的内容更改配置。

    假设您已经在容器外准备了配置文件,并通过 docker 文件中看起来像COPY config /root/config.tpl. 在这些配置文件中是标准的 shell 变量,例如bind_dn = ${MY_BIND_DN} ,您已经转义了配置模板中的所有$和\字符。您现在可以做的只是通过 eval 过滤模板,然后将输出放在它所属的位置。请参阅此示例以进行说明。

    for CONFIG_TEMPLATE in /root/config.tpl ; do
      cat ${CONFIG_TEMPLATE} | eval "echo \"$(cat ${CONFIG_TEMPLATE})\"" > /etc/dovecot/conf.d/${CONFIG_TEMPLATE}
    done
    

    这差不多,我知道。尽管如此,除非您的配置文件中有太多需要转义的内容,否则它工作得很好,并且它允许您配置几乎所有基于容器从环境启动的配置文件。

    • 1
  2. user11953615
    2022-04-16T09:43:50+08:002022-04-16T09:43:50+08:00

    我想具体扩展关于 Postfix 的答案,特别是因为这是唯一不属于官方文档的“Postfix import_environment”的热门搜索结果。

    文档让它听起来应该可以工作,但它永远不会 - 没有神奇的语法。通读代码,很明显该功能旨在导入环境变量以通过管道/传递给其他进程。它们永远不会作为配置的一部分进行扩展。甚至有一条关于它的评论postconf.c:“我们不会从 main.cf 中提取 import_environment,因为...”并继续解释尝试这样做的问题。

    因此,希望我能节省您一些时间,以免您陷入我所做的兔子洞:此功能不会像您认为的那样做。直接在 Postfix 配置文件中使用环境变量是不可能的。

    • 0
  3. Best Answer
    Jose
    2020-11-19T01:06:42+08:002020-11-19T01:06:42+08:00

    我发现 Dovecot 未能在.conf文件中扩展环境变量,例如10-master.conf. 由于除了声明之外我没有找到关于后缀的任何内容,因此import_environment我最终在$MY_VAR所有地方使用语法并传递我的 conf 文件以envsubst根据导出的 env 变量替换所有出现。

    • -1

相关问题

  • 你最喜欢的 Linux 发行版是什么?[关闭]

  • 网速慢 - 我应该检查什么?

  • 更改 PHP 的默认配置设置?

  • 保护新的 Ubuntu 服务器 [关闭]

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve