Discourse 云平台安装

本文档是根据 discourse/docs/INSTALL-cloud.md at main · discourse/discourse · GitHub 页面中的内容进行翻译的。

云平台安装

在基于云平台的 Discourse 安装通常不会超过 30 分钟,哪怕你没有任何有关 Rails 或 Linux shell 的知识都能够顺利完成安装。 下面我们是通过 DigitalOcean 服务提供商来进行安装测的,但是所有的安装步骤都能够在 所有兼容 Docker 的云计算平台上进行,同时也可以在本地的服务器上完成安装。

:bell: 如果你连 30 分钟都没有的话?你可以联系 Discourse 社区来帮你完成安装,Discourse 社区将会收取一次性 $150 (美元)的费用。 单击此处链接来对服务进行购买

创建一个新的云服务器

创建一个你的新云服务器,例如:DigitalOcean ,当然你也可以使用其他平台提供的服务器。

  • 默认配置 当前版本的 LTS Ubuntu 操作系统 能够很好的工作。最少,需要一个 64 位的 Linux 操作系统,并且这个操作系统的内核需要更新到最新的版本。
  • 默认配置 1 GB 的内存针对小型的 Discourse 社区通常都能很好的运行。但我们推荐针对大型社区使用 2 GB 的内存。
  • 默认配置 New York 数据中心针对北美和欧洲来说都是不错的地理分区,如果你的 Discourse 用户使用的对象多是其他地理位置的用户,那么你可以选择离你稍近的数据中心。
  • 输入域名 discourse.example.com 来在 DigitalOcean 中创建一个 Droplet(Droplet 是 DigitalOcean 定义的服务器名称)。当然你也可以购买使用你自己的域名,通常 Discourse 的安装需要一个真实的域名,没有办法通过 IP 地址安装,所以我们建议你首先购买域名或者使用你已有域名的二级域名。

创建你的新 Droplet,这个过程就等于你在 DigitalOcean 上创建了一个服务器,也等同你在其他平台上面创建了一个 VPS 或者服务器。 当完成创建后,你将会收到一个电子邮件,这个电子邮件中有你的 Root 用户的密码。 但是我们建议你 设置使用 SSH keys , 来增强你服务器访问的安全性。

访问你的云服务器

通过使用 IP 地址,并使用 SSH 来连接和访问你创建的服务器,或者针对 Windows 平台你可以安装 Putty 后运行下面的命令来进行连接:

ssh [email protected]

如果你没有配置 SSH Key 的话,你可以使用 DigitalOcean 发给你的电子邮件中包含的密码来进行登录, 或者使用你本地的 SSH Key 来进行连接。

安装 Docker / Git (可选的)

如果你希望使用你自己的 Docker 版本,你可以现在在你新设置的服务器上进行安装。 如果你的服务器上没有默认安装 Docker,那么 discourse-setup 将会自动为你从 get.docker.com 下载后进行安装。

安装 Discourse

官方 Discourse Docker 镜像 仓库中克隆代码到本地计算机的 /var/discourse 目录。

sudo -s
git clone https://github.com/discourse/discourse_docker.git /var/discourse
cd /var/discourse

你只需要执行上面的命令即可,在 Discourse 安装的过程中需要 root 权限。

电子邮件

:warning: 电子邮件系统在 Discourse 的用户创建过程中非常重要。 如果你没有在安装 Discourse 之前创建电子邮件 SMTP 服务器,那么你安装的 Discourse 无法访问也无法登录(HAVE A BROKEN SITE)!

  • 如果你已经有你自己的 SMTP 邮件服务器了,那么你就可以直接使用你已有的邮件服务器配置信息。
  • 还有没有邮件服务器?请访问 Discourse 推荐使用的邮件服务器.
  • 为了确保你的邮件能够被正常投递,你必须在你的 DNS 中添加有效的 SPF 和 DKIM 记录 。请访问你邮件服务提供商的文档如何设置这些信息。

根据我们实际使用的情况,Discourse 的安装必须配置可用的域名和邮件服务器,针对中国境内的情况,你可以使用阿里云或者腾讯云提供的企业邮箱。 通常我们建议你使用境外的邮件服务器,比如说 AWS 的 SES,或者 MailGun 都是不错的服务,你可能需要一张国际信用卡完成校验。 但这一步是必须的,否则你的的 Discourse 无法完成安装。

域名

:bell: Discourse 不能通过 IP 地址来工作,你必须拥有一个域名或者二级域名来进行安装,例如 example.com

  • 如果你已经拥有一个域名了,那么可以选择任何一个二级域名来进行安装,例如 discourse.example.comtalk.example.comforum.example.com 来安装你的 Discourse 实例。
  • 还没有域名的话,你可以访问 NameCheap 网站来搜索你喜欢的域名,或者直接 Google 搜索 great domain name registrars 来选择你喜欢的域名注册商。
  • 你的 DNS 控制台应该是能够访问的,在你购买域名后,你还需要访问你的 DNS 配置来配置 DNS。针对你安装的 Discourse 网站,你需要通过你的 DNS 创建一个 A 记录 ,这个 A 记录需要将你要安装的域名指向到一个特定的 IP 地址。这个 IP 地址通常为你在第一步购买的服务器 IP 地址。

编辑 Discourse 配置

通过下面的命令运行配置工具

./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]]: 

上面的输入数据将会为你的 Discourse 实例创建一个 app.yml 文件,这个文件将会在安装进行后对你的 Discourse 实例进行配置。 整个安装启动过程可能需要耗费 2-8 分钟 来为你的配置 Discourse。 如果在安装完成后你还需要对你的配置进行修改,你可以再次运行 ./discourse-setup 命令(这个命令将会把已经存在的 app.yml 文件重新载入)。 或者你也可以手动直接编辑 /containers/app.yml 文件中的内容,然后再次运行 ./launcher rebuild app,否则你的修改是不会生效的。

启动 Discourse

一旦初始化安装配置完成后,你的 Discourse 示例应该可以通过你配置的域名 discourse.example.com 在浏览器上进行访问。

注册一个新的管理员账号

使用你再启动配置过程中输入的电子邮件地址来注册一个管理员账号。

(如果你不能注册你的管理账号(Admin),请通过路径/var/discourse/shared/standalone/log/rails/production.log 检查日志,或者访问 电子邮件问题检查列表 。)

当你完成管理员账号的注册后,设置向导将会启动并指引你配置你的 Discourse 实例。

当完成所有的设置向导,你将会看到职员主题(Staff topics)和 READ ME FIRST: Admin Quick Start Guide 。 这个配置向导将会包含有针对后续配置的的一些建议和如何对你的 Discourse 安装实例进行自定义配置。

安装后的维护

  • 我们强烈建议打开你针对你操作系统的安全自动更新。在 Ubuntu 使用 dpkg-reconfigure -plow unattended-upgrades 命令。在 CentOS/RHEL,使用 yum-cron 包。
  • 如果你使用的是密码登录你的操作系统,而不是使用 SSH Key 的话,请确保你使用强密码。在 Ubuntu 使用 apt-get install libpam-cracklib 包。我们推荐使用 fail2ban ,这个将会对 3 次登录失败的 IP 地址禁止登录 10 分钟。
    • Ubuntu: apt-get install fail2ban
    • CentOS/RHEL: sudo yum install fail2ban (需要 EPEL)
  • 如果你希望默认安装防火墙, 针对 Ubuntu 打开 ufw 或者针对 CentOS/RHEL 7 及其后续版本使用 firewalld

当 Discourse 有新版本更新的时候,你的邮件地址将会收到更新提示。 请随时更新你的 Discourse 实例到最新版本以确保所有的安全问题被修复。 You will get email reminders as new versions of Discourse are released. Please stay current to get the latest features and security fixes. 要 更新 Discourse 到最新的版本,请通过你的浏览器访问 /admin/upgrade 然后单击更新按钮。

/var/discourse 目录中的 launcher 命令被用来使用一些系统级别的维护:

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 (使用 nsenter 来访问容器内的 Shell)
    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(针对停止运行超过 24 个小时的容器进行删除)

Options:
    --skip-prereqs             Don't check launcher prerequisites (不运行安装器的环境校验)
    --docker-args              Extra arguments to pass when running docker (传递给容器内的额外参数)
1 Like

请问如何在国内的云平台,比如阿里、腾讯云进行安装?总是报错 Git 连接超时

现在用国外的 VPS 进行部署,但总感觉不放心

如果 Git 出错了,那有可能是你的国内主机访问 GitHub 的时候超时了。

貌似国内的机器对 GitHub 的访问也会有关键词过滤情况,有时候 GitHub 的内容下载不下来。

因为 Discourse 安装之前需要先对 Docker 容器进行配置,在 Docker 容器里面可以配置新的 Repo 地址。

请参考下帖子: Can't change repo in discourse docker - #4 by sevenmaxis - dev - Discourse Meta 上面的内容。

貌似唯一解决办法就是你在国内的一个 Git 服务器上设置一个官方镜像,然后从这个服务器上往回拉。

另外,你的域名应该是需要备案的,否则也没有办法直接通过 IP 地址安装。

还有一个办法就是把你的错误信息发给阿里或者腾讯他们,让他们给你调下 Git 的权限。

说心里话,这个问题是国内的现状和网络环境问题,可能实在没有太好的办法,最糟糕的情况可能要在你的服务器上装个 VPN,绕过常规的访问方式。

最好看看你 Git 出错的信息是什么,是因为网络超时还是什么原因。

1 Like

你好啊,请教个问题,最近我在安装discourse,已经安装好了,但发现邮件一直收不到,试了126、qq、gmail的邮箱,都有问题,能请你帮我看一下吗?非常感谢!我的V信是:xinmin-yang

Discourse 应该有一个称为 邮件自动许可的域名。

在 Discourse 后台上面搜索 Mail > Login 然后会看到下面这个列表。

上的邮件地址是我们运行自动许可的,你可以看看先添加下这里的域名列表看看。

你好,我想问一下可以做到注册不用邮件许可吗。

我在内网安装了discourse,没有邮件服务器,注册的时候,确认邮件收不到,注册就登陆不了。

有办法关闭注册必须邮件确认才可以登陆的限制吗?

您好,Discourse 非常依赖电子邮件。

用户必须使用电子邮件才能登录和使用,但是还是有办法的就是你手工在后台激活了。

请参考下帖子中的内容:Remove email verification - #5 by BabylonZeus - support - Discourse Meta

当用户注册成功后,在后台给他手工激活下吧。

非常感谢,让我解决了这个问题。

只有手动激活,感谢。

好像没有提到中国网络环境的优化,我写了这一章节可以参考

中国网络环境的优化

上述步骤中如果你的云服务器在中国大陆,那你很可能遇到一些网络问题。Discourse已经帮你写好了除了docker以外的镜像服务,只需要在你的 containers/app.yml 中的这里添加一行:

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.china.template.yml" # 添加这一行,配置npm, rubygems等包管理器的镜像

解决。

对于 Docker镜像,以腾讯云为例,请用你喜欢的编辑器编辑linux的 /etc/docker/daemon.json,添加以下内容。可以试着将 https://mirror.ccs.tencentyun.com 改成你的云服务器厂商提供的docker镜像网址:

{
   "registry-mirrors": [
   "https://mirror.ccs.tencentyun.com"
  ]
}

添加完docker镜像后,使用 sudo systemctl restart docker 重启docker应用更改。

遇到git clone不了github的内容的话,不妨试试:

git config --global url."https://mirror.ghproxy.com/https://github.com/".insteadOf "https://github.com/"

如果是使用IP地址访问discourse

编辑app.yml

vim /var/discourse/containers/app.yml

将域名替换成 'IP地址+端口号'(不要漏了单引号),以及按照楼上的中国网络环境的优化进行修改

使用以下代码跳过配置检测

./discourse-setup --skip-connection-test 

最后安装成功后,IP地址+端口号就可以访问了

注意:我个人测试的时候一开始没加端口号,换成 ip+端口号 之后默认的icon直接全没了,不保证没bug

1 Like