这是关于在自托管 Discourse 安装中设置环境变量的 how-to 指南。
所需用户级别:管理员
环境变量在配置 Discourse 实例方面起着至关重要的作用。它们可以存储敏感数据,如 API 密钥和数据库密码,从而使您的安装更安全、更灵活。在 Discourse 中,环境变量在 Docker 容器设置中的 app.yml 文件中进行设置。
向 .yml (YAML) 文件添加环境变量非常简单。这是一个基本示例:
# 这是一个包含环境变量的 YAML 文件
env:
VARIABLE_NAME: "Variable Value"
ANOTHER_VARIABLE: "Another Value"
在 Discourse Docker 容器的上下文中,环境变量存储在 app.yml 文件的 env 部分。
这是一个 app.yml 文件的示例:
## 这是独立式 Discourse Docker 容器模板
##
## 更改此文件后,您必须重建
## /var/discourse/launcher rebuild app
##
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
- "templates/web.ratelimited.template.yml"
## 如果您希望添加 Let's Encrypt (https),请取消注释这两行
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"
## 此容器应公开哪些 TCP/IP 端口?
## 如果您希望 Discourse 与 Apache 或 nginx 等其他 Web 服务器共享端口,
## 请参阅 https://meta.discourse.org/t/17247 获取详细信息
expose:
- "80:80" # http
- "443:443" # https
params:
db_default_text_search_config: "pg_catalog.english"
## 将 db_shared_buffers 设置为总内存的最多 25%。
## 将由 bootstrap 根据检测到的 RAM 自动设置,或者您可以覆盖它
db_shared_buffers: "256MB"
env:
LANG: en_US.UTF-8
# DISCOURSE_DEFAULT_LOCALE: en
## 支持多少并发 Web 请求?取决于内存和 CPU 核心。
## 将由 bootstrap 根据检测到的 CPU 自动设置,或者您可以覆盖它
UNICORN_WORKERS: 3
## TODO:此 Discourse 实例将响应的域名
DISCOURSE_HOSTNAME: 'discourse.example.com'
## 如果您希望容器以与上面指定的相同主机名 (-h 选项) 启动,请取消注释
## (默认为“$hostname-$config”)
#DOCKER_USE_HOSTNAME: true
## TODO:将成为初始注册的管理员和开发人员的逗号分隔的电子邮件列表
## 示例:'user1@example.com,user2@example.com'
DISCOURSE_DEVELOPER_EMAILS: 'user@example.com'
## TODO:用于验证新帐户和发送通知的 SMTP 邮件服务器
DISCOURSE_SMTP_ADDRESS: smtp.example.com # (必需)
DISCOURSE_SMTP_PORT: 587 # (可选)
DISCOURSE_SMTP_USER_NAME: user@example.com # (可选)
DISCOURSE_SMTP_PASSWORD: a_s3cr3t_p@ssword # (可选)
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (可选, 默认为 true)
## 如果您添加了 Let's Encrypt 模板,请取消注释下方以获取免费 SSL 证书
#LETSENCRYPT_ACCOUNT_EMAIL: me@example.com
## 此 Discourse 实例的 CDN 地址(配置为拉取)
#DISCOURSE_CDN_URL: //discourse-cdn.example.com
## Docker 容器是无状态的;所有数据都存储在 /shared 中
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
## 插件放在这里
## 参阅 https://meta.discourse.org/t/19157 获取详细信息
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
## 构建后要运行的任何自定义命令
run:
- exec: echo "开始执行自定义命令"
## 如果您想设置首次注册的“发件人”电子邮件地址,请取消注释并更改:
#- exec: rails r "SiteSetting.notification_email='info@unconfigured.discourse.org'"
## 收到首次注册电子邮件后,重新注释该行。它只需要运行一次。
- exec: echo "自定义命令结束"
让我们开始为您的网站添加环境变量吧!![]()
以下说明是为 标准 Discourse 安装 编写的
登录到您的服务器
使用 PuTTY 或类 Unix 系统上的终端等工具 SSH 登录到您的服务器。
ssh username@your-server-ip
导航到 Discourse 目录
登录到服务器后,导航到包含 Discourse Docker 设置的目录,该目录通常位于 /var/discourse。
cd /var/discourse
打开 app.yml 文件
您需要使用文本编辑器打开 app.yml 文件。在本示例中,我们将使用 nano。
nano containers/app.yml
添加您的环境变量
在 app.yml 文件中,您会找到一个 env 部分。您可以在此处添加您的环境变量。
env:
DISCOURSE_HOSTNAME: 'discourse.example.com'
DISCOURSE_SMTP_ADDRESS: smtp.example.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: user@example.com
DISCOURSE_SMTP_PASSWORD: a_s3cr3t_p@ssword
例如,如果您想将 DISCOURSE_ENABLE_CORS 环境变量设置为 true 以启用 跨域资源共享 (CORS),您将在 env 部分添加以下行:
env:
DISCOURSE_ENABLE_CORS: "true"
...
此处的空格和格式很重要,因此请确保新行的缩进正确(两个空格)
修改完变量后,保存并关闭文件。
重建 Discourse 容器
最后,您需要重建 Discourse Docker 容器才能使更改生效。您可以使用以下命令执行此操作:
./launcher rebuild app
或者,要更新正在运行的容器的环境变量而不重建,您还可以使用:
./launcher destroy app
./launcher start app
重建过程完成后,您的更新后的环境变量将可供您的 Discourse 应用程序使用!![]()