转: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的防护配置。 |