嘟嘟社区

【教程】如何搭建一个真正可用的discourse论坛


转:https://clochat.com/t/topic/21

discourse论坛的搭建教程很多,但真正优化到稳定好用的,照顾到细节的并不多
在这篇文章里记录下这个网站的搭建过程,以及如何做基础的安全防护
前面是基础安装,后面是防护和优化,防护和优化比较重要

先安装docker
安装docker,采用一键安装

curl -L get.docker.com | bash
拉取git项目
apt install git
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
chmod 700 containers
配置discourse
./discourse-setup
回答下面的问题,主要是把smtp给配置对了

Hostname for your Discourse? [discourse.example.com]:
Email address for admin account(s)? [[email protected],[email protected]]:
SMTP server address? [smtp.example.com]:
SMTP port? [587]:
SMTP user name? [[email protected]]:
SMTP password? [pa$$word]:
Let’s Encrypt account email? (ENTER to skip) [[email protected]]:
Optional Maxmind License key () [xxxxxxxxxxxxxxxx]:
discourse-setup这个命令是用于生成配置文件的,配置文件位于 /var/discourse/containers/app.yml
后面你可以再次运行./discourse-setup重新生成,也可以直接编辑配置文件,每次编辑配置文件后要重新运行 ./launcher rebuild app编译docker镜像
编译docker镜像要花费10-20分钟,这是discourse最烦的地方之一,每次编辑个配置都要重新编译镜像

机器配置要求
官方说1C1G就可以安装,但实际上至少至少2C2G,稳定运行建议2C4G以上

防护和优化
本地速率限制
discourse很笨重,你搭建的网站可能被别人攻击一下就掉线了,所以防护很重要
防护分CDN和本地防护,本地这里discourse已经帮你配置了nginx防护规则,所以如果你是小白,可以直接用docker暴露出的nginx端口,一般情况下就够用了
如果你使用了CDN,比如cloudflare,那么下面这条配置非常非常关键

templates:
  – "templates/cloudflare.template.yml"
  – "templates/web.ratelimited.template.yml" #这条默认开启
一定要在templates里面加一条cloudflare.template.yml,这条规则会重新编译nginx,增加realip模块,不然别人cc你网站的时候,discourse会把cloudflare的ip拉黑,非常坑。

是否在docker外另开一个nginx
discourse每次修改配置,都要重新编译镜像,这个很让我不爽
而且修改discourse镜像里面nginx的配置,要手写templates,然后编译进去
所以我在docker外用nginx代理内部的端口,让docker监听本地端口
为了防止realip不认识我的本地ip,需要把docker的内网ip加到realip的信任ip上

防止扫描
禁止了除cloudflare外的ip访问443端口

防止discourse摘要爬虫露ip
discourse有爬取网站摘要的功能,会暴露ip,为了防止此类问题直接让出战流量走warp
CDN端的防护也有些讲究,大家感兴趣的话,有时间我再写一篇关于CDN的防护配置。

装个JB论坛也要docker

discourse是这样的,官方推荐用docker,能够和上游保持同步更新

反正都用笨重的discourse了,也不在乎这点消耗