AI摘要

本文详细介绍了使用Linux、宝塔面板、Docker和Discourse零基础搭建开源社区论坛的方法。Discourse是一款现代化的开源论坛程序,支持实时互动、移动友好、用户信任级别管理等功能,适合企业社区、兴趣社群等场景。文章还涵盖了域名注册、服务器准备、Discourse配置及安装步骤,并提供了邮件服务、SSL证书设置等实用技巧。通过宝塔面板简化了部署流程,方便新手快速上手。

Linux+宝塔+Docker+Discourse 零基础快速搭建论坛网站,Discourse是国外最受欢迎的开源论坛程序。

为什么选用宝塔来搭建呢?是为了更方便管理网站,以及可以在同一台服务器上部署多个网站。

视频教程:

这是我用Discourse搭建的一个论坛:https://bbs.eeclub.top/

之前还做过一个轻量级论坛程序Flarum的搭建教程,感兴趣的可以去看看:https://blog.zeruns.com/archives/866.html


Discourse简介

Discourse 是一款面向现代网络环境设计的开源论坛程序,核心定位是替代传统论坛,提供更流畅的社区互动体验。

Discourse 是 Stack Overflow 的联合创始人 Jeff Atwood 在十年前推出的。

国外很多名气很大的软件论坛都是采用 Discourse 搭建的,相比来说,国内采用率是较低的。

对比下 Discourse 和 Flarum,Discourse 使用率远高于 Flarum,但是 Flarum 在中国会比 Discourse 更为流行一些。所以使用 Discourse 出现问题找解决方案和相关资料最好也是搭个梯子 Google,百度的内容偏少一些。

Discourse 还自带AI插件,可以实现AI审核、AI翻译、AI搜索等功能,Discourse AI 配置教程:https://blog.zeruns.com/archives/917.html

一、核心特点

  • 实时互动: Discourse 支持实时更新,允许用户以一种对话的方式进行交流,而不是传统论坛中的“帖子”形式。这种实时性使得用户能够更自然地参与讨论。
  • 移动友好: Discourse 设计为适应不同屏幕大小,使其在移动设备上浏览和参与讨论变得更加方便。
  • 用户信任级别: Discourse 通过用户在社区中的活跃度和贡献程度来确定用户的信任级别。这有助于防范滥用和垃圾信息。
  • 强大的搜索功能: 论坛支持强大的搜索功能,帮助用户轻松找到他们感兴趣的主题和讨论。
  • 插件系统: Discourse 提供了丰富的插件系统,可以根据需求进行扩展,从而定制和增强论坛的功能。

二、主要适用场景

  • 企业 / 产品社区:用于产品反馈、用户交流,如软件公司的用户论坛、硬件产品的售后讨论区。
  • 兴趣社群:供小众兴趣群体(如技术、读书、摄影)交流,支持按话题细分讨论板块。
  • 内部协作平台:部分企业将其用作内部沟通工具,替代传统邮件或即时通讯软件,沉淀可追溯的协作内容。

三、部署与维护

Discourse 提供两种主要部署方式,满足不同用户需求:

部署方式优势劣势
官方托管(Hosted)无需技术背景,官方负责服务器维护、更新和安全需支付订阅费用,定制化自由度较低
自行部署(Self-hosted)完全免费,可自由选择服务器、深度定制功能需要具备服务器管理、代码部署的技术能力

宝塔面板简介

宝塔面板是一款功能强大的服务器管理软件,它支持Windows和Linux系统,并通过Web端提供了一种简便的方式来管理服务器,从而显著提升了运维效率。其主要特点和功能包括:

  1. 服务器管理:宝塔面板允许用户通过一个交互界面完成服务器的维护工作,例如更新系统、添加网站、修改设置等。这免去了用户记忆和输入复杂Linux命令的麻烦,通过简单的点击操作即可完成。
  2. 支持多种系统:宝塔面板支持Windows和Linux系统,这意味着无论是在Windows服务器还是Linux服务器上,用户都可以方便地使用宝塔面板进行管理。
  3. 一键管理功能:宝塔面板提供了包括网站、FTP、数据库在内的多种服务器管理功能。其可视化文件管理器、可视化软件管理器、可视化CPU、内存、流量监控图表和计划任务等功能,使得服务器管理变得更加直观和高效。
  4. 安全监控:宝塔面板还提供了服务器安全监控功能,如一键扫描服务器集群病毒、漏洞、挖矿木马等,以及实时发送告警,帮助运维人员快速定位故障。
  5. 易用性:宝塔面板的安装和使用都非常简单,用户可以在短时间内安装好面板,并通过鼠标点击操作来替代复杂的命令输入,大大降低了服务器管理的难度和复杂性。
    总的来说,宝塔面板是一个功能全面、易于使用且高效的服务器管理工具,适合各类用户进行服务器维护和管理。

宝塔官网: https://url.vpszj.cn/bt


其他建站教程推荐


域名注册

什么是域名?

域名是网站的「门牌地址」,用于代替难记的IP地址数字串(如192.168.1.1)。例如输入 blog.zeruns.com 就能访问特定网站,无需记忆服务器IP。

域名结构分为三部分:

  1. 后缀(如.com)代表网站类型
  2. 主域名(zeruns)是自定义名称
  3. 子域名(blog)可自由设置

当用户输入域名时,DNS系统会自动将其转换为服务器IP地址完成访问。注册域名需通过阿里云等平台购买(年费约50元左右,部分小众的后缀会便宜点),然后将域名与服务器IP绑定解析即可开通网站。好的域名应简短易记,如taobao.com通过谐音让人印象深刻。

注册域名

可以去腾讯云阿里云雨云等平台注册域名,也可以使用雨云的免费二级域名。

下面以雨云的为例,注册一个zeruns.xyz的域名。

在云产品里找到域名服务。

点击域名注册,搜索你要注册的域名。

根据提示输入信息

填写完信息后点击立即注册,然后等待审核完成就行

如果你用的境内的服务器那还需要进行域名备案。

备案的流程就不细说,自己去了解一下就行。

温馨提示:购买3个月以上的腾讯云阿里云等大厂的境内云服务器可以免费提供代备案服务,购买3个月以上雨云皓量云擎的境内服务器也可以免费提供代备案服务。


准备

首先需要一台云服务器,要有公网IP的,推荐雨云的:

雨云优惠注册地址:https://rain.zeruns.com/?s=blog

优惠码:zeruns

使用优惠码注册后绑定微信可获得首月5折优惠券,以及可在积分商城领取专属8折券

注册完账号后进到雨云控制台,云服务器入口可以在后台的 总览云产品 部分找到:

点击购买云服务器,接着选择服务器区域,国内用户建议选择内地机房。但如果你没有备案域名或不想备案的那建议选择中国香港或美国的服务器(建议优先选择中国香港,延迟较低)。

我这里选了香港三区的。

配置选择2核4G一般够用了,如果你网站用户多就选高点的配置,也可以后期升级配置。

系统选择Debian12,都选好后就可以点击立即购买了,年付有7折优惠(用我优惠码注册的可领取额外的8折券叠加年付7折使用实现5.6折),也可以选择1元试用1天。

购买后即可在我的云服务器这里看到你买的云服务器,点击管理

接着就可以看到云服务器的信息了,在这里重装/切换系统,可以升级配置。等待服务器创建完成就可以进行下一步了。


连接服务器

下载安装并打开ssh客户端软件,ssh客户端软件推荐putty或mobaxterm。

SSH客户端软件下载地址:https://www.123pan.com/ps/2Y9Djv-UAtvH.html

我这里用mobaxterm,在SSH客户端中输入你的服务器的IP地址(控制台获取),还有SSH端口(默认是22),然后点击好的或者打开。

然后输入账号并按回车,账号一般默认为root,接着输入密码(密码在控制台获取)并按回车确定,输入密码时不会显示出来。

温馨提示:在SSH终端中按住鼠标左键选择文字,然后松开鼠标,再在空白处单击一下,这样就把选中的文字复制了;在SSH终端单击右键即为粘贴。


APT换源(境外服务器无需进行这步)

系统默认apt软件下载源是国外服务器,所以需要换国内镜像源,使用chsrc来换源。

在SSH终端,输入下面的指令(#开头的是注释,不用输入)。

# 下载安装chsrc
curl https://chsrc.run/posix | bash

# 自动测速,寻找最快者,换源
chsrc set debian


安装宝塔面板

注册宝塔账号(下面登陆宝塔需要绑定宝塔账号):https://www.bt.cn/u/tbUafD

在终端中输入以下命令安装宝塔面板:

if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wget -O install_panel.sh https://download.bt.cn/install/install_panel.sh;fi;bash install_panel.sh ed8484bec

然后输入y再按回车确定

安装完成后记下登陆地址和账号密码

在浏览器地址栏输入登陆地址登陆进去。

安装LNMP套件,选项默认即可,安装方式生产环境建议选择编译安装,但编译安装时间较长。(其实只用到了NGINX,可以只勾选NGINX,但如果你还需要搭建其他PHP网站就需要把其他都勾选上)

然后等待安装完成即可进行下一步。


设置域名解析

到域名解析控制台,添加记录,主机名称自己输入一个名字,比如输入bbs,访问网站的时候就是bbs.zeruns.xyz ,输入@,访问网站就直接访问 zeruns.xyz,记录值输入自己服务器的IP。


部署Discourse

Discourse需要用到Docker,所以要先安装Docker,在宝塔面板中点击 Docker立即安装,安装方式选默认,然后确认,接着等待安装完成。

回到SSH终端执行下面的命令下载Discourse源码,逐行执行,注释不要复制进去。(/www/dk_project/dk_app目录是宝塔面板默认docker应用的存放目录,也可以自己改到其他目录,不懂命令的作用就不要改)

#创建discourse目录
mkdir /www/dk_project/dk_app/discourse/
#进入discourse目录
cd /www/dk_project/dk_app/discourse/
#克隆项目
git clone https://github.com/discourse/discourse_docker.git .
#把该discourse目录加入全局信任列表,防止警告报错信息
git config --global --add safe.directory /www/dk_project/dk_app/discourse

设置Discourse,因为 Linux 面板会占用默认的 80 443 端口,并且我们的安装目录也和默认的不一样,所以我们不能直接按照官方执行 ./discourse-setup而是需要先编辑配置文件,在SSH终端里执行下面的命令将 /www/dk_project/dk_app/discourse/samples/standalone.yml 这个文件复制并重命名到 /www/dk_project/dk_app/discourse/containers/app.yml 这个位置,这是用于单容器安装的模板配置文件。

cp /www/dk_project/dk_app/discourse/samples/standalone.yml /www/dk_project/dk_app/discourse/containers/app.yml

接着在宝塔面板的文件管理这里进入到 /www/dk_project/dk_app/discourse/containers 目录,编辑 app.yml 文件。

配置文件模板的中文注释版:

## 这是一个一体化的、独立的Discourse Docker容器模板
##
## 修改此文件后,你必须重建容器,执行命令:
## /var/discourse/launcher rebuild app
##
## 编辑时务必非常小心!
## YAML文件对空格或对齐错误极其敏感!
## 必要时可访问http://www.yamllint.com/验证此文件

templates:
  - "templates/postgres.template.yml"  # PostgreSQL数据库配置模板
  - "templates/redis.template.yml"     # Redis缓存配置模板
  - "templates/web.template.yml"       # Web服务基础配置模板
  - "templates/web.ratelimited.template.yml"  # 带速率限制的Web服务配置模板
  ## 如果希望添加Lets Encrypt(用于HTTPS加密),请取消这两行的注释
  #- "templates/web.ssl.template.yml"
  #- "templates/web.letsencrypt.ssl.template.yml"

## 此容器应暴露哪些TCP/IP端口?
## 如果希望Discourse与Apache或nginx等其他Web服务器共享端口,
## 请参考https://meta.discourse.org/t/17247了解详情
expose:
  - "80:80"   # HTTP协议端口
  - "443:443" # HTTPS协议端口

params:
  db_default_text_search_config: "pg_catalog.english"  # 数据库默认文本搜索配置(英文)

  ## 将db_shared_buffers设置为总内存的最大25%
  ## 启动程序会根据检测到的内存自动设置,也可手动覆盖
  #db_shared_buffers: "256MB"

  ## 可提高排序性能,但会增加每个连接的内存使用量
  #db_work_mem: "40MB"

  ## 此容器应使用哪个Git版本?(默认:latest,即最新版)
  #version: latest

env:
  LC_ALL: en_US.UTF-8  # 系统区域设置(UTF-8编码,美式英语)
  LANG: en_US.UTF-8
  LANGUAGE: en_US.UTF-8
  # DISCOURSE_DEFAULT_LOCALE: en  # Discourse默认语言(默认英文)

  ## 支持多少并发Web请求?取决于内存和CPU核心数
  ## 启动程序会根据检测到的CPU自动设置,也可手动覆盖
  #UNICORN_WORKERS: 3

  ## 待办:此Discourse实例将响应的域名(必填项)
  ## Discourse无法直接使用纯IP地址运行
  DISCOURSE_HOSTNAME: 'discourse.example.com'

  ## 如果希望容器启动时使用与上面指定相同的主机名(-h选项),请取消注释
  ## (默认主机名格式:"$hostname-$config")
  #DOCKER_USE_HOSTNAME: true

  ## 待办:初始注册时将被设为管理员和开发者的邮箱列表(逗号分隔)
  ## 示例:'[email protected],[email protected]'
  DISCOURSE_DEVELOPER_EMAILS: '[email protected],[email protected]'

  ## 待办:用于验证新账户和发送通知的SMTP邮件服务器
  # SMTP地址为必填项
  # 警告:SMTP密码应放在引号中,以避免特殊字符导致的问题
  DISCOURSE_SMTP_ADDRESS: smtp.example.com  # SMTP服务器地址
  #DISCOURSE_SMTP_PORT: 587                 # SMTP服务器端口(默认587)
  DISCOURSE_SMTP_USER_NAME: [email protected]  # SMTP用户名
  DISCOURSE_SMTP_PASSWORD: "pa$$word"       # SMTP密码
  #DISCOURSE_SMTP_ENABLE_START_TLS: true    # 是否启用STARTTLS加密(可选,默认:true)
  #DISCOURSE_SMTP_DOMAIN: discourse.example.com  # SMTP域名(部分服务商要求)
  #DISCOURSE_NOTIFICATION_EMAIL: [email protected]  # 发送通知的邮箱地址
  #DISCOURSE_SMTP_OPENSSL_VERIFY_MODE: peer  # SSL验证模式(可选,默认:peer,有效值:none, peer, client_once, fail_if_no_peer_cert)
  #DISCOURSE_SMTP_AUTHENTICATION: plain     # SMTP认证方式(默认:plain,有效值:plain, login, cram_md5)

  ## 如果已添加Lets Encrypt模板,请取消下面的注释以获取免费SSL证书
  #LETSENCRYPT_ACCOUNT_EMAIL: [email protected]

  ## 此Discourse实例的HTTP或HTTPS CDN地址(配置为拉取模式)
  ## 详情请参考https://meta.discourse.org/t/14857
  #DISCOURSE_CDN_URL: https://discourse-cdn.example.com

  ## 用于IP地址查询的MaxMind地理定位IP账户ID和许可证密钥
  ## 详情请参考https://meta.discourse.org/t/-/173941
  #DISCOURSE_MAXMIND_ACCOUNT_ID: 123456
  #DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456

## Docker容器是无状态的;所有数据都存储在/shared目录中
volumes:
  - volume:
      host: /var/discourse/shared/standalone  # 主机上的共享数据目录
      guest: /shared                          # 容器内对应的共享目录
  - volume:
      host: /var/discourse/shared/standalone/log/var-log  # 主机上的日志存储目录
      guest: /var/log                                      # 容器内日志目录的映射

## 插件配置在此处
## 详情请参考https://meta.discourse.org/t/19157
hooks:
  after_code:
    - exec:
        cd: $home/plugins  # 进入插件目录
        cmd:
          - git clone https://github.com/discourse/docker_manager.git  # 克隆Docker管理插件

## 构建后要运行的任何自定义命令
run:
  - exec: echo "Beginning of custom commands"  # 自定义命令开始标记
  ## 如果想设置首次注册的“发件人”邮箱地址,请取消注释并修改:
  ## 收到第一封注册邮件后,请重新注释此行。此命令只需运行一次。
  #- exec: rails r "SiteSetting.notification_email='[email protected]'"
  - exec: echo "End of custom commands"  # 自定义命令结束标记

需要编辑的点有以下几个:

1.端口映射

expose:
  - "180:80"   # http
  - "1443:443" # https

这里,我们将容器在宿主机的端口设置为了 180 和 1433,这样就不会因为面板占用端口而安装失败了,你也可以改成别的端口,但记住,后面要用。同时,我们禁止了容器直接向公网暴露自己,方便我们使用 宝塔Nginx防火墙。

2.绑定域名

DISCOURSE_HOSTNAME: 'bbs.zeruns.xyz'

将单引号里的域名改成你自己的。

3.管理员邮件地址

DISCOURSE_DEVELOPER_EMAILS: '[email protected]'

将单引号里的邮件地址改成自己的,这个一定要提前设好自己的邮箱,不然最后一步没法激活管理员账号。

4.邮件发送配置

DISCOURSE_SMTP_ADDRESS: smtp.qq.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: [email protected]
DISCOURSE_SMTP_PASSWORD: "xxxxxxxx"
DISCOURSE_NOTIFICATION_EMAIL: [email protected] 

这里要配置SMTP邮件发送的相关信息,我这里用QQ邮箱,如果你也用QQ邮箱的话SMTP地址和端口可以跟这上面一样,然后邮箱地址改成自己的,密码到QQ邮箱的账号与安全设置中的POP3/IMAP/SMTP/Exchange/CardDAV 服务设置里生成授权码

你也可以自己搭建一个自己的邮箱服务器使用自己的域名做邮箱地址,搭建教程:https://blog.zeruns.com/archives/822.html

5.配置永久化存储

volumes:
  - volume:
      host: /www/dk_project/dk_app/discourse/shared/standalone
      guest: /shared
  - volume:
      host: /www/dk_project/dk_app/discourse/shared/standalone/log/var-log
      guest: /var/log

相当于将两个宿主机文件夹映射到运行容器内,使得 Discourse 每次“重建”时不会丢失内容。后续,你也可以用宝塔的文件管理直接去管理这些目录,不用深入 Docker 终端了。

完成之后,检查一遍,点击确认保存

6.将containers目录的权限改成700

开始安装

回到终端,如果已经断开连接了,你需要重新用 SSH 连接。

接着执行 cd /www/dk_project/dk_app/discourse 回到安装目录。

然后执行:./launcher rebuild app

等待安装结束,即可完成安装了。(大概需要十多分钟)如果一切正常,终端将不会弹出任何错误提示,并回到命令行。然后,你将在 宝塔 的“容器”面板里,看到一个已经在运行的容器。(安装过程会有一个临时的容器,要等到容器名为app的容器出来才安装完)

注意:境内服务器由于有可能无法访问Github而导致安装失败,需自行挂梯子进行安装,或可能因连接Github的速度过慢导致安装所需时间大大增加。


配置网站和证书

回到宝塔面板,在 Docker→网站→创建→反代容器 里面创建网站。如下图所示,域名输入你自己的域名,容器选app,端口选80端口映射出来的。

点刚才创建的网站右边的设置,点击SSLLet's Encrypt申请证书

证书申请成功后把强制HTTPS勾选上,然后保存

接着在浏览器地址栏输入你网站域名并打开,按照引导注册管理员账号。

注册后如果上面的邮箱配置没错会发送一封邮件到你上面设置的管理员邮箱,复制邮件里的验证地址到浏览器打开激活管理员账号即可。

接着按照引导设置网站名称和描述以及语言等信息。

网站到此就搭建完成了,可以点击左侧栏的管理员到网站后台设置网站,如果需要安装插件的可以到Discourse的官方社区找插件和看安装教程。

安装过程中出现任何问题,你都可以通过修改配置文件,重新执行 ./launcher rebuild app 来继续安装。


推荐阅读

English Version of the Article: https://blog.zeruns.top/archives/79.html



最后修改:2025 年 11 月 05 日
如果您觉得我的文章有帮助,请随意赞赏,赞赏有助于激发博主的热情,感谢!