先看演示Discourse论坛效果:云上社区
![图片[1]-[实战教程]用aapanel或者宝塔搭建Discourse论坛 - 源码站-源码站](https://www.yuanmazhan.net/wp-content/uploads/2026/01/QQ20260114-145425-1024x707.png)
在 aaPanel(宝塔国际版/国内版同理)上搭建 Discourse 是一个稍微有点“进阶”的操作。
核心难点在于: Discourse 官方强制推荐 Docker 安装,并且默认想独占 80 和 443 端口。而 aaPanel 的 Nginx 已经占用了这些端口。
解决方案: 我们让 Discourse 的 Docker 容器运行在非标准端口(例如 8088),然后利用 aaPanel 的 Nginx 建立一个反向代理指向它。
以下是保姆级教程:
第一步:准备工作
- 服务器配置: 建议 2GB 内存 以上(如果只有 1GB,必须设置 2GB 的 Swap 交换分区,否则安装时 100% 会内存溢出报错)。
- 系统环境: 建议 Ubuntu 20.04+ 或 Debian 10+(CentOS 安装 Docker 可能会有奇奇怪怪的问题,但也能用)。
- SMTP 服务: Discourse 必须要配置邮件发送服务(如 Mailgun, SendGrid, 阿里云邮件推送等)才能注册管理员账号,这是强制的。
第二步:在 aaPanel 安装 Docker
- 登录 aaPanel 面板。
- 去 App Store 搜索 Docker。
- 点击安装(Install),等待安装完成。
- 确保 Docker 服务显示为“Running”。
第三步:在 aaPanel 创建网站
我们需要先建立一个空网站,用来管理 SSL 证书和反向代理。
- 点击 Website → Add site。
- Domain name: 填写你的论坛域名(例如 bbs.example.com)。
- PHP version: 选择 Pure Static (纯静态) 即可,因为 Discourse 不用 PHP。
- Database: 不需要创建。
- 提交创建。
- 设置 SSL:点击网站设置 → SSL → 选择 Let’s Encrypt → 申请并开启 HTTPS(右上角 Force HTTPS 最好也打开)。
第四步:安装 Discourse (命令行操作)
现在需要通过 SSH 连接到你的服务器(使用终端工具或 aaPanel 自带的 Terminal)。
- 创建 Discourse 目录并下载程序:
sudo -s mkdir /var/discourse git clone https://github.com/discourse/discourse_docker.git /var/discourse cd /var/discourse
- 配置安装文件:Discourse 默认提供了一个安装脚本,我们需要编辑它。
cp samples/standalone.yml containers/app.yml nano containers/app.yml(如果没有 nano,可以用 vi 或 vim)- 关键修改点 (非常重要,请仔细看):在编辑器中,你需要修改以下几处:
- 注释掉 SSL 模板 (因为 SSL 由 aaPanel 托管):
找到 templates 区域,把包含 web.ssl.template 和 web.letsencrypt.ssl.template 的行前面加 # 注释掉。修改后看起来像这样: templates: - "templates/postgres.template.yml" - "templates/redis.template.yml" - "templates/web.template.yml" - "templates/web.ratelimited.template.yml" ## - "templates/web.ssl.template.yml" <-- 注释掉这行 ## - "templates/web.letsencrypt.ssl.template.yml" <-- 注释掉这行
- 注释掉 SSL 模板 (因为 SSL 由 aaPanel 托管):
- 修改端口映射 (避免和 aaPanel 冲突):
找到 expose 区域,把 80:80 改成其他端口,比如 8088:80。同时注释掉 443。修改后看起来像这样: expose: - "8088:80" # 主机端口8088 映射到 容器端口80 # - "443:443" # 注释掉443,不需要容器处理HTTPS
- 修改端口映射 (避免和 aaPanel 冲突):
- 配置环境变量:
向下拉,找到 env 区域:- DISCOURSE_DEVELOPER_EMAILS: 填你的管理员邮箱。
- DISCOURSE_HOSTNAME: 填你的域名(bbs.example.com)。
- 邮件配置 (SMTP): 必须填对,否则收不到验证码。
- DISCOURSE_SMTP_ADDRESS: 你的 SMTP 服务器地址
- DISCOURSE_SMTP_PORT: 端口 (通常 587)
- DISCOURSE_SMTP_USER_NAME: 你的邮箱账号
- DISCOURSE_SMTP_PASSWORD: 邮箱密码
- 邮件配置 (SMTP): 必须填对,否则收不到验证码。
- 配置环境变量:
- 保存退出:
(如果是 nano,按 Ctrl+O 回车保存,Ctrl+X 退出)。
- 保存退出:
第五步:编译并启动 Discourse
在 /var/discourse 目录下执行:
codeBash
./launcher bootstrap app这个过程会非常慢,取决于你的服务器性能和网络(大约需要 10-20 分钟)。
如果编译成功,最后会提示 Successfully bootstrapped。
然后启动容器:
codeBash
./launcher start app此时,Discourse 已经在后台运行,监听在本地的 8088 端口。
第六步:在 aaPanel 设置反向代理
回到 aaPanel 的网页界面:
- 点击 Website,找到刚才创建的论坛网站,点击 Conf/Settings。
- 找到 Reverse Proxy (反向代理) 菜单。
- 点击 Add Reverse Proxy。
- Proxy Name: 随意填(如 discourse)。
- Target URL: 填写 http://127.0.0.1:8088 (这里的 8088 必须和你刚才在 app.yml 里设置的一样)。
- Sent Domain: 默认 $host 即可。
- 点击 Add Reverse Proxy。
- 点击 Submit (保存)。
第七步:最后的配置
- 打开浏览器,访问你的域名 https://bbs.example.com。
- 你应该能看到 Discourse 的欢迎界面。
- 点击 Register 注册第一个账号(必须使用你在 app.yml 里填写的管理员邮箱)。
- 去邮箱查收激活邮件,激活后你就是超级管理员了。
常见坑点 & 维护技巧
- 图片上传问题:
安装好后,进入 Discourse 后台设置,搜索 force https,勾选它。因为我们是通过 aaPanel 的 SSL 访问的,Discourse 需要知道自己是在 HTTPS 环境下,否则可能会出现图片加载失败或混合内容报错。
- 图片上传问题:
- 修改配置:
如果你以后想修改 SMTP 或域名,必须:- 编辑 nano /var/discourse/containers/app.yml
- 重新编译 ./launcher rebuild app (注意是 rebuild,这会停机几分钟)。
- 修改配置:
- 磁盘空间:
Discourse 的 Docker 镜像很大,如果你的 VPS 只有 20G 硬盘,要注意清理日志和旧镜像(./launcher cleanup)。
- 磁盘空间:
- 关于 SWAP:
如果你在 bootstrap 过程中报错失败,90% 是因为内存不够被系统杀进程了。
请在 aaPanel 的 Linux Tools 里添加 2GB 的 Swap,或者手动添加。
- 关于 SWAP:
祝你搭建成功!Discourse 虽然搭建麻烦点,但用起来是真的舒服。
上面是常规教程,其实这个论坛搭建,我用了好几个小时,因为装了aapanel,所有用的自带docker,但是问题点特别多,第一个就是优邮箱配置,如果要是用QQ 163之类的邮箱可能还简单一点,但是我用的Namecrane,这几费劲了,因为要改app.yml里边的配置,启用465端口和SSL链接,包括启用后出现BAD CSRF,包括邮箱收到链接激活后一直没下一步等问题都是SSL没配置,试了很多次,我把最终的修改版app.yml发出来参考:
env:
DISCOURSE_FORCE_HTTPS: true
DISCOURSE_SMTP_ADDRESS: us1.workspace.org
DISCOURSE_SMTP_PORT: 465
DISCOURSE_SMTP_USER_NAME: “info@123ys.net”
DISCOURSE_SMTP_PASSWORD: “你的密码或授权码”
关键:465(隐式TLS)
DISCOURSE_SMTP_FORCE_TLS: true
DISCOURSE_SMTP_ENABLE_START_TLS: false
关键:把认证方式从 plain 改为 login
DISCOURSE_SMTP_AUTHENTICATION: login
很多邮局会校验 HELO/MAIL FROM 域名
DISCOURSE_SMTP_DOMAIN: 123ys.net
很多邮局要求 From 必须是该账号/该域名允许的地址
DISCOURSE_NOTIFICATION_EMAIL: “info@123ys.net”每次修改推荐重启步命令。不然不生效:
cd /var/discoursesudo ./launcher rebuild app
还有反代配置:
1) Nginx 规则:把 location / 改成 location ^~ /,并禁用 PHP/Rewrite 干扰
你当前 vhost 里虽然有 location / { proxy_pass ... },但 aaPanel 还引入了:
include enable-php-00.conf;
include /www/server/panel/vhost/rewrite/bbs.123ys.net.conf;
这些经常会包含 匹配 .css/.js 的 location ~* 或 rewrite,导致 .css 不走你写的 proxy。
直接修改 bbs.123ys.net 的站点配置(推荐这么改)
在 aaPanel → 网站 → bbs.123ys.net → 配置文件:
- 注释掉这两行(对 Discourse 完全不需要):
# include enable-php-00.conf;
# include /www/server/panel/vhost/rewrite/bbs.123ys.net.conf;
- 把你现在的:
location / {
...
}
改成(关键是 ^~):
location ^~ / {
proxy_pass http://127.0.0.1:8090;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600;
proxy_connect_timeout 60;
}CF把小云朵叉掉,然后进CF缓存,里边清楚所有缓存。这是我折腾最久的两个地方,仅供参考。看着还不错。
![[实战教程]用aapanel或者宝塔搭建Discourse论坛 - 源码站-源码站](https://www.yuanmazhan.net/wp-content/uploads/2026/01/QQ20260114-145425-800x552.png)


暂无评论内容