在 DO droplet 上启动失败,使用 mailjet

你好,
我有点抓狂了。
我按照标准安装说明操作,已经设置了 Mailjet 等,但每次启动引导都失败。

这是我的配置,我就是看不出哪里出了问题。
有什么建议吗?

谢谢

这样看起来对吗?

主机名      : forum.mydomain.com
邮箱         : forumadmin@mydomain.com
SMTP 地址  : in-v3.mailjet.com
SMTP 端口     : 587
SMTP 用户名 : b91xxxxxxd3222d809xxxxxxe3de52d
SMTP 密码 :xxxxxx5b75ecdf24f31c2axxxxxx6903
Let's Encrypt : 密码(密钥)

然后

失败

--------------------

Pups::ExecError: /bin/bash -c "if [[ ! \"$LETSENCRYPT_ACCOUNT_EMAIL\" =~ ([^@]+)@([^\.]+) ]]; then echo \"LETSENCRYPT_ACCOUNT_EMAIL 不是有效的邮箱地址\"; exit 1; fi" 执行失败,返回状态为 #<Process::Status: pid 5329 exit 1>

失败位置:/pups/lib/pups/exec_command.rb:112:in `spawn'

执行失败,参数如下:{"cmd"=>["if [ -z \"$LETSENCRYPT_ACCOUNT_EMAIL\" ]; then echo \"LETSENCRYPT_ACCOUNT_EMAIL 环境变量是必需的但尚未设置。\"; exit 1; fi", "/bin/bash -c \"if [[ ! \\\"$LETSENCRYPT_ACCOUNT_EMAIL\\\" =~ ([^@]+)@([^\\.]+) ]]; then echo \\\"LETSENCRYPT_ACCOUNT_EMAIL 不是有效的邮箱地址\\\"; exit 1; fi\""]}

xxxxxxxxxxxxxxxxxxxxxxe6e31b17b7exxxxxxxxxxxxxxxxxx856eb0

** 启动引导失败 ** 请向上滚动查看之前的错误信息,可能不止一条。

./discourse-doctor 可能有助于诊断问题。

为什么 Let’s Encrypt 字段中的电子邮件会是密码或私钥?它应该是一个电子邮件地址。

脚本不允许我为 LETS ENCRYPT 输入任何内容。
一旦我输入 SMTP 用户名和密码,它就会立即开始运行。

是的,看起来是 Let’s Encrypt 相关的问题。但如前所述,安装脚本没有提供输入电子邮件地址的机会。一旦收到 SMTP 密码,程序似乎就直接跳过了该步骤,并弹出一个错误。

您可以在这里看到具体情况…

您的 Discourse 主机名?[forum.uaptn.com]: 
管理员账户的电子邮件地址?[forumadmin@uaptn.com]: xxxxxxxxe@protonmail.com
SMTP 服务器地址?[in-v3.mailjet.com]: 
SMTP 端口?[587]: 
SMTP 用户名?[b91xxxxxxxxxxxxxxxxxxde52d]: 
SMTP 密码?[1d2xxxxxxxxxxxxxxxxxxxxxxxxxxxx903]: 
./discourse-setup: 第 438 行:[: 参数过多

正在检查您的域名...
连接到 forum.uaptn.com 成功。

这些信息看起来正确吗?

主机名      : forum.uaptn.com
电子邮件     : xxxxxxxxx@protonmail.com
SMTP 地址  : in-v3.mailjet.com
SMTP 端口     : 587
SMTP 用户名 : b91xxxxxxxxxxxxxxxxxxxxxe52d
SMTP 密码 : 1d2cxxxxxxxxxxxxxxxxxxx5086903
Let's Encrypt : 密码(密钥)

按回车键继续,按'n'重试,按 Ctrl+C 退出:

在此处输入电子邮件地址,而不是秘密密码。

该电子邮件地址将用于在 Let’s Encrypt 创建账户,以便为 Discourse 获取 SSL 证书。

我不明白你为何无法输入 Let’s Encrypt 的邮箱地址。你是否多粘贴了一个换行符?

先生,这是个主意,让我试试。

不是那样。脚本只是略过了 Let’s Encrypt 部分,一旦我输入密码,它就弹出“第 438 行:[: 参数过多”的错误并继续执行。

您的密码包含特殊字符吗?尝试输入一个不含特殊字符的假密码(例如 123456),查看系统是否会要求输入 Let’s Encrypt 的邮箱地址。

不,它不是,那是从 Mailjet 直接生成的密码,不过我会试试输入一个假的。

不行。试过了——同样的错误。

也许脚本没有询问是因为它已经在你的 app.yml 中了,然后由于 此问题 而报错(因为 app.yml 文件中的邮箱地址本身就有误)。

尝试手动修改文件中的邮箱地址,看看是否有效(nano containers/app.yml)。

报错的那一行 会检查 Let’s Encrypt 邮箱是否为空,如果非空则显示并询问你是否要更改。但由于该条件未将变量用双引号包裹,app.yml 中的值会被展开,从而导致 参数过多 的错误。

我认为如果 Discourse 团队将变量用双引号包裹,应该能避免此类情况,不过这种情况应该很少见(可能仅在首次运行设置时,值被错误设置)。

成功了 :+1: - 也就是说,在手动修改 app.yml 后,它为我提供了该步骤

希望引导过程顺利

非常感谢。