[实战教程]用aapanel或者宝塔搭建Discourse论坛

先看演示Discourse论坛效果:云上社区

图片[1]-[实战教程]用aapanel或者宝塔搭建Discourse论坛 - 源码站-源码站

在 aaPanel(宝塔国际版/国内版同理)上搭建 Discourse 是一个稍微有点“进阶”的操作。

核心难点在于: Discourse 官方强制推荐 Docker 安装,并且默认想独占 80 和 443 端口。而 aaPanel 的 Nginx 已经占用了这些端口。

解决方案: 我们让 Discourse 的 Docker 容器运行在非标准端口(例如 8088),然后利用 aaPanel 的 Nginx 建立一个反向代理指向它。

以下是保姆级教程:


第一步:准备工作

    1. 服务器配置: 建议 2GB 内存 以上(如果只有 1GB,必须设置 2GB 的 Swap 交换分区,否则安装时 100% 会内存溢出报错)。

    1. 系统环境: 建议 Ubuntu 20.04+ 或 Debian 10+(CentOS 安装 Docker 可能会有奇奇怪怪的问题,但也能用)。

    1. SMTP 服务: Discourse 必须要配置邮件发送服务(如 Mailgun, SendGrid, 阿里云邮件推送等)才能注册管理员账号,这是强制的


第二步:在 aaPanel 安装 Docker

    1. 登录 aaPanel 面板。

    1. App Store 搜索 Docker

    1. 点击安装(Install),等待安装完成。

    1. 确保 Docker 服务显示为“Running”。


第三步:在 aaPanel 创建网站

我们需要先建立一个空网站,用来管理 SSL 证书和反向代理。

    1. 点击 WebsiteAdd site

    1. Domain name: 填写你的论坛域名(例如 bbs.example.com)。

    1. PHP version: 选择 Pure Static (纯静态) 即可,因为 Discourse 不用 PHP。

    1. Database: 不需要创建。

    1. 提交创建。

    1. 设置 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" <-- 注释掉这行

        • 修改端口映射 (避免和 aaPanel 冲突):
          找到 expose 区域,把 80:80 改成其他端口,比如 8088:80。同时注释掉 443。修改后看起来像这样:
        • expose: - "8088:80" # 主机端口8088 映射到 容器端口80 # - "443:443" # 注释掉443,不需要容器处理HTTPS

        • 配置环境变量
          向下拉,找到 env 区域:
            • DISCOURSE_DEVELOPER_EMAILS: 填你的管理员邮箱。

            • 邮件配置 (SMTP): 必须填对,否则收不到验证码。
                • DISCOURSE_SMTP_ADDRESS: 你的 SMTP 服务器地址

                • DISCOURSE_SMTP_PORT: 端口 (通常 587)

                • DISCOURSE_SMTP_USER_NAME: 你的邮箱账号

                • DISCOURSE_SMTP_PASSWORD: 邮箱密码

  1.  

    1. 保存退出:
      (如果是 nano,按 Ctrl+O 回车保存,Ctrl+X 退出)。


第五步:编译并启动 Discourse

在 /var/discourse 目录下执行:

codeBash

./launcher bootstrap app

这个过程会非常慢,取决于你的服务器性能和网络(大约需要 10-20 分钟)。

如果编译成功,最后会提示 Successfully bootstrapped。

然后启动容器:

codeBash

./launcher start app

此时,Discourse 已经在后台运行,监听在本地的 8088 端口。


第六步:在 aaPanel 设置反向代理

回到 aaPanel 的网页界面:

    1. 点击 Website,找到刚才创建的论坛网站,点击 Conf/Settings

    1. 找到 Reverse Proxy (反向代理) 菜单。

    1. 点击 Add Reverse Proxy
        • Proxy Name: 随意填(如 discourse)。

        • Target URL: 填写 http://127.0.0.1:8088 (这里的 8088 必须和你刚才在 app.yml 里设置的一样)。

        • Sent Domain: 默认 $host 即可。

    1. 点击 Submit (保存)。


第七步:最后的配置

    1. 打开浏览器,访问你的域名 https://bbs.example.com

    1. 你应该能看到 Discourse 的欢迎界面。

    1. 点击 Register 注册第一个账号(必须使用你在 app.yml 里填写的管理员邮箱)。

    1. 去邮箱查收激活邮件,激活后你就是超级管理员了。


常见坑点 & 维护技巧

    1. 图片上传问题
      安装好后,进入 Discourse 后台设置,搜索 force https,勾选它。因为我们是通过 aaPanel 的 SSL 访问的,Discourse 需要知道自己是在 HTTPS 环境下,否则可能会出现图片加载失败或混合内容报错。

    1. 修改配置
      如果你以后想修改 SMTP 或域名,必须:
        1. 编辑 nano /var/discourse/containers/app.yml

        1. 重新编译 ./launcher rebuild app (注意是 rebuild,这会停机几分钟)。

    1. 磁盘空间
      Discourse 的 Docker 镜像很大,如果你的 VPS 只有 20G 硬盘,要注意清理日志和旧镜像(./launcher cleanup)。

    1. 关于 SWAP
      如果你在 bootstrap 过程中报错失败,90% 是因为内存不够被系统杀进程了。
      请在 aaPanel 的 Linux Tools 里添加 2GB 的 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/discourse
sudo ./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 → 配置文件:

    1. 注释掉这两行(对 Discourse 完全不需要):

# include enable-php-00.conf;
# include /www/server/panel/vhost/rewrite/bbs.123ys.net.conf;

    1. 把你现在的:

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缓存,里边清楚所有缓存。这是我折腾最久的两个地方,仅供参考。看着还不错。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容