引言
Discourse一款功能强大、现代化的开源论坛软件,由Stack Overflow的联合创始人Jeff Atwood推出。它基于Ruby on Rails和Ember.js开发,使用PostgreSQL和Redis数据库。Discuz,被腾讯收购后许久没有更新,部署安装时一堆报错,我更倾向于discourse。
这篇文章将为诸位提供一份在独立环境或Nginx的环境中部署Discourse论坛De 指南,让你能够从头到尾顺利地完成Discourse的安装。本文非一蹴而就,而是站在了前人的肩膀上,参考并总结了大量线上的资料和线下自己部署的实践经验。开源不易,在此感谢为此开源项目做出贡献的人!
关于discourse特点
- 现代化、简洁的界面设计,支持响应式布局,在手机、平板和桌面上都有良好的浏览体验。
- 类似电子邮件的讨论模式,回复会自动嵌入到帖子中,方便追踪和查看最新回复。
- 搜索功能强大,支持全文检索、自动关键词高亮等。
- 用户可订阅感兴趣的主题,并接收新回复提醒。
- 支持Markdown格式编辑帖子,方便插入代码块、公式等。
- 内置的用户分类、信任等级等社区管理功能。
- 可扩展的插件生态系统,可由社区贡献多种插件扩展功能。
- 支持导入导出,便于从其它论坛系统迁移数据。
- 开发活跃,持续更新迭代,修复漏洞并优化性能。
准备工作
- 域名:Discourse 不能通过 IP 地址来工作,需要一个域名作为论坛的站点地址,并将其解析到你要部署的服务器IP地址。
- 邮箱:一个支持SMTP的邮箱,用户名和密码,用于Discourse的邮件通知(重要 用户注册、登录、密码找回等)
- 服务器:内存大户,官方文档中推荐的最低配置是1 核2G、10GB磁盘。小机可添加交换分区,它的大小应该是物理内存的 1 到 2 倍,Swap 可以帮助缓解内存压力,但仅是一个备选项,过多依赖可能导致系统性能下降,建议优先考虑增加内存或者优化应用程序内存使用。
独立环境部署步骤
1. 系统环境准备
选择一个Linux发行版,如Ubuntu或CentOS,这里演示使用的是CentOS9,全新部署discourse。使用root用户连接到终端,复制粘贴下方代码,安装过程中需要root权限。更新系统包并安装必要的软件Git。
# 以CentOS9为例: yum update -y yum install git -y #安装 Git
如果你是Ubuntu,则为
# 以Ubuntu为例: apt update apt upgrade -y #更新软件包 apt install git -y #安装 Git
安装Docker(可选)如果你想使用指定的 Docker 版本,你可以在你的服务器上自定义安装docker。 你的服务器上没有默认安装 Docker,那么执行 discourse-setup 时将会自动从Docker下载并安装。
2. 克隆 Discourse Docker 仓库
克隆Discourse Docker官方镜像到本地 /var/discourse 目录。
sudo -s #获取root权限 git clone https://github.com/discourse/discourse_docker.git /var/discourse
3. 配置Discourse
运行 discourse-setup 安装脚本
cd /var/discourse chmod 700 containers ./discourse-setup
你需要根据脚本的提示配置论坛的重要参数
Hostname for your Discourse? [discourse.example.com]: #你的域名(重要不要错了)
Email address for admin account(s)? [[email protected],[email protected]]: #要注册为管理员的邮箱地址,添加多个时英文逗号分隔(安装好后台可以添加修改)
SMTP server address? [smtp.example.com]: #SMTP服务器地址,例如是Google邮箱则为smtp.gmail.com
SMTP port? [587]: #smtp的端口
SMTP user name? [[email protected]]: #smtp登录用户名
SMTP password? [pa$word]: #smtp的登录密码
Let's Encrypt account email? (ENTER to skip) [[email protected]]: #按回车跳过
等待构建,整个安装启动过程可能需要耗费 十多分钟 来配置 Discourse,具体时间根据服务器性能决定。一旦初始化安装配置完成后,你的 Discourse 应该可以通过你配置的域名在浏览器上访问可以看见注册向导了。
Nginx的环境中部署
官网提供的脚本虽然安装便利,但安装时默认脚本会占用443、80端口,如果此服务器上有其他的网站,则无法安装。如果你在内网环境中部署,也可使用此方法。的此时就要自定义app.yml
文件。首先按照上文更新并安装必要软件后,手动安装docker
1. 安装docker
这里给大家分享一个docker官方提供的安装命令,通过此命令你可以在任何Linux发行版上安装docker。参考这篇文章官网脚本一键安装docker和docker compose、docker更换国内源 | BOBO Blog (soulcloser.com)
2. 克隆 Discourse Docker 仓库
还是一样克隆Discourse Docker官方镜像到本地 /var/discourse 目录。不过这里要手动复制、修改配置文件。
sudo -s git clone https://github.com/discourse/discourse_docker.git /var/discourse cd /var/discourse chmod 700 containers cp samples/standalone.yml containers/app.yml vi containers/app.yml #编辑 app.yml 文件
进入编辑页面,要修改的地方和上文一样,找到对应的值修改就行了。这里我只单独贴自定义端口修改位置的图片了,以自定义80端口为8080、443端口为8443为例。检查无误后,保存退出。

3. 重构discourse
接着执行下方命令重构并启动:
./launcher bootstrap app ./launcher start app
4. 配置反向代理
为了使 Discourse 和其他网站程序能够共存,我们将使用 Nginx 作为反向代理服务器。以下是 Nginx 的配置示例,此配置会将 HTTP请求重定向到 HTTPS,下述配置中:
yourdomain.com
应替换为你的域名。ssl_certificate
和ssl_certificate_key
应替换为你的 SSL 证书和私钥的路径。- (重要)
8080
是 Discourse 容器内部http使用的端口,那用https(8443)端口可以吗?不行,https只能通过域名访问,discourse是禁止了IP地址访问论坛的,但是我测试使用http可以访问,改为https会提示拒绝连接。
server { listen 80; server_name yourdomain.com; location / { return 301 https://$host$request_uri; } } server { listen 443 ssl; server_name yourdomain.com; # SSL 配置 ssl_certificate /path/to/your/certificate.crt; ssl_certificate_key /path/to/your/private-key.key; # 其他 SSL 配置... location / { proxy_pass http://localhost:8080/; proxy_set_header Host $http_host; proxy_http_version 1.1; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Proxy ""; } }
通过以上步骤,就可以在同一服务器上成功部署 Discourse 论坛和其他网站程序共存。现在你只需要跟着步骤注册就🆗演示地址:https://bbs.soulcloser.com

总结
借助discourse_docker项目, 我们只需极少的命令和配置,就能在服务器上部署一个全新的Discourse论坛实例。Docker的隔离性使它健壮、高效,并且便于日后升级维护。接下来,就大展身手,为你的社区打造一个活跃、强大的论坛平台吧!
如果这篇文章对你有帮助,可以分享给你的朋友。需要免费的技术支持的话,可以在评论区留言或者在这里注册账户与我取得在线联系https://bbs.soulcloser.com 😎文章分享链接:https://www.soulcloser.com/3921
版权声明 © 2024 BOBO Blog :原创文章,本文不允许在未获取作者同意的情况下以任何形式复制其内容、摘编、转载。
Start the discussion at bbs.soulcloser.com