为 Docker 安装的 Discourse 增加 SSL 支持

文章翻译于官方论坛,于 2015-2-4。

所以您想要启用 SSL 支持?让我们开始吧!

这篇指南假设您已经按照默认指南——单个配置文件安装了 Discourse,配置文件位于 var/discourse/containers/app.yml ,而 Discourse docker 被安装在:/var/discourse

购买 SSL 证书

namecheap 或其他 SSL 证书提供商那,为您的域名购买 SSL 证书。按照他们提供的教程生成私钥和 CSR,再最后得到您的证书。我通常使用 apache,整个过程很顺利。

在安全的地方保存私钥和证书。

放置证书和密钥

获得签名的证书和私钥并将其放置在 /var/discourse/shared/standalone/ssl/ 文件夹

私钥命名为:

/var/discourse/shared/standalone/ssl/ssl.key

证书命名为:

/var/discourse/shared/standalone/ssl/ssl.crt

文件名非常重要,不要随意更改,否则 nginx 模板将不会知道去哪儿找到证书。

看一看 app.yml 配置文件,看看 shared 目录挂载在哪。

volumes:
  - volume:
      host: /var/discourse/shared/standalone
      guest: /shared

文件必须在容器中的 /shared/ssl/ssl.key/shared/ssl/ssl.crt

配置 NGINX

在您 app.yml 配置文件中加入引用 nginx ssl 模板的语句:

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/sshd.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ssl.template.yml"

配置您的 Docker 容器

在配置文件中如此设置,让你的容器监听 SSL

expose:
  - "80:80"
  - "443:443"

初始化您的 Docker 容器

重建您的应用

./launcher rebuild app

就这样,搞定了!

排错

请先阅读一次日志,

./launcher logs app

看看什么出错了。

它是如何工作的

使用的模板大致基于 @igrigorik 推荐的模板,除了:

  • 我跳过了 OSCP stapling,因为它让安装变得更复杂了一点点
  • 在我们使用主线前我不得不跳过会话记录设置

镜像有重写规则,会将任何至 80 或 443 的请求定向至 https://DISCOURSE_HOST_NAME,意味着您不需为多个域名设置证书,而只需设置一个。

自定义安装它非常简单,见:

您可以拷贝一份文件并根据需要扩展模板。

使用此模板的意义在于我们会持续更新 Discourse 默认安装的 NGINX。

测试您的配置

https://www.ssllabs.com/ssltest/ 确保一切工作正常。有些浏览器和操作系统可能会接受部分配置的 https,但还是先检查看看吧。

2赞

I moved 2 posts to a new topic: 本站 SSL 证书未受信任

应该没有后面的24,估计是复制的时候把点击次数也复制过来了

1赞
  • "templates/cron.template.yml"
    这个默认是没有的。那么我们自己是否需要添加?我看官方论坛那文章里是没有这个的。

不需要,已经更新了文档。

@fantasticfears 这一步具体是怎么做呢?不懂

同样在配置文件里加上那一行

OK,这几天建个新站,到时候试试,不懂再问你