安装不工作!

我尝试通过 DigitalOcean 的一键应用进行全新安装。这已经是我第三次从头创建了,但遇到了同样的问题。
检查 DNS 时,我发现我的域名已指向 Droplet 的 IP 地址,但 Discourse 并未在我的域名上显示。

我运行了 discourse-doctor,但它在显示“域名已服务/未服务”信息之前卡住或挂起。

是否有更新可能引入了这种行为?

1 个赞

一键安装不受支持。

请使用官方提供的极其简便的安装流程。

如果在此过程中遇到任何问题,您可以在这里发帖并获得支持。

6 个赞

@merefield 我刚创建了一个新的 droplet,并按照官方安装说明执行了安装。但我仍然遇到完全相同的问题。

discourse-doctor 卡住了

我的域名上没有任何内容被提供。

这是完全全新的官方安装。我无法弄清楚这里可能发生了什么。有什么线索吗?

1 个赞

@merefield 在运行 ./launcher logs app 时,我看到:

nginx: [emerg] 无法加载证书 "/shared/ssl/mydomainname.de.cer": PEM_read_bio_X509_AUX() 失败 (SSL: error:0909006C:PEM routines:get_name:no start line:Expecting: TRUSTED CERTIFICATE)

不过我不太清楚这具体是什么意思。

1 个赞

所以我看到它试图查看 /shared/ssl,但实际上 SSL 文件位于 shared/standalone/ssl。我该如何修复这个问题?

1 个赞

问题通常在于 DNS 配置不正确,或者尚未生效。如果你分享你的 URL,有人可以帮忙检查。

我经常使用 https://dnschecker.org/#A/example.com 来检查。

但如果你已经尝试了很多次,那么你可能已经用尽了 Let’s Encrypt 向你颁发证书的尝试次数。我猜测这就是你当前的问题,我有 90% 的把握。你可以通过遵循 Set up Let’s Encrypt with multiple domains / redirects - #53 来“作弊”,但这是一种更复杂的设置,而且你无法完成简单的设置。你最好的办法可能是等几天再试一次。

这不是问题所在。/shared/ssl 是容器内部的路径,而 shared/standalone/ssl 是容器外部的路径。

4 个赞

@pfaffman 没错,听起来很合理!不过我还是无法创建它,但我可以在另一个域名上创建。既然 DNS 查询显示我已连接到正确的服务器等,我推测情况正如你所描述的那样。我会再等几天,然后重试。谢谢 :metal:

2 个赞

@pfaffman 你能帮我实现作弊吗?我查看了一下如何配置多域名,但不太明白你的意思。你是指通过某种方式使用 after_ssl 钩子吗?

1 个赞

你只需添加其他域名。例如,如果你的论坛是 forum.example.com,你需要为 cheat.example.com 添加一条指向你服务器的 DNS 记录,并按说明添加它。由于这是一个不同的证书请求,系统会允许你申请该证书。

1 个赞

@pfaffman 我正在使用 DigitalOcean。我已将 cheat.example.com 添加为 A 记录,但在设置时它不被接受为域名。

(警告:计算机的 443 端口似乎无法访问)

我已按照说明操作并重新构建,但仍然显示“无法访问该站点”。:thinking:

至于其余配置,我仅在 app.yml 文件的 hooks: 部分添加了以下内容:

  after_ssl:
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d cheat.example.com"

或者,他可以使用此方法添加一个域名或子域名。这是在达到速率限制时绕过限制的一种简便方法。但为了避免触及速率限制,最好始终使用测试环境 --dryrun。(注意,Let’s Encrypt 正在考虑将 --dryrun 重命名为对非英语使用者更易识别的名称,例如 --test--testrun。这很可能要等到 2021 年 1 月或之后才会实现。他们也在着手全面重写其指南。:slightly_smiling_face:


向现有证书添加新域名的推荐方法确实是重用原始命令行,使用另一个 -d 标志添加新域名,并添加 --expand 以告知 certbot 不要创建新的证书链(这会导致在 /etc/letsencrypt/live 中生成新的子目录)。

3 个赞

这里的问题是,你往往在为时已晚时才发现这是测试环境。此外,就连我也不清楚该如何配置 Discourse 以在测试模式下拉取这些证书。

这正是我试图表达的意思。

1 个赞

这正是原因之一,因此他们(Let’s Encrypt)正在重写其指南……使其更加清晰。一旦你已设置好使用测试环境获取测试(模拟)证书,就可以在生产模式下运行 Certbot 并获取你的 CA。之后,安装 Discourse,它应该能自动获取新的(扩展后的)CA。

:+1:

并非如此。问题在于,弄清楚如何在 app.yml 中添加一个配置块以启用该开关——无论这看起来多么显而易见——其难度大约是安装 Discourse 的 3 倍(甚至可能是 10 倍)。你需要编辑 app.yml,添加一个复杂的内容,并确保所有空格都完全正确?不如等一周,或者换个新名字吧。

2 个赞

@pfaffman 我按照描述选择了新名称。其中一个问题是 cheat.example.com 应该是 CNAME 记录而不是 A 记录。

不过它仍然无法工作。我会再等一段时间。

编辑:供参考,这是我的 app.yml

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
## 如果希望添加 Lets Encrypt (https),请取消注释以下两行
  - "templates/web.ssl.template.yml"
  - "templates/web.letsencrypt.ssl.template.yml"

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"

  ## 可能改善排序性能,但会增加每个连接的内存使用量
  #db_work_mem: "40MB"

  ## 此容器应使用哪个 Git 版本?(默认:tests-passed)
  #version: tests-passed

env:
  LANG: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en
  # DISCOURSE_RELATIVE_URL_ROOT: /forum
  ## 支持多少并发 Web 请求?取决于内存和 CPU 核心数。
  ## 将由 bootstrap 根据检测到的 CPU 自动设置,您也可以覆盖该值
  UNICORN_WORKERS: 4

  ## TODO: 此 Discourse 实例将响应的域名
  ## 必填。Discourse 无法仅使用裸 IP 地址运行。
  DISCOURSE_HOSTNAME: cheat.example.com

  ## 如果希望容器以与上述指定的相同的主机名(-h 选项)启动,请取消注释
  ## (默认值为 "$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## TODO: 初始注册时将成为管理员和开发人员的逗号分隔邮箱列表
  ## 示例:'user1@example.com,user2@example.com'
  DISCOURSE_DEVELOPER_EMAILS: 'emails@emails.com'

  ## TODO: 用于验证新账户和发送通知的 SMTP 邮件服务器
  # 需要 SMTP 地址、用户名和密码
  # 警告:SMTP 密码中的字符 '#' 可能导致问题!
  DISCOURSE_SMTP_ADDRESS: smtpout.secureserver.net
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: some@email.com
  DISCOURSE_SMTP_PASSWORD: "apassword"
  #DISCOURSE_SMTP_ENABLE_START_TLS: true           # (可选,默认为 true)

  ## 如果添加了 Lets Encrypt 模板,请取消注释以下行以获取免费 SSL 证书
  LETSENCRYPT_ACCOUNT_EMAIL: me@example.com

  ## 此 Discourse 实例的 http 或 https CDN 地址(配置为拉取)
  ## 详见 https://meta.discourse.org/t/14857
  #DISCOURSE_CDN_URL: https://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
  after_ssl:
    - replace:
        filename: "/etc/runit/1.d/letsencrypt"
        from: /--keylength/
        to: "-d cheat.example.com --expand"
1 个赞

最终,一周过去了,我得以再次使用我的域名。可能是我在配置子域名时出了些差错,因为我在查阅 Let’s Encrypt 的相关资料后,确信这就是解决方案。

再次感谢 @pfaffman@JimPas 提供的帮助和详尽解答!

3 个赞

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.