Discourse 安装指南

This is a Simplified Chinese tutorial about Discourse installation.

<small>文章在知识共享 署名-相同方式共享 3.0协议之条款下提供。原文见此。</small>

EDIT:目前已经将几乎所有官方论坛的指南都翻译到了一个中文论坛,用来做本地化的支持。比如30 分钟内在 Digital Ocean 上部署 Discourse
Discourse 已经相当接近 1.0.0,大部分功能都比较成熟了。这篇文章将主要介绍如何用 Docker 安装 Discourse,以及其他一些安装方案。我将持续更新这篇文章。

介绍

Discourse 是一个为下一个十年的互联网准备的论坛程序。到沙盒试试。

你可以在 GitHub 找到官方的安装指南。官方将只支持 Docker 安装方案

硬件要求

  • 推荐双核 CPU
  • 最少 1 GB 内存(加上交换空间),推荐至少 2 GB;实际上 512 MB 也可以安装,估计不会好过。

Docker 安装方案

简介

官方 Docker 安装指南请至 GitHub。这里将提供一个在一台服务器上安装所有部件(数据库、Ruby 各种依赖)的指南。

  • Docker 是一个用于打包、部署并运行 Linux 应用的一个新项目。容器比传统的虚拟机方案更轻量和快速。
  • Docker 让部署和更新 Discourse 论坛变得简单。
  • 能够以官方团队推荐的最优设置配置 Discourse。

安装前准备:安装 Docker

  1. 使用 64 位的 Linux 系统。
  2. 升级或者安装最新版的 Docker。Ubuntu 的 Docker 安装指南
  3. 为 Discourse Docker 创建一个目录。推荐(/var/docker)。运行 install -g docker -m 2775 -d /var/docker
  4. 之后的操作以管理员或者 docker 用户组的成员进行。将用户账户添加到 docker 用户组的命令为:usermod -a -G docker yourusername,之后请重新登入。

开始安装

  1. 在服务器上运行 git clone https://github.com/discourse/discourse_docker.git /var/docker 克隆配置文件。
  2. /var/docker 中复制独立模式的配置文件到 containers 目录下 cp samples/standalone.yml containers/app.yml。这里的 app 可以换成你想要的任何名字,同理在后面操作的时候要用你选择的名字。
  3. 配置 containers/app.yml。(见后文)
  4. 运行 sudo ./launcher bootstrap app
  5. 启动 sudo ./launcher start app

目录结构

/cids

包含了当前运行的 Docker 容器的 id。Docker 中的 cid 就相当于 pid。每一个容器有一个独特的哈希。

/containers

这个目录用于存放不同的 Discourse 容器配置文件。该目录由你管理,默认为空。

/samples

样例容器配置文件,你可以用来初始化环境。你可以将其复制到 containers 目录里更改。

/shared

用于 Discourse 容器的共享目录。你可以将部分持久信息存在容器之外。我们将日志文件和上传文件的目录放在容器外。这能帮助你更方便重建容器而不会损失重要的信息。让上传文件的目录放在容器外也能让你在多个 web 实例运行时共享他们。

/templates

用于初始化的模板文件。

/image

用于 samsaffron/discourse_base 和 samsaffron/discourse 的 Dockerfile。

samsaffron/discourse_base 包含了所有与操作系统有关的依赖,包括 sshd、runit、postgres、nginx 和 ruby。

samsaffron/discourse 构建基础映像并且配置用户 discourse,将 Discourse 源代码放于 /var/www/discourse。

Docker 库中将永远包含最新的基础映像版本,位于:https://index.docker.io/u/samsaffron/discourse/ ,你绝不该自己构建基础映像。

容器配置

templates

templates:
  - "templates/cron.template.yml"
  - "templates/postgres.template.yml"

最终的模板是在这一系列的模板中组合起来的,你可以自己增加他们。

expose

expose:
  - "2222:22"
  - "127.0.0.1:20080:80"

暴露容器内的 22 端口至所有本地主机接口的 2222 端口。若想绑定至一个接口,你可以按照 [([<host_interface>:[host_port]])|(<host_port>):]<container_port>[/udp] 的格式定义规则,详情查看 Docker 端口绑定的文档。

volumes

volumes:
  - volume:
      host: /var/docker/shared
      guest: /shared

将容器内的目录暴露至主机。

env

## List of comma delimited emails that will be made admin on signup
DISCOURSE_DEVELOPER_EMAILS: 'my-email-address@example.com'

在这里输入用逗号分隔的邮件地址,注册后这些用户将拥有管理员权限。

## The domain name this Discourse instance will respond to
DISCOURSE_HOSTNAME: 'discourse.example.com'

设置 Discourse 的域名

## The mailserver this Discourse instance will use
DISCOURSE_SMTP_ADDRESS: smtp.example.com # (mandatory)
# DISCOURSE_SMTP_PORT: 587 # (optional)
# DISCOURSE_SMTP_USER_NAME: user@example.com # (optional)
# DISCOURSE_SMTP_PASSWORD: p@ssword # (optional)

邮件通知是 Discourse 的一个主要功能,你需要配置他们。你可以选择安装 postfix 并且自己配置他们,但是会比较麻烦。

推荐使用 Mandrill,需要翻墙。注册后创建一个 API,再按照 Mandrill 里的信息来填写。Mandrill 中可以查看到发送错误的日志,出问题可以去查看一下。

DISCOURSE_SMTP_ADDRESS: smtp.mandrillapp.com
DISCOURSE_SMTP_PORT: 587 # 使用 SSL 的话,阅读一下 Mandrill 的帮助
DISCOURSE_SMTP_USER_NAME:
DISCOURSE_SMTP_PASSWORD:

locale

目前还没支持,所以默认装的是英文版。管理员登入后在后台改成简体中文即可,但是自动生成的几个主题将会是英文的。

单容器 vs 多容器

samples 目录包含了一个 standalone 模板用于单容器安装。其中包含了在单一容器中安装 Discourse 的所有文档。优点是比较简单。

多容器配置更灵活、强大,但也更难配置。多容器能让你:

  • 升级新版本 Discourse 时降低下线时间。你可以在更新后初始化新的 web 进程,再切换过去。
  • 使用多个服务器均衡负载。
  • 增加服务器冗余。
  • 将某些服务(如数据库)运行在特定硬件上。

如果你想要使用多容器安装,看一看 sample 目录的 data.ymlweb_only.yml 模板。为了简化安装,launcher 将会在映像中注入一个 DISCOURSE_HOST_IP 的环境变量。
警告:在多站点配置中,确定配置好 iptables 或者其他的防火墙为 postgresql 和 redis 保护他们使用的端口。在 Ubuntu 上,安装 ufwiptables-persistent 包来管理防火墙规则。

多容器配置请参考这个主题

SSL

请参考这个主题

排错

可以 SSH 登入至容器:./launcher ssh my_container。初始化容器时将自动配置 ssh 登入信息。

其他方案

Digital Ocean

对照上文的安装方案,整体流程是一样的。GitHub 上的教程

托管方案

Discourse 有托管服务。国内目前还没有。

安装后配置

默认的主题标题和内容字符限制应该是第一个要更改的东西,根据需要调整一下。

升级

访问 /admin/docker,看到升级按钮点了即可。

已知问题

  • 前几周把简体中文的翻译都做完了。有什么不对的、不合适的可以联系我,或在 Transifex 上更改,或在 Meta 上指出。
  • 繁体中文可以从简体中文转换一下,应该能节省不少时间了。
  • 搜索功能与 postgresql 的 locale 设置有关,没有设置成指定语言就没法工作,考虑用 ElasticSearch,不知道 1.0.0 前能否完成。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,087评论 18 139
  • 转载自 http://blog.opskumu.com/docker.html 一、Docker 简介 Docke...
    极客圈阅读 10,404评论 0 120
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,293评论 6 344
  • 五、Docker 端口映射 无论如何,这些 ip 是基于本地系统的并且容器的端口非本地主机是访问不到的。此外,除了...
    R_X阅读 1,670评论 0 7
  • 我从去年开始就接触了手账,但直到今年年初才决心买一本手账本,因为手账本真的很贵啊,花了几百块人民币买完本子之后,我...
    探微成长笔记阅读 2,680评论 16 118