送给宁愿违背我们的服务条款的人
自总结版Discourse安装教程
准备工作
安装Discourse前,你需要准备以下东西:
-
一台至少4GB RAM的服务器。我们以Debian作为示例,Discourse在所有论坛软件中比较庞大,低于这个值,你可能无法正常安装。
-
一个域名(可选)没有域名的话,别人将只能通过IP地址访问你的论坛.
-
一个SMTP发件服务。它可以是收费的,也可以是免费的(比如Sendinblue),甚至可以是自建的。
最简单的开始安装教程
登录你的服务器,执行以下操作(如果失败,使用root身份)
$ sudo apt install docker.io
$ git clone https://github.com/discourse/discourse_docker ~
$ cd ~/discourse_docker
$ ./discourse_setup
或者,你也可以自己配置app.yml
$ sudo apt install docker.io
$ git clone https://github.com/discourse/discourse_docker ~
$ cd ~/discourse_docker
$ cp samples/standalone.yml containers/app.yml
$ vim containers/app.yml
然后一行行看,配置好app.yml
之后执行:
$ ./launcher bootstrap app
如果第一次安装时出错,尝试:
- 直接删库重建
sudo rm -rf /var/discourse
./launcher bootstrap app
- 在app.yml中把版本从test-passed改成beta或者stable,然后再删库重建
详细说明
安装Docker
Discourse唯一的推荐安装方法是通过Docker。因此,我们首先安装docker:
sudo apt install docker.io
把discourse docker库克隆到本地
Discourse docker库包含了discourse开发的一键式安装脚本launcher
。所以我们先用
git clone https://github.com/discourse/discourse_docker ~
把discourse docker库克隆到你的用户目录(事实上哪里都没啥关系)
然后
cd ~/discourse_docker
进入你克隆下来的目录。
目录下有好几个脚本,简单解释一下几个关键的东西:
containers/
目录: 存放你的Discourse容器配置文件。samples
目录: 存放Discourse为你提供的配置文件模板。launcher
文件: 一个脚本,用来根据你containers
目录下的配置文件构建和维护Docker容器。
app.yml (从standalone.yml模板复制而来)详细解释
(也就是翻译了一下各个注释)
## 这是一键式的, standalone Discourse Docker container 模板
##
## 修改此文件后,你需要执行 launcher rebuild app
## 例如 /var/discourse/launcher rebuild app
##
## 编辑的时候请非常小心
## 空格必须遵守 YAML 规范
## 参考 http://www.yamllint.com/ to validate this file as needed
templates:
- "templates/postgres.template.yml"
- "templates/redis.template.yml"
- "templates/web.template.yml"
## 如果需要IPv6支持,把下面这行取消注释掉
#- "templates/web.ipv6.template.yml"
- "templates/web.ratelimited.template.yml"
## 如果你希望添加 Lets Encrypt 支持(免费https),把下面两行取消注释
#- "templates/web.ssl.template.yml"
#- "templates/web.letsencrypt.ssl.template.yml"
## Discourse使用的 TCP/IP 端口
## 前面是主机端口,后面是docker container里面的端口
## 如果你想让Discourse使用非默认端口,详见
## 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"
## 你的Discourse使用哪个版本? (默认: tests-passed)(你一般还可以选beta和stable)
#version: tests-passed
env:
LC_ALL: en_US.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'
## Uncomment if you want the container to be started with the same
## hostname (-h option) as specified above (default "$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
#DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: [email protected]
DISCOURSE_SMTP_PASSWORD: pa$$word
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (可选,默认 true)
#DISCOURSE_SMTP_DOMAIN: discourse.example.com # (有的提供商要求)
#DISCOURSE_NOTIFICATION_EMAIL: [email protected] # (发件人默认地址)
## 如果你启用了 Lets Encrypt,取消注释下面这行,获取免费SSL证书
#LETSENCRYPT_ACCOUNT_EMAIL: [email protected]
## 此Discourse实例的CDN
## see https://meta.discourse.org/t/14857 for details
#DISCOURSE_CDN_URL: https://discourse-cdn.example.com
## The maxmind geolocation IP address key for IP address lookup
## see https://meta.discourse.org/t/-/137387/23 for details
#DISCOURSE_MAXMIND_LICENSE_KEY: 1234567890123456
## The Docker container is stateless; all data is stored in /shared
volumes:
- volume:
host: /var/discourse/shared/standalone
guest: /shared
- volume:
host: /var/discourse/shared/standalone/log/var-log
guest: /var/log
## 插件在这里加入
## see https://meta.discourse.org/t/19157 for details
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/docker_manager.git
## 在这里加入自定义命令
run:
- exec: echo "Beginning of custom commands"
## If you want to set the 'From' email address for your first registration, uncomment and change:
## After getting the first signup email, re-comment the line. It only needs to run once.
#- exec: rails r "SiteSetting.notification_email='[email protected]'"
- exec: echo "End of custom commands"
常见错误解决
gnu_handshake() timeout
请开梯子。
relation 'user' does not exist
玄学错误,请删库跑路重建。(把你的 /var/discourse 目录删掉,然后再rebuild)
如果解决不了,试一下把分支改到stable.
附带对Discourse官方文档的翻译:
Discourse 官方安装教程
在 30 分钟内在云中搭建 Discourse,哪怕您对 Rails 或 Linux shell 零了解。本例子使用的是 DigitalOcean,但这些步骤适用于任何与 Docker 兼容的云提供商或本地服务器。这 演练将详细介绍这些内容:
没有 30 分钟的时间来设置?只需支付 150 美元的一次性固定费用,社区就可以为您在云中安装 Discourse。单击此处购买自助社区安装。
你也可以选择给锦心打钱,我只收你75美元,半价哦
开始之前
1. 准备域名
话语无法很好的在IP地址工作[1],您必须拥有域名才能继续。域名指的是类似
example.com
的东西。
- 已经拥有域名?好耶!为您的话语实例选择一个子域名,例如
discourse.example.com
或者forum.example.com
。 - 没有域名?买一个!我们可以推荐NameCheap,或者还有许多其他很棒的域名注册商可供选择。
- 您的 DNS 设置面板应该可以从您购买域名的位置访问。一旦您知道要安装Discourse的云服务器的IP地址,您将在此处为主机名创建DNS
A记录
,并为电子邮件输入SPF和DKIM记录。
2. 设置电子邮件
电子邮件对于 Discourse 中的帐户创建和通知至关重要。 如果您在引导前未正确配置电子邮件,您将拥有一个损坏的网站!
这里的电子邮件是指交易电子邮件,而不是通常的电子邮件服务,如Gmail,Outlook和/或Yahoo。
- 没有现有的邮件服务器?查看我们推荐的话语电子邮件提供商。
- 已有邮件服务器?伟大。使用现有的邮件服务器凭据。(Gmail/Outlook/Yahoo等免费电子邮件服务不支持交易性电子邮件。
- 为确保邮件送达,您必须在 DNS 中添加有效的 SPF 和 DKIM 记录。有关详情,请参阅您的邮件提供商说明。
- 如果您在使电子邮件正常工作时遇到问题,请按照我们的电子邮件问题排查指南
安装
3. 创建新的云服务器
创建您的新云服务器,比如在DigitalOcean上:
- 当前支持的 Ubuntu Server LTS 版本 默认值就够了。最低值?一个现代内核版本的 64 位 Linux 操作系统。
- RAM 默认的 1 GB RAM 适用于小型话语社区。我们建议为较大的社区使用 2 GB RAM。[2]
- 地理位置 对于大多数美国和欧洲观众来说,默认的纽约是一个不错的选择。或者选择地理位置更靠近受众群体的区域。
- 输入您的域名(比如
discourse.example.com
)作为 Droplet 名称。
创建 Droplet 。您可能会收到一封包含 root 密码的电子邮件,但是,您应该设置 SSH 密钥,因为它们更安全。
现在您已经创建了云服务器!返回到 DNS 控件并使用 IP 地址为您的主机名
discourse.example.com
设置A record
。
4. 访问您的云服务器
使用SSH或Windows上的Putty通过其IP地址连接到您的服务器:
ssh [email protected]
使用设置服务器时 DigitalOcean 发送给您的电子邮件中的 root 密码,或者在本地计算机上配置有效的 SSH 密钥。
5. 安装话语
将官方话语 Docker 映像克隆到 ./var/discourse
sudo -s
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse
chmod 700 containers
您需要在其余的设置和引导过程中成为 root 用户。
6. 编辑话语配置
在 启动设置工具
./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 port? [587]:
SMTP user name? [[email protected]]:
SMTP password? [pa$word]:
Let's Encrypt account email? (ENTER to skip) [[email protected]]:
Optional Maxmind License key () [xxxxxxxxxxxxxxxx]:
您将从电子邮件设置中获取SMTP详细信息,请务必完成该部分。
Let’s Encrypt 帐户设置是为了为您的站点提供免费的HTTPS证书,如果您希望您的网站安全,请务必进行设置。
这将代表您生成一个 app.yml
配置文件,然后启动引导程序。引导需要 2-8 分钟来设置您的话语。如果需要在引导后更改这些设置,可以再次运行./discourse-setup
(它将重用文件中以前的值)或使用 vim
然后手动编辑 /containers/app.yml
, 记得 ./launcher rebuild app
否则更改将不会生效。
7. 开始Discourse
引导完成后,您的Discourse应该可以通过您之前输入的域名在您的网络浏览器中访问。discourse.example.com
8. 注册新帐户并成为管理员
使用您在引导前输入的电子邮件地址之一注册新的管理员帐户。
(如果您无法注册管理员帐户,请查看日志并查看我们的电子邮件故障排除清单。/var/discourse/shared/standalone/log/rails/production.log
注册管理员帐户后,设置向导将启动并指导您完成话语的基本配置。
完成设置向导后,应会看到员工主题和先阅读我:管理员快速入门指南。本指南包含有关进一步配置和自定义 Discourse 安装的建议。
9. 安装后维护
- 我们强烈建议您为操作系统启用自动安全更新。在 Ubuntu 中,请使用该命令。在 CentOS/RHEL 中,使用
yum-cron
包。dpkg-reconfigure -plow unattended-upgrades
- 如果您使用的是密码而不是 SSH 密钥,请务必强制使用强根密码。在 Ubuntu 中使用软件包。我们还建议阻止尝试 10 次以上密码重试的任何 IP 地址 3 分钟。
apt install libpam-cracklib
fail2ban
- Ubuntu:
apt install fail2ban
- CentOS/RHEL:
sudo dnf install fail2ban
- Ubuntu:
- 如果你需要或想要一个默认的防火墙,请为 Ubuntu 打开 ufw 或用于 CentOS/RHEL。
firewalld
当新版本的话语发布时,Discourse 会向您发送电子邮件通知。请保持最新状态以获取最新功能和安全修复程序。
要将 Discourse 升级到最新版本,请访问浏览器并单击“升级”按钮。https://discourse.example.com/admin/upgrade
或者,您可以使用 ssh 连接到服务器并使用以下方法进行重建:
cd /var/discourse
git pull
./launcher rebuild app
文件夹中的命令可用于各种维护:launcher
/var/discourse
Usage: launcher COMMAND CONFIG [--skip-prereqs] [--docker-args STRING]
Commands:
start: Start/initialize a container
stop: Stop a running container
restart: Restart a container
destroy: Stop and remove a container
enter: Use nsenter to get a shell into a container
logs: View the Docker logs for a container
bootstrap: Bootstrap a container for the config based on a template
rebuild: Rebuild a container (destroy old, bootstrap, start new)
cleanup: Remove all containers that have stopped for > 24 hours
Options:
--skip-prereqs Don't check launcher prerequisites
--docker-args Extra arguments to pass when running docker
10. (可选)添加更多话语功能
你想要吗。。。
-
用户只能通过您预先存在的网站的注册系统登录?配置Single Sign On登录。
-
用户通过电子邮件发布回复?配置通过电子邮件回复。
-
自动每日备份?配置备份。
-
同一服务器上的多个话语站点?配置多站点。
-
当事件在话语中发生时的网络钩子?配置网络钩子。
-
从vBulletin,PHPbb,Vanilla,Drupal,BBPress等导入/迁移旧内容?请参阅我们的开源导入程序和迁移指南。
-
要将Discourse嵌入到WordPress安装中,还是在静态HTML站点上?