Ethsim2
(Ethan )
1
环境
- Discourse:latest tests-passed
- 主机操作系统:[Ubuntu 24.04 LTS / 24.04.3 LTS]
- 安装方法:官方 Docker 安装,运行
./discourse-setup
- 平台:VPS (Digital Ocean)
重现步骤
- 从 /var/discourse 运行 ./discourse-setup
- 在提示时输入 SMTP 详细信息:
- SMTP 服务器:smtp.example.com
- SMTP 端口:2525
- SMTP 用户名:user@example.com
- SMTP 密码:p@ssw0rd!
- 完成设置并检查 containers/app.yml
预期结果
app.yml 应包含两个独立的字段,例如:
DISCOURSE_SMTP_USER_NAME: "user@example.com"
DISCOURSE_SMTP_PASSWORD: "p@ssw0rd!"
实际结果
密码字段被写入,并且用户名被预置:
DISCOURSE_SMTP_USER_NAME: "user@example.com"
DISCOURSE_SMTP_PASSWORD: "user@brevo.comp@ssw0rd!"
这会导致邮件发送失败,并且 discourse-doctor 确认密码被篡改。
备注
• 在提示时明确引用密码不会改变结果。
• 密码包含特殊字符(@、!),但问题不仅仅是 YAML 引用:用户名字符串被字面连接到密码的开头。
• 在多次运行 ./discourse-setup 时可重现。
1 个赞
sam
(Sam Saffron)
2
你能测试一下这是否与密码中的特定字母有关,比如 @ / ! 会暴露这个 bug 吗?
Discourse 设置中的所有 sed/awk 和花哨的 bash 脚本都使得维护起来相当困难。也许 @pfaffman 有什么想法?
1 个赞
pfaffman
(Jay Pfaffman)
3
好的,这很有道理。
@Ethsim2 如果您将密码更改为仅包含数字和字母,并且与用户名的一部分不同,您还会遇到此问题吗?
您能否分享您正在使用的值?
我今天晚些时候会尝试看一下。
如果您删除了密码中的 83f…com 部分,只留下密码(5AH…),它是否可用?
2 个赞
Ethsim2
(Ethan )
6
是的,然后我运行 .\launcher rebuild app,因为 .\discourse-setup 已经配置了 SWAP。
pfaffman
(Jay Pfaffman)
7
是的。这就是问题所在。需要发生多个级别的转义,例如当 bash 读取值时,当 bash 将值传递给 sed 时,当 sed 替换它时,然后,也许,当 yml 文件获取它时。这是一个已知问题:
我已将此重新分类为 #support。
Ethsim2
(Ethan )
12
截图上的密码是 5AHQXrf4LDUmRB1J 
编辑:此密码是 Brevo 在一个已被删除的账户上创建的默认密码
pfaffman
(Jay Pfaffman)
13
我无法复现。您使用的是什么操作系统?
root@bro:/var/discourse# ./discourse-setup --skip-connection-test --skip-rebuild
skipping connection test
'samples/standalone.yml' -> 'containers/app.yml'
Found 29GB of memory and 32 physical CPU cores
setting db_shared_buffers = 4096MB
setting UNICORN_WORKERS = 8
containers/app.yml memory parameters updated.
Hostname for your Discourse? [discourse.example.com]: forum.phsics.site
Setting EC to 2
Skipping port check.
Email address for admin account(s)? [me@example.com,you@example.com]: jay@literatecomputing.com
SMTP server address? [smtp.example.com]: smtp-relay.brevo.com
SMTP port? [587]: 2525
SMTP user name? [user@example.com]: 83fca0012@smtp-brevo.com
SMTP password? []: 5AHQXrf4LDUmRB1J
notification email address? [noreply@forum.phsics.site]:
Optional email address for Let's Encrypt warnings? (ENTER to skip) [me@example.com]:
Optional MaxMind Account ID (ENTER to continue without MAXMIND GeoLite2 geolocation database) [123456]:
Does this look right?
Hostname : forum.phsics.site
Email : jay@literatecomputing.com
SMTP address : smtp-relay.brevo.com
SMTP port : 2525
SMTP username : 83fca0012@smtp-brevo.com
SMTP password : 5AHQXrf4LDUmRB1J
Notification email: noreply@forum.phsics.site
MaxMind account ID: (unset)
MaxMind license key: (unset)
ENTER to continue, 'n' to try again, Ctrl+C to exit:
letsencrypt.ssl.template.yml enabled
Configuration file at containers/app.yml updated successfully!
Updates successful. --skip-rebuild requested. Exiting.
root@bro:/var/discourse# grep SMTP containers/app.yml
## TODO: The SMTP mail server used to validate new accounts and send notifications
# SMTP ADDRESS is required
# WARNING: SMTP password should be wrapped in quotes to avoid problems
DISCOURSE_SMTP_ADDRESS: smtp-relay.brevo.com
DISCOURSE_SMTP_PORT: 2525
DISCOURSE_SMTP_USER_NAME: 83fca0012@smtp-brevo.com
DISCOURSE_SMTP_PASSWORD: "5AHQXrf4LDUmRB1J"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (optional, default: true)
DISCOURSE_SMTP_DOMAIN: discourse.example.com # (required by some providers)
#DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: peer # (optional, default: peer, valid values: none, peer, client_once, fail_if_no_peer_cert)
#DISCOURSE_SMTP_AUTHENTICATION: plain # (default: plain, valid values: plain, login, cram_md5)
Ethsim2
(Ethan )
14
Digital Ocean Ubuntu 24.04
我们很遗憾无法依赖 discourse 安装中的宿主系统已安装 Ruby - 如果可以的话,让整个脚本成为一个 Ruby 脚本会相对简单,但无法保证。
2 个赞
pfaffman
(Jay Pfaffman)
18
那我想不通怎么会发生这种情况。你能像我举的例子那样重现它吗?
你是一次性复制粘贴所有文本的吗,以至于缓冲区跟不上你粘贴的速度?
sam
(Sam Saffron)
19
嗯,我想知道我们是否可以将逻辑捆绑到 launcher2 中,然后用它来运行设置。
discourse-setup 跳过的障碍数量真是太壮观了。
Lhc_fl
(Linca)
20
是否可以将启动器编译成二进制可执行文件以供发布?这样,启动器(bash)就可以只下载与系统对应的可执行文件(二进制)。
1 个赞