Discourse 搭建

Discourse logo

0. 簡(jiǎn)要介紹

Discourse 是由 Stack Overflow 創(chuàng)始人之一的 Jeff Atwood 主導(dǎo)的開源論壇項(xiàng)目详恼,使用時(shí)能感受到和 Stack Overflow 的關(guān)聯(lián)性叠纷,比如為鼓勵(lì)有效的技術(shù)討論沉噩、控制人身攻擊等做了很多努力笛谦,頁(yè)面的布局方式也有相似之處。Discourse 提供了非常豐富的配置方式盐类,也支持插件擴(kuò)展彼硫,是值得學(xué)習(xí)的論壇類開源項(xiàng)目。

本文主要介紹通過(guò) Docker 鏡像的方式在公有云環(huán)境中部署 Discourse 環(huán)境寝受,公有云選為阿里云坷牛,操作系統(tǒng)為 Ubuntu 16.04。

1. 準(zhǔn)備工作

1.1 阿里云環(huán)境準(zhǔn)備

Discourse 官方文檔中推薦的最低配置是 1 核 2G很澄,這里就選用了最低配:ecs.n4.small,對(duì)于沒(méi)有很高訪問(wèn)量的站點(diǎn),這個(gè)配置也足夠用了甩苛。

阿里云虛擬機(jī)配置

服務(wù)器購(gòu)買完成后蹂楣,記得要更新一下系統(tǒng),最新的系統(tǒng)修復(fù)了不少 bug:

apt update
apt upgrade -y

1.2 郵箱配置

Discourse 比較依賴郵箱系統(tǒng)讯蒲,需要根據(jù)郵箱來(lái)進(jìn)行注冊(cè)和消息通知痊土,所以一定要有一個(gè)可用的郵件服務(wù)系統(tǒng),Discourse 推薦使用第三方的郵件系統(tǒng)墨林,其實(shí)自己搭建也是完全可行的赁酝,但郵件系統(tǒng)搭建也要花費(fèi)一定的精力,而且也有一定的難度旭等,本文使用的郵箱系統(tǒng)是 ElastishMail酌呆,具體的注冊(cè)方式就不詳細(xì)描述了。

1.3 注冊(cè)域名

使用 IP 訪問(wèn)當(dāng)然也是沒(méi)有問(wèn)題的搔耕,不過(guò)總歸是不方便隙袁,建議還是為接下來(lái)要搭建的 Discourse 站點(diǎn)注冊(cè)一個(gè)域名,阿里云收購(gòu)了萬(wàn)網(wǎng)弃榨,所以域名注冊(cè)在阿里云的網(wǎng)站內(nèi)就可以搞定了菩收。

2. 基礎(chǔ)安裝

Discourse 本身是挺復(fù)雜的,看安裝過(guò)程的耗時(shí)和輸出信息就知道了鲸睛。幸運(yùn)的是娜饵,Discourse 提供了自動(dòng)化安裝的腳本,較低了部署的難度官辈。Discourse 依賴的軟件并不多划咐,主要是 git(用來(lái)拉取 Discourse 的代碼)、docker(因?yàn)橐褂?Docker 部署) 和 ruby(原因是 Discourse 是用 ruby 編寫的)以及 ruby 的包管理工具 gem钧萍。

安裝 git

# install git
$ sudo apt install git

安裝 docker

# install docker
$ sudo wget -qO- https://get.docker.com/ | sh

配置 docker 使用國(guó)內(nèi)的鏡像

# Configure docker to use Chinese mirrors
$ sudo vim /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://registry.docker-cn.com",
                       "http://hub.c.163.com"]
}
$ sudo systemctl restart docker.service

安裝 discourse

# install discourse
$ sudo -s
$ mkdir /var/discourse
$ git clone https://github.com/discourse/discourse_docker.git /var/discourse
$ cd /var/discourse
$ ./discourse-setup

運(yùn)行 discourse-setup 腳本后褐缠,會(huì)提示輸入一些安裝信息,以此輸入之前注冊(cè)的域名和郵箱信息即可风瘦。

Hostname for your Discourse? [discourse.example.com]:
Email address for admin account(s)? [me@example.com,you@example.com]:
SMTP server address? [smtp.example.com]:
SMTP port? [587]:
SMTP user name? [user@example.com]:
SMTP password? [pa$$word]:
Let's Encrypt account email? (ENTER to skip) [me@example.com]:

配置完成后队魏,需要進(jìn)行很久的編譯,稍安勿燥万搔,半小時(shí)之內(nèi)都是正常的胡桨。等待腳本 discourse-setup 腳本執(zhí)行結(jié)束,就可以訪問(wèn)剛剛配置好的 discourse 網(wǎng)站了瞬雹!

Disourse 歡迎界面

PS:Discourse 在國(guó)內(nèi)云環(huán)境中部署昧谊,因?yàn)楸娝苤脑颍浖南螺d可能會(huì)遇到問(wèn)題酗捌,本文所參考的一篇資料中談到了gem 的連接問(wèn)題呢诬,不過(guò)在寫作本文的過(guò)程中并沒(méi)有遇到該問(wèn)題涌哲,如果遇到網(wǎng)絡(luò)原因造成的安裝失敗,大家就需要各現(xiàn)神通了尚镰。

3. 進(jìn)階配置

3.1 設(shè)置自動(dòng)備份

為了網(wǎng)站的信息安全阀圾,當(dāng)然要對(duì)數(shù)據(jù)定期進(jìn)行備份,配置備份的界面如下:


備份設(shè)置

圖中配置的是每天備份一次狗唉,保留最近的七個(gè)備份初烘。但這依然有問(wèn)題,原因是備份文件是存儲(chǔ)在 docker 內(nèi)部的分俯,萬(wàn)一 docker 崩潰了肾筐,備份文件也一樣拿不回來(lái),更為保險(xiǎn)的方式是將備份文件再上傳到第三方的存儲(chǔ)系統(tǒng)中缸剪,discourse 也支持這樣的配置吗铐,但因?yàn)?discourse 的作者生活在美帝,用的都是 S3橄登、Dropbox抓歼、Box 和 Google Drive,我等只有看著流口水的份拢锹,所以完全不可用谣妻。目前我的解決方式是 crontab 啟動(dòng)定時(shí)任務(wù),然后用 python 上傳備份文件到內(nèi)部的 Ceph 集群里卒稳,因?yàn)闆](méi)有通用性蹋半,就先不把這種方式的詳細(xì)步驟放上來(lái)了,如果有需要的話充坑,我可以考慮把上傳到 OSS 公有云的方法補(bǔ)充上减江。另外自己寫 Discourse 的插件也是可行的,只是我對(duì) Ruby 完全不了解捻爷,所以沒(méi)有采用這種方式辈灼。

3.2 設(shè)置 https

對(duì)于 HTTPS 的支持,discourse 也提供了自動(dòng)化腳本也榄,只需修改配置文件巡莹,并重新編譯即可。

修改配置文件:需要在 /var/discourse/containers/app.yml 的 templates 段中增加一個(gè)行:

$ cat /var/discourse/containers/app.yml
...
templates:
...
  - "templates/web.letsencrypt.ssl.template.yml"
...

然后執(zhí)行以下命令:

$ /var/discourse/launcher rebuild app

腳本運(yùn)行結(jié)束后即完成了 https 的配置甜紫,但這個(gè)執(zhí)行時(shí)間依舊不短降宅,大概在十到二十分鐘。

4. 參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末囚霸,一起剝皮案震驚了整個(gè)濱河市腰根,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拓型,老刑警劉巖额嘿,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘸恼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡岩睁,警方通過(guò)查閱死者的電腦和手機(jī)钞脂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門揣云,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)捕儒,“玉大人,你說(shuō)我怎么就攤上這事邓夕×跤ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵焚刚,是天一觀的道長(zhǎng)点弯。 經(jīng)常有香客問(wèn)我,道長(zhǎng)矿咕,這世上最難降的妖魔是什么抢肛? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮碳柱,結(jié)果婚禮上捡絮,老公的妹妹穿的比我還像新娘。我一直安慰自己莲镣,他們只是感情好福稳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瑞侮,像睡著了一般的圆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上半火,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天越妈,我揣著相機(jī)與錄音,去河邊找鬼钮糖。 笑死梅掠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的藐鹤。 我是一名探鬼主播瓤檐,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼娱节!你這毒婦竟也來(lái)了挠蛉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤肄满,失蹤者是張志新(化名)和其女友劉穎谴古,沒(méi)想到半個(gè)月后质涛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡掰担,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年汇陆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片带饱。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡毡代,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出勺疼,到底是詐尸還是另有隱情教寂,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布执庐,位于F島的核電站酪耕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏轨淌。R本人自食惡果不足惜迂烁,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望递鹉。 院中可真熱鬧盟步,春花似錦、人聲如沸梳虽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)窜觉。三九已至谷炸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間禀挫,已是汗流浹背旬陡。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留语婴,地道東北人描孟。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像砰左,于是被迫代替她去往敵國(guó)和親匿醒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容