本教程将向您展示如何在 Ubuntu 20.04/18.04 服务器上安装 Discourse。Discourse 由 StackExchange 创始人 Jeff Atwood 创建,是一款开源的互联网论坛(又名在线留言板)和邮件列表管理软件,旨在革新论坛讨论方式。它使用 Ember.js 和 Ruby on Rails 编写,并使用 PostgreSQL 作为后端数据库管理系统。
Discourse 的特性
- 无限滚动。帖子中没有下一页。只需向下滚动即可阅读更多内容。
- 实时更新,拖放附件。
- 论坛帖子可以按受欢迎程度排名。
- “最佳帖子”视图可以显示特定帖子的最佳回复。
- 能够记住您在帖子中的阅读位置。
- 展开 URL 以提供 URL 的摘要。
- 用户可以通过电子邮件回复。
- 标记系统会自动隐藏不适当的帖子,直到工作人员可以审查它们。
- 版主可以拆分、合并、本地化或存档任何主题。
- 根据信任级别,用户可以被提升为版主,或被降级为巨魔、不良行为者或垃圾邮件发送者,以保持论坛文明。内置 Akismet 垃圾邮件保护和启发式方法,包括新用户沙箱、用户标记阻止和标准 nofollow。
- 徽章系统可以显示用户取得的成就。
- 移动友好、响应式网页设计。用户可以通过笔记本电脑、平板电脑和手机阅读或发帖。
- 100% 免费开源。没有具有更好或更完整功能的付费商业版本。
- 单点登录。将 Discourse 与您现有站点的登录系统无缝集成。
- 社交登录。轻松添加常见的社交登录方式,如 Google、Facebook、Twitter 等。
- 提供 iOS 和 Android 应用程序。
- 提供 30 多种语言版本。
- 双因素身份验证以提高帐户安全性。
- 还有更多。
为什么要在没有 Docker 的情况下在 Ubuntu 20.04/18.04 上安装 Discourse
安装 Discourse 的官方方法是使用 Docker,这对于那些想要快速启动和运行应用程序的人来说非常棒。但是 Docker 也非常消耗资源。试想一下:如果您已经启动并运行了一些组件(如 PostgreSQL 数据库服务器),Docker 方法仍然会在容器内运行一个单独的 PostgreSQL 数据库,这会浪费服务器资源。您需要一个 2GB RAM 的服务器才能使用 Docker 运行 Discourse。我将向您展示如何在没有 Docker 的情况下在 1GB RAM 的服务器上运行 Discourse。
先决条件
要运行 Discourse,您需要一台至少具有 1GB RAM 的服务器。如果您正在寻找虚拟专用服务器 (VPS),我推荐 Kamatera VPS,它具有以下特点:
- 30 天免费试用。
- 起价为每月 4 美元(1GB RAM)
- 高性能基于 KVM 的 VPS
- 在全球拥有 9 个数据中心,包括美国、加拿大、英国、德国、荷兰、香港和以色列。
请按照下面链接的教程在 Kamatera 上创建您的 Linux VPS 服务器。
一旦您拥有运行 Ubuntu 20.04/18.04 的 VPS,请按照以下说明进行操作。
您还需要一个域名。我在 NameCheap 注册了我的域名,因为价格低廉,并且他们终身免费提供 whois 隐私保护。
注意:我在 Ubuntu 20.04/18.04 上使用 sudo 用户安装了 Discourse。为了获得最佳效果,您也应该使用 sudo 用户(而不是 root 用户)按照本教程进行操作。
要添加 sudo 用户,只需运行
sudo adduser 用户名
sudo adduser 用户名 sudo
然后切换到新用户。
su - 用户名
步骤 1:配置 PostgreSQL 数据库服务器
通过 SSH 登录到您的服务器,然后运行以下命令从默认的 Ubuntu 软件存储库安装 PostgreSQL。
sudo apt install postgresql
PostgreSQL 数据库服务器将自动启动并监听 127.0.0.1:5432
,可以通过以下命令查看。(如果您的 Ubuntu 服务器没有 netstat
命令,您可以运行 sudo apt install net-tools
命令来安装它。)
sudo netstat -lnpt | grep postgres
如果您没有看到上述命令的任何输出,则可能是因为 PostgreSQL 服务器未运行。您可以通过发出以下命令来启动 PostgreSQL 服务器。
sudo systemctl start postgresql
在安装过程中,将在操作系统上创建 postgres
用户。它是 PostgreSQL 数据库服务器的超级用户。默认情况下,此用户没有密码,并且无需设置密码,因为您可以使用 sudo
切换到 postgres
用户并登录到 PostgreSQL 控制台。
sudo -u postgres psql
为 Discourse 创建一个数据库。
CREATE DATABASE discourse;
创建一个数据库用户。
CREATE USER discourse_user;
为此用户设置密码。
ALTER USER discourse_user WITH ENCRYPTED PASSWORD '您的首选密码';
将此用户设置为 discourse 数据库的所有者。
ALTER DATABASE discourse OWNER TO discourse_user;
连接到 discourse 数据库。
\c discourse;
创建 hstore
和 pg_trgm
扩展。
CREATE EXTENSION hstore;
CREATE EXTENSION pg_trgm;
从 PostgreSQL 控制台注销。
\q
步骤 2:在 Ubuntu 20.04/18.04 上安装 Ruby
Discourse 需要 Ruby 2.7 或更高版本。但是,Ubuntu 20.04/18.04 存储库附带 Ruby 2.5.1。Ruby 的最新版本是 3.0.1。但是,我不建议使用最新版本,因为它可能与 Discourse 不兼容。为了获得最佳兼容性,我建议从 PPA 安装 Ruby 2.7。
sudo apt install software-properties-common
sudo apt-add-repository ppa:brightbox/ruby-ng
sudo apt install ruby2.7
要检查您的 Ruby 版本号,请运行
ruby -v
输出:
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-linux-gnu]
步骤 3:下载并配置 Discourse
安装 git 工具。
sudo apt install git
假设您位于主目录中,请运行以下命令从 Github 克隆 Discourse 代码存储库。
git clone https://github.com/discourse/discourse.git
创建 /var/www/
目录(如果尚未创建)。
sudo mkdir /var/www/
将 discourse 目录移动到 /var/www/
。
sudo mv discourse/ /var/www/
更改目录并使用 Discourse 的最新稳定版本。您可以转到 Github 发布页面 查看最新稳定版本。我现在使用的是 v2.5.0。
cd /var/www/discourse/
git checkout v2.5.0
安装 bundler:Ruby 依赖项管理器。
sudo /usr/bin/gem install bundler
安装以下软件包以编译源代码。
sudo apt-get install gcc build-essential ruby2.7-dev libxslt-dev libxml2-dev zlib1g-dev libpq-dev imagemagick
然后安装 Discourse 的依赖项。此过程可能会占用大量 RAM。
RAILS_ENV=production /usr/local/bin/bundle config set path '/var/www/discourse/vendor/bundle/'
RAILS_ENV=production /usr/local/bin/bundle install
将默认配置文件复制到新文件。
cp config/discourse_defaults.conf config/discourse.conf
编辑新文件。
nano config/discourse.conf
配置数据库连接。
# db 服务器的主机地址
# 此项设置为空,因此它会首先尝试使用套接字
db_host = localhost
# 运行 db 服务器的端口,无需设置
db_port = 5432
# 运行 discourse 的数据库名称
db_name = discourse
# 访问数据库的用户名
db_username = discourse_user
# 用于访问数据库的密码
db_password = 您的密码
更改与您的 Discourse 论坛一起使用的域名。
# 运行论坛的主机名
hostname = "community.example.com"
保存并关闭文件。
步骤 4:获取免费的 MaxMind 许可证密钥
Discourse 附带一个内置的 Web 分析工具。如果您想知道访问者的地理信息,则需要一个 MaxMind 许可证密钥。
在 MaxMind 创建一个帐户。Maxmind 将向您发送一封电子邮件。单击电子邮件中的链接以设置密码,然后登录到您的 MaxMind 帐户。接下来,选择左侧栏上的“我的许可证密钥”。
单击“生成新许可证密钥”按钮。
为您的许可证密钥命名。然后选择“否”,因为我们不需要使用 geoipupdate
程序。然后单击“确认”按钮。
创建许可证密钥后,复制许可证密钥。打开 Discourse 配置文件。
nano config/discourse.conf
找到以下行并将您的许可证密钥添加到此处。
maxmind_license_key=
保存并关闭文件。
步骤 5:启动 Discourse
安装所需的软件包。
sudo apt install redis-server optipng pngquant jhead jpegoptim gifsicle nodejs npm
sudo npm install -g svgo
编辑生产环境配置文件。
nano /var/www/discourse/config/environments/production.rb
将以下代码添加为第五行。
require 'uglifier'
然后找到以下行。
config.assets.js_compressor = :uglifier
将其替换为:
config.assets.js_compressor = Uglifier.new(:harmony => true)
保存并关闭文件。然后运行以下命令来初始化数据库。如果您在此步骤中看到任何错误,只需再次运行该命令即可。
RAILS_ENV=production /usr/local/bin/bundle exec rake db:migrate
接下来,我们将编译静态资源(如 JavaScript),但在执行此操作之前,我们需要编辑一个文件。
nano /var/www/discourse/lib/tasks/assets.rake
我们需要找到包含 brotli
的行并将其注释掉以禁用 Brotili 压缩,因为 JavaScript 文件将使用 Gzip 压缩。如果同时启用 Gzip 和 Brotili 压缩,则在编译资源时会出现一些烦人的错误。找到以下行(第 281 行)并将其注释掉。
brotli(path, max_compress)
保存并关闭文件。接下来,运行以下命令来编译资源。此过程可能会占用大量 RAM,例如 1GB。
RAILS_ENV=production /usr/local/bin/bundle exec rake assets:precompile
如果您遇到“要使用 ES6 语法,必须启用 harmony 模式”错误,则只需再次运行相同的命令即可继续。
编译 JavaScript 和 CSS 文件后,您可以继续执行下一个命令。
接下来,编辑 puma.rb 文件
nano /var/www/discourse/config/puma.rb
找到以下行。
APP_ROOT = '/home/discourse/discourse'
将应用程序路径更改为
APP_ROOT = '/var/www/discourse'
保存并关闭文件。然后创建套接字和进程 ID 目录。
mkdir /var/www/discourse/tmp/sockets/ /var/www/discourse/tmp/pids/
启动 Discourse。
RAILS_ENV=production bundle exec puma -C /var/www/discourse/config/puma.rb
示例输出:
[24161] Puma starting in cluster mode...
[24161] * Version 4.3.1 (ruby 2.7.1-p146), codename: Mysterious Traveller
[24161] * Min threads: 8, max threads: 32
[24161] * Environment: development
[24161] * Process workers: 4
[24161] * Preloading application
[24161] * Listening on unix:///var/www/discourse/tmp/sockets/puma.sock
[24161] ! WARNING: Detected 4 Thread(s) started in app boot:
[24161] ! #<Thread:0x000055c7d2b72d08@/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/concurrent-ruby-1.1.6/lib/concurrent-ruby/concurrent/atomic/ruby_thread_local_var.rb:38 sleep_forever> - /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/concurrent-ruby-1.1.6/lib/concurrent-ruby/concurrent/atomic/ruby_thread_local_var.rb:40:in `pop'
[24161] ! #<Thread:0x000055c7d543cfb8@/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.3/lib/message_bus.rb:667 sleep> - /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/redis-4.1.3/lib/redis/connection/ruby.rb:68:in `select'
[24161] ! #<Thread:0x000055c7d543cd88@/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.3/lib/message_bus/timer_thread.rb:38 sleep> - /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/message_bus-2.2.3/lib/message_bus/timer_thread.rb:123:in `sleep'
[24161] ! #<Thread:0x000055c7d5f04680@lib/discourse.rb:708 sleep> - lib/discourse.rb:711:in `sleep'
[24161] * Daemonizing...
Discourse 正在监听 Unix 套接字:/var/www/discourse/tmp/sockets/puma.sock。
步骤 6:配置 Nginx 反向代理
从 Ubuntu 20.04/18.04 默认软件仓库安装 Nginx Web 服务器。
sudo apt install nginx
复制 Nginx 虚拟主机配置文件示例。
sudo cp /var/www/discourse/config/nginx.sample.conf /etc/nginx/conf.d/discourse.conf
编辑新文件。
sudo nano /etc/nginx/conf.d/discourse.conf
找到以下行并注释掉,因为我们将使用 Puma。
upstream discourse { server unix:/var/www/discourse/tmp/sockets/nginx.http.sock; server unix:/var/www/discourse/tmp/sockets/nginx.https.sock; }
找到以下行并取消注释。
# upstream discourse { # server unix:/var/www/discourse/tmp/sockets/puma.sock; # }
找到以下行。
server_name enter.your.web.hostname.here;
更改服务器名称。不要忘记为域名添加 DNS A 记录。
server_name community.example.com;
Nginx 默认不支持 Brotli 压缩,因此请注释掉以下行。
brotli_static on;
保存并关闭文件。创建缓存目录。
sudo mkdir -p /var/nginx/cache/
然后测试 Nginx 配置。
sudo nginx -t
如果测试成功,则重新加载 Nginx 以使更改生效。
sudo systemctl reload nginx
现在您应该可以在 http://community.example.com
看到 Discourse 论坛。
第 7 步:启用 HTTPS
为了加密 HTTP 流量,我们可以通过安装 Let’s Encrypt 颁发的免费 TLS 证书来启用 HTTPS。运行以下命令在 Ubuntu 20.04/18.04 服务器上安装 Let’s Encrypt 客户端 (certbot)。
sudo apt install certbot python3-certbot-nginx
接下来,运行以下命令获取并安装 TLS 证书。
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email [email protected] -d community.example.com
其中:
--nginx
: 使用 nginx 插件。--agree-tos
: 同意服务条款。--redirect
: 通过 301 重定向强制使用 HTTPS。--hsts
: 将 Strict-Transport-Security 标头添加到每个 HTTP 响应。强制浏览器始终对该域使用 TLS。防御 SSL/TLS 剥离攻击。--staple-ocsp
: 启用 OCSP Stapling。有效的 OCSP 响应会附加到服务器在 TLS 期间提供的证书上。
现在应该已获取并自动安装证书。
您可以通过 HTTPS (https://community.example.com
) 访问 Discourse 论坛。
如果 Firefox 在浏览器地址栏中显示黄色三角形,那是因为某些图像仍然通过 HTTP 协议提供。要解决此问题,您可以编辑 Discourse Nginx 配置文件。
sudo nano /etc/nginx/conf.d/discourse.conf
在 SSL 服务器块中添加以下行以升级不安全请求。
add_header Content-Security-Policy upgrade-insecure-requests;
保存并关闭文件。然后重新加载 Nginx。
sudo nginx -t
sudo systemctl reload nginx
第 8 步:创建管理员帐户
转到 discourse 目录 (/var/www/discourse/) 并运行以下命令以创建管理员帐户。
RAILS_ENV=production /usr/local/bin/bundle exec rake admin:create
系统将要求您输入管理员帐户的电子邮件地址和密码。
之后,重新启动 Discourse。
RAILS_ENV=production /usr/local/bin/bundle exec pumactl -P /var/www/discourse/tmp/pids/puma.pid restart
现在刷新 Discourse 网页,您将能够登录。
如果您看到 502 Bad Gateway 错误,则表示重新启动命令未成功,您需要使用以下命令启动 Discourse:
RAILS_ENV=production bundle exec puma -C /var/www/discourse/config/puma.rb
登录后,您可以启动设置向导 (https://community.example.com/wizard) 并按照说明完成安装。如果您使用 Cloudflare CDN,则需要转到 settings → security → content security policy src 并添加此 URL:https://community.example.com/cdn-cgi/
第 9 步:配置后台处理服务:Sidekiq
Sidekiq 是一个开源作业调度器。许多任务(如发送电子邮件)由 sidekiq 异步执行。编辑 sidekiq.yml
文件。
nano /var/www/discourse/config/sidekiq.yml
将以下行添加到文件末尾。此配置适用于用户活动和 RAM 较低的 Discourse 论坛。如果用户活动很多,请考虑将并发性和队列数量加倍。
production:
:concurrency: 2
:queues:
- [critical, 4]
- [default, 2]
- [low]
- [ultra_low]
保存并关闭文件。然后为 sidekiq 创建一个 Systemd 服务。
sudo nano /etc/systemd/system/discourse-sidekiq.service
在文件中添加以下行。将 username 替换为您的真实用户名。
[Unit]
Description=Discourse sidekiq background processing service
After=multi-user.target
[Service]
Type=simple
User=username
PIDFile=/var/www/discourse/tmp/pids/sidekiq.pid
WorkingDirectory=/var/www/discourse
Environment=RAILS_ENV=production
ExecStart=/usr/local/bin/bundle exec sidekiq -C /var/www/discourse/config/sidekiq.yml
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
保存并关闭文件。然后启动并启用此服务。
sudo systemctl start discourse-sidekiq
sudo systemctl enable discourse-sidekiq
检查状态。确保它正在运行。
sudo systemctl status discourse-sidekiq
Sidekiq 仪表板位于 https://community.example.com/sidekiq
。
第 10 步:为 Discourse 创建 Systemd 服务
首先,使用以下命令停止当前的 Discourse 进程:
cd /var/www/discourse/
RAILS_ENV=production /usr/local/bin/bundle exec pumactl -P /var/www/discourse/tmp/pids/puma.pid stop
然后编辑 puma.rb
文件。
nano /var/www/discourse/config/puma.rb
注释掉以下两行(在每行开头添加 #
符号),因为 Systemd 将处理进程 ID 和守护进程化。
# pidfile "#{APP_ROOT}/tmp/pids/puma.pid"
# daemonize true
接下来,为 Discourse 创建一个 Systemd 服务。
sudo nano /etc/systemd/system/discourse.service
在文件中添加以下行。将 username 替换为您的真实用户名。
[Unit]
Description=Discourse service
[Service]
Type=simple
User=username
PIDFile=/var/www/discourse/tmp/pids/puma.pid
WorkingDirectory=/var/www/discourse
Environment=RAILS_ENV=production
ExecStart=/usr/local/bin/bundle exec puma -C config/puma.rb
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
保存并关闭文件。然后启动并启用此服务。
sudo systemctl start discourse
sudo systemctl enable discourse
检查状态。确保它正在运行。
sudo systemctl status discourse
第 11 步:配置 SMTP
Discourse 需要发送电子邮件,以便访问者可以在您的论坛上注册帐户并接收通知。要编辑 SMTP 设置,请打开 discourse.conf
文件。
nano /var/www/discourse/config/discourse.conf
您可以找到以下行来配置 SMTP 服务器。通常,您希望使用 587 作为 SMTP 端口。
# address of smtp server used to send emails
smtp_address =
# port of smtp server used to send emails
smtp_port = 25
# domain passed to smtp server
smtp_domain =
# username for smtp server
smtp_user_name =
# password for smtp server
smtp_password =
# smtp authentication mechanism
smtp_authentication = plain
# enable TLS encryption for smtp connections
smtp_enable_start_tls = true
您可能还想在此文件中添加 From: 地址,如下所示。
# From: address
notification_email = [email protected]
有关如何设置自己的邮件服务器的信息,请查看以下教程。请注意,我强烈建议在全新的干净操作系统上运行 iRedMail 邮件服务器。在具有其他 Web 应用程序的操作系统上安装 iRedMail 可能会失败,并可能破坏现有应用程序。
如果您更喜欢使用第三方 SMTP 中继服务,那么我推荐 Sendinblue,它允许您每月免费发送 9000 封电子邮件。
保存 SMTP 设置后,重新启动 Discourse 服务。
sudo systemctl restart discourse discourse-sidekiq
然后,您可以在 Discourse 管理仪表板中测试电子邮件发送。
您可以转到 mail-tester.com,它将为您提供一个唯一的电子邮件地址。从您的 Discourse 向此电子邮件地址发送测试电子邮件,以了解您的发件人评分。
无法发送电子邮件
如果您的 Discourse 实例无法发送电子邮件,并且您在 Discourse 网页上看到以下消息:
所有外发电子邮件已被管理员全局禁用。不会发送任何类型的电子邮件通知。
您需要转到 Settings → Email(不是 Emails),将 disable emails 设置为 no。保存设置并重新启动 Discourse。
sudo systemctl restart discourse discourse-sidekiq
如果您的 Discourse 仍然无法发送电子邮件,请检查它是否可以 ping 通邮件服务器。此外,请转到 https://community.example.com/sidekiq/retries
,它将显示失败的电子邮件以及电子邮件发送失败的原因。
有时,discourse-sidekiq.service
可能会失败并导致电子邮件无法发送,因此您可能需要检查此服务是否正在运行。
sudo systemctl status discourse-sidekiq
优化 RAM 使用
默认的 puma 配置使 Discourse 使用大量 RAM。默认情况下,我的 Discourse 使用 4 个工作进程、8 个最小线程和 32 个最大线程。如果您的 RAM 不够,redis 服务器将被停止。要减少 RAM 使用量,您可以在 puma.rb
文件中减少工作进程和线程的数量。
nano /var/www/discourse/config/puma.rb
找到以下两行。
workers "#{num_workers}"
threads 8, 32
您可以更改如下值,这会告诉 puma 使用 2 个工作进程、4 个最小线程和 16 个最大线程。此设置适用于只有 1GB RAM 的服务器。
workers 2
threads 4, 16
保存并关闭文件。然后重新启动 Discourse 服务。
sudo systemctl restart discourse
升级 Discourse
您可以订阅 Discourse 版本发布的 RSS 源 以随时了解最新版本。在升级 Discourse 之前,我强烈建议在 Discourse 管理仪表板中进行手动数据库备份,并将其下载到您的硬盘。
注意:如果您在没有 Docker 的情况下安装了 Discourse,则一键浏览器升级 (404 page not found - yourdomain.com) 将不起作用。您需要按照以下说明进行操作。
要升级 Discourse,请先停止服务。
sudo systemctl stop discourse
转到 Discourse 安装目录。
cd /var/www/discourse/
从 Github 存储库获取新标签。
git fetch --tags
在检出最新的稳定版本之前,我建议将配置文件备份到您的主目录。
首先,复制以下文件:
```bash
cp config/puma.rb ~
cp config/environments/production.rb ~
cp config/sidekiq.yml ~
cp config/discourse.conf ~
```
然后删除 Gemfile.lock 文件。
rm Gemfile.lock
检出最新的稳定版本,例如:
git checkout v2.3.4
若出现以下错误提示:
请提交您的更改或在切换分支前暂存它们。中止
则运行以下命令:
git stash
然后再次运行 git checkout 命令。
为新的 Discourse 版本安装依赖项。此过程可能占用大量内存。
RAILS_ENV=production /usr/local/bin/bundle install --path vendor/bundle/
编辑 assets.rake 文件。
nano /var/www/discourse/lib/tasks/assets.rake
找到以下行(第 273 行)并注释掉它。
brotli(path, max_compress)
保存并关闭文件。接下来,运行以下命令以准备生产环境。
RAILS_ENV=production bundle exec rake db:migrate RAILS_ENV=production bundle exec rake assets:precompile
然后,您可以检查新的 `puma.rb` 配置文件是否相比原始文件添加了新行。如果没有新内容,则可以直接用原始文件替换该文件。
mv ~/puma.rb /var/www/discourse/config/puma.rb mv ~/production.rb /var/www/discourse/config/environments/production.rb mv ~/sidekiq.yml /var/www/discourse/config/sidekiq.yml mv ~/discourse.conf /var/www/discourse/config/discourse.conf
最后,启动 Discourse。
sudo systemctl start discourse
现在,您可以从管理仪表板检查 Discourse 版本。

## Discourse 主题定制
如果您不喜欢默认的白色主题,可以通过 **管理仪表板** -> **定制** -> **主题** 进行自定义。默认安装了 3 个主题。
* 蓝色调
* 深色
* 浅色
我选择了蓝色调主题。您还可以通过单击 **编辑 CSS/HTML** 按钮添加自定义 CSS。以下是我为 Discourse 添加的 CSS。
html { background-color:#ececec; } #main-outlet { background-color: #fff; padding-left: 20px; } .d-header { background-color:rgb(45, 45, 45); } a:visited { color: blueviolet; } a { color: blueviolet; }
重启 Discourse 服务以使更改生效。
sudo systemctl restart discourse discourse-sidekiq
## 将 WordPress 与 Discourse 集成
如果您运行一个 [WordPress](https://www.linuxbabe.com/ubuntu/install-wordpress-ubuntu-22-04-nginx-mariadb-php8-1-lemp) 站点,您可以在 WordPress 站点上安装 WP Discourse 插件并将其与 Discourse 集成。它允许:
* 将帖子发布到 Discourse
* 使用 Discourse 进行 WordPress 评论
* 使用 WordPress 登录 Discourse (DiscourseConnect)
有关如何集成这两个软件的说明,请访问以下页面。
* [WP Discourse 插件安装和设置](https://meta.discourse.org/t/wp-discourse-plugin-installation-and-setup/50752)
## 如何将 Discourse 迁移到新服务器
首先,备份您的原始 Discourse 论坛,并下载 tar.gz 文件。(不要更改文件名。)

然后,您需要在新服务器上按照步骤 1 到步骤 11 安装 Discourse。接下来,将备份文件上传到新服务器上的 `/var/www/discourse/public/backups/default/` 目录。
转到新服务器上的 /var/www/discourse/ 目录。
cd /var/www/discourse/
安装依赖项。
sudo gem install thor
转到 Discourse **管理仪表板** -> **设置** -> **备份**,勾选 **允许恢复**。

接下来,运行以下命令以从备份恢复站点。
RAILS_ENV=production script/discourse restore file-name-of-the-backup-file.tar.gz
恢复完成后,重启 Discourse。
sudo systemctl restart discourse discourse-sidekiq
刷新 Discourse 网页,您将看到您的原始 Discourse 论坛重新上线。
如果看到以下错误:
此锁定文件必须使用 Bundler 2 或更高版本。
则需要更新 bundler。
gem install bundler
更新 gemfile.lock
RAILS_ENV=production bundle update --bundler
您也可以删除 Gemfile.lock 文件,这样就不会看到此错误。
## 如何卸载 Discourse
删除 PostgreSQL 数据库服务器。
sudo apt remove postgresql
删除 webroot 目录。
sudo rm /var/www/discourse/ -rf
删除 Nginx 配置文件。
sudo rm /etc/nginx/conf.d/discourse.conf
删除 Let’s Encrypt SSL 证书。
sudo certbot revoke --cert-name community.example.com
删除 SystemD 服务。
sudo rm /etc/systemd/system/discourse.service sudo rm /etc/systemd/system/discourse-sidekiq.service
## 监控 Discourse 实例的健康状况
您应该密切关注 Discourse 错误日志,您可以通过 **管理仪表板** -> **日志** -> **错误日志** 找到它。如果您的服务器流量很大,您可能需要更多内存来运行 Discourse。以下日志显示我的服务器内存不足。

## 如何处理 Discourse 中的难缠用户
如果您的 Discourse 论坛上有某个用户让您感到困扰,您可以将该用户的信任级别锁定为 `0: 新用户`,然后转到 Discourse `管理` -> `设置` -> `发帖`,并要求 `0: 新用户` 创建的帖子/主题在发布前获得批准。

## 结论
我希望本文能帮助您在不使用 Docker 的情况下在 Ubuntu 20.04/18.04 上安装 Discourse 论坛软件。一如既往,如果您觉得这篇文章有用,请[订阅我们的免费新闻通讯](https://newsletter.linuxbabe.com/subscription/wkeY5d6pg)以获取更多技巧和窍门。保重 🙂
```