通过访问密钥签发机构上面提供的信息了解到:Let’s Encrypt 针对一个域名只会在一定时间内签发 5 次,如果你超过了签发的次数,你需要 5 天后才能再次申请。
这个可能对你会造成无法安装成功的影响,因为你只有 5 次安装的机会,否则你在安装过程中会得到错误信息如下:
[Sun 04 Oct 2020 04:52:58 AM UTC] Create new order error. Le_OrderFinalize not found. {
"type": "urn:ietf:params:acme:error:rateLimited",
"detail": "Error creating new order :: too many certificates already issued for exact set of domains: www.ossez.com: see https://letsencrypt.org/docs/rate-limits/",
"status": 429
}
使用 CA 签名的域名
我们参考了官方的帮助文档,并且参照我们的平台进行测试后安装成功了。
现将经验分享给大家。
官方的安装 CA 签名密钥内容如下:https://meta.discourse.org/t/advanced-setup-only-allowing-ssl-https-for-your-discourse-docker-setup/13847
购买 SSL
首先你获得已经对你域名签名的密钥,这个密钥通常的格式是 key 和 crt。
如果你对 https 签名的流程还不太了解的话,你可以搜索下相关文章。
最简单的逻辑就是你自己生成一个 key,然后将这个 key 和你的域名信息发给 CA 签发机构,这些机构会对你的信息进行一些审查。因为我们只签名 www 和根域名,这种签名方式是最简单的,只要校验你是不是域名的持有者,基本会发个邮件到你的邮箱中就可以确认了。
当上面的信息确认后,CA 会将你发给他们的 key 进行签名,签名后将结果返回给你,这就是你拿到的 crt。
要对域名进行 https 加密,需要上面 2 个文件就可以了。
将文件上传到服务器
Discourse 对文件的命名有要求,你不能随意命名。不管你签名的域名是什么。你在安装的时候的 key 文件需要命名为 ssl.key,你的 crt 文件需要命名为 ssl.crt。
你不能将你的密钥命名为其他名称,文件名要和上面的要求一致。
文件放置的位置为:/var/discourse/shared/standalone/ssl 路径下面。
配置信息如下表:
文件名 | 类型 | 放置路径 |
---|---|---|
ssl.key | key 文件 | /var/discourse/shared/standalone/ssl/ssl.key |
ss.crt | crt 文件 | /var/discourse/shared/standalone/ssl/ssl.crt |
请注意,这个放置的位置是你的服务器的文件路径位置,不是你服务器上安装 docker 容器后,docker 容器内的文件路径。
如上图,我们显示的文件路径和文件内容。
如果你服务器上不仅仅只有这 2 个文件,可能还有其他签名的文件的话,请删除其他的文件,只保留这 2 个文件。
修改 app.yml
修改 app.yml 文件中的配置。
app.yml 文件的路径为 /var/discourse/containers/app.yml,可以使用下面的命令进行修改:
vi /var/discourse/containers/app.yml
在这里,有 2 个地方需要注意:
如果
- "templates/web.ssl.template.yml"
这一行被注释的话,你需要取消注释。
如果
- "templates/web.letsencrypt.ssl.template.yml"
这一行没有注释的话,你需要注释上。
我们的文件看起如下:
## Uncomment these two lines if you wish to add Lets Encrypt (https)
- "templates/web.ssl.template.yml"
# - "templates/web.letsencrypt.ssl.template.yml"
上面的这个配置这样注释的意图就是,启用 ssl 的配置,但是撤销使用 letsencrypt 的 ssl 签名。
完成上面的修改后,保存退出。
开放端口
你需要进行检查你容器的端口。
你需要查看下你的 app.yml 文件中的端口是否被添加到容器中了。
expose:
- "80:80"
- "443:443"
你可以为你的容器开放跟多的端口,但是针对 https 和 http ,你需要至少开放 80 和 443 端口。
在上面我们的配置中,我们开放了上述的 2 个端口。
重新编译
在完成上面的所有操作后,进入目录 /var/discourse,然后在这个目录下运行:
./launcher rebuild app
对整个网站进行重新编译。当编译部署完成后,使用命令:
./launcher logs app
查看编译的结果,如果没有任何错误,表示编译部署成功,你的网站应该使用的是你自己的密钥了。
为了保险起见,你可以重启下 docker 容器。
重启 docker 容器的命令是:
systemctl restart docker
校验安装
在完成上面的所有操作后,你就可以通过浏览器访问你的网站的。
在任何浏览器的右上角,单击带锁的图标,然后查看证书。
你可以通过这个链接查看你证书的签发机构,有效期和相关信息,以确定你的证书被正确安装到服务器上了。
希望我们能一起构建更加安全和清洁的网络。