溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

怎么用全站CDN部署Discourse論壇

發(fā)布時(shí)間:2022-01-14 17:42:21 來(lái)源:億速云 閱讀:121 作者:小新 欄目:服務(wù)器

這篇文章將為大家詳細(xì)講解有關(guān)怎么用全站CDN部署Discourse論壇,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

Discourse 介紹

Discourse 是一款由 Stack Overflow 的聯(lián)合創(chuàng)始人——Jeff Atwood,基于 Ruby on Rails 開(kāi)發(fā)的開(kāi)源論壇。相較于傳統(tǒng)論壇,Discourse 從他全面開(kāi)放的開(kāi)源態(tài)度、簡(jiǎn)介明了的頁(yè)面風(fēng)格到其特有的內(nèi)容運(yùn)作體系都在證明自己是一款為下一個(gè) 10 年的互聯(lián)網(wǎng)而設(shè)計(jì)的產(chǎn)品?,F(xiàn)在,諸如 Car Talk 等國(guó)外知名產(chǎn)品都采用 Discourse 為論壇方案。

作為一個(gè)開(kāi)源的論壇項(xiàng)目,Discourse 相對(duì)其他的論壇有以下亮點(diǎn):

  • 高度可定制:從發(fā)帖等級(jí)要求權(quán)限到論壇帖子標(biāo)題最少字?jǐn)?shù)要求,Discourse 在論壇設(shè)置里羅列了 25 設(shè)置大項(xiàng),300+ 個(gè)論壇小項(xiàng),即使大家都使用 Discourse 搭建論壇但是每個(gè)用 Discourse 搭建的論壇都有自己的風(fēng)格。

  • 插件:Discourse 官方及 Discourse 開(kāi)源社區(qū)用戶開(kāi)發(fā)了豐富的插件可供使用,比如:個(gè)性化導(dǎo)航、自定義論壇封面。

  • 集成:可接入第三方產(chǎn)品,Google Analytics、 Slack、Wordpress 都在支持之列。

  • 免費(fèi):雖然 Discourse 有 $100/Month 的托管服務(wù),但是你可以完全自行部署免費(fèi)使用 Discourse 服務(wù)。

  • 其他:Discourse 還有其他許多的好處,舉個(gè)例子,它提供了一個(gè)機(jī)器人 Discobot?是一個(gè)可自定義的 bot,交互式地教新用戶使用平臺(tái)的許多功能,例如為主題添加 書(shū)簽),單框鏈接(嵌入的預(yù)覽),添加 emoji表情,非常簡(jiǎn)單的格式設(shè)置,添加圖片回復(fù),標(biāo)記帖子以及如何使用搜索功能。

豐富的插件、可自定義論壇設(shè)置便是 Nebula Graph 選擇 Discourse 最大的原因,而本文不在于介紹如何搭建 Discourse(搭建 Discourse 是一個(gè)簡(jiǎn)單的活,可自行搜索教程),本文旨在介紹圖數(shù)據(jù)庫(kù) Nebula graph 如何利用 CDN 來(lái)部署 Discourse。

部署 Discourse

自托管的原因

盡管 Discourse 官方的托管服務(wù),但由于國(guó)內(nèi)的訪問(wèn)質(zhì)量不穩(wěn)定、不能自由的修改插件和自定義網(wǎng)絡(luò)設(shè)置,因此我們決定自行托管這項(xiàng)服務(wù)?;谧酝泄芊?wù),我們對(duì)網(wǎng)絡(luò)、插件系統(tǒng)做了一些自定義修改,使得目前 Nebula Graph社區(qū)有著更好的訪問(wèn)速度和功能。

自托管論壇服務(wù)要求

經(jīng)測(cè)試以下配置清單可以完全滿足我們部署 Discourse 的要求:

  • 2G 內(nèi)存以上的 Linux 服務(wù)器,如果使用 1G 內(nèi)存的主機(jī),則需要開(kāi)啟 SWAP 分區(qū)。

  • 具備完整控制權(quán)的域名,注冊(cè)郵件服務(wù)和 CDN 服務(wù)時(shí)我們會(huì)用到它。

  • 一個(gè) Cloudflare 賬號(hào),這會(huì)對(duì)加速網(wǎng)站和提高安全性有幫助。

  • 一個(gè)可用的 SMTP 郵件服務(wù)。

  • 為 Linux 服務(wù)器部署 Docker 服務(wù),國(guó)內(nèi)用戶可添加 Azure 中國(guó)、七牛云的鏡像域名

部署實(shí)踐

Cloudflare 介紹

Cloudflare 是一家覆蓋全世界主要地區(qū)的 CDN 服務(wù)商,在提供基本的 CDN 服務(wù)同時(shí),他們還提供高質(zhì)量的 DNS 查詢、DDOS 保護(hù)、緩存加速服務(wù)。相比其他的 CDN 服務(wù)商,他們產(chǎn)品理念更為先進(jìn),不僅有著良好的服務(wù)質(zhì)量且擁有非常低廉的價(jià)格(通常情況下甚至是免費(fèi)的),因此目前 Cloudflare 的用戶規(guī)模非常龐大,是值得首選的CDN服務(wù)商。

設(shè)定 Cloudflare 的 DNS記錄

先設(shè)定 DNS 記錄可減少首次部署時(shí)無(wú)法通過(guò) Let’s encrypt 申請(qǐng)證書(shū)的概率。在 Cloudflare 的 DNS 配置中,添加類型為 A 的記錄指向服務(wù)器的 IP 地址即可。

怎么用全站CDN部署Discourse論壇

這里需提醒下,不要將 Proxy status 設(shè)置為“Proxied”,這會(huì)導(dǎo)致頁(yè)面因重定向次數(shù)過(guò)多而無(wú)法訪問(wèn)。我們將在完成正確的配置后開(kāi)啟 Proxy status 設(shè)置。

配置 Cloudflare SSL/TLS

Full 和 Flexible 是 Cloudflare 上最常用的兩種 SSL 模式,在正確的啟用 CDN 前,需要對(duì)其進(jìn)行設(shè)置。首先來(lái)到 SSL/TLS 設(shè)置面板,選擇 Full 模式,這種方式會(huì)確保 CDN 回源時(shí)也可以通過(guò) HTTPS 來(lái)訪問(wèn)源站,有效地提高了內(nèi)容安全性。

怎么用全站CDN部署Discourse論壇

然后進(jìn)入 Origin Server 標(biāo)簽,進(jìn)行創(chuàng)建證書(shū)的操作,在私鑰類型中選擇 RSA,BTW,這是最具兼容性的證書(shū)類型,ECDSA 則具有更好的性能。

在被證書(shū)保護(hù)的域名列表中輸入論壇的域名,例如 Nebula Graph 論壇地址為: discuss.nebula-graph.io,證書(shū)有效期選擇 1 年即可。點(diǎn)擊 Next 后將會(huì)獲取到證書(shū)的公鑰和私鑰,分別保存為“ssl.crt”和“ssl.key”將其妥善保存,我們將在后續(xù)的步驟中用到他們。

怎么用全站CDN部署Discourse論壇

配置和部署 Discourse

Discourse 有完善的 Docker 鏡像,因此在正確的安裝 Docker 后可以直接運(yùn)行它。

安裝 Discourse

將 Discourse 官方 Docker 鏡像拉取至 /var/discourse 目錄下。

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

/var/discourse 目錄下執(zhí)行

./discourse-setup

可以看到如下交互式界面,在此界面依次填入域名、管理員郵箱、SMTP 郵件服務(wù)器信息以及 Let’s Encrypt 通知郵箱地址即可完成論壇的基礎(chǔ)配置。

Hostname for your Discourse? [discourse.example.com]: [論壇的域名]
Email address for admin account(s)? [me@example.com,you@example.com]:[管理員郵箱,此郵箱不會(huì)公開(kāi)] 
SMTP server address? [smtp.example.com]: [SMTP郵件服務(wù)器地址]
SMTP port? [587]: [SMTP郵件服務(wù)器端口]
SMTP user name? [user@example.com]: [論壇自動(dòng)發(fā)信郵箱賬號(hào)]
SMTP password? [pa$$word]: [論壇自動(dòng)發(fā)信郵箱賬號(hào)的密碼]
Let's Encrypt account email? (ENTER to skip) [me@example.com]: [自動(dòng)更新證書(shū)的通知郵箱地址]
SSL 注意事項(xiàng)

使用 SSL 需要注意的是,如果 DNS 記錄還未傳播至服務(wù)器所使用的 DNS 服務(wù)器,將無(wú)法使用 Let’s Encrypt 的 SSL 證書(shū)自動(dòng)注冊(cè)服務(wù)。由于我們將使用上文中已申請(qǐng)的 Cloudflare 證書(shū),因此這里可以跳過(guò) Let’s Encrypt account email 這一項(xiàng)。

論壇啟動(dòng)

大約等待 10 分鐘后,可通過(guò)之前設(shè)定的域名: discuss.nebula-graph.io 訪問(wèn)自己的 Discourse 論壇。如果首次訪問(wèn)時(shí)出現(xiàn)了 502 錯(cuò)誤,這是由于服務(wù)還未完全初始化,通常情況下稍等片刻即可。

怎么用全站CDN部署Discourse論壇

配置 Discourse

Discourse 的配置文件位于 /var/discourse/containers/app.yml

郵件服務(wù)設(shè)定

郵件服務(wù)是整個(gè)部署過(guò)程中容易出現(xiàn)設(shè)定錯(cuò)誤的部分之一。對(duì)于大多數(shù)郵件服務(wù)而言,正確的配置 SMTP 服務(wù)器地址、端口以及發(fā)信人的賬戶密碼即可完成設(shè)定。SMTP 服務(wù)器地址和可用端口通常在郵件服務(wù)提供者的幫助頁(yè)面上都可以查到,部分個(gè)人郵箱可能需要?jiǎng)?chuàng)建應(yīng)用專用密碼才能使用SMTP服務(wù)。

但對(duì)于 Office365 以及騰訊這種企業(yè)郵箱而言,則需要手動(dòng)在 app.yml 中指定賬戶驗(yàn)證方式為 login。參考配置如下:

 DISCOURSE_SMTP_ADDRESS: smtp.office365.com
 DISCOURSE_SMTP_PORT: 587
 DISCOURSE_SMTP_USER_NAME: example@office365.com
 DISCOURSE_SMTP_PASSWORD: **********
 DISCOURSE_SMTP_ENABLE_START_TLS: true
 DISCOURSE_SMTP_AUTHENTICATION: login

這是因?yàn)?Discourse 默認(rèn)的郵箱身份驗(yàn)證方式是 plain。如果不確定使用何種方式驗(yàn)證,可通過(guò) swaks 這個(gè)郵件服務(wù)測(cè)試工具來(lái)進(jìn)行監(jiān)測(cè)。參考:

swaks --to [收件郵箱] --from [發(fā)件郵箱] --server [SMTP服務(wù)器地址] --auth [login/plain] --auth-user [發(fā)件郵箱] -tls -p [端口]

在確保能夠通過(guò) Discourse 郵件發(fā)送測(cè)試的同時(shí),還需注意兩項(xiàng)功能設(shè)定才能夠確保用戶能夠收到郵件。

  • 位于論壇 Setting-Required 下的 notification email,這里需要配置為和 SMTP 登錄賬號(hào)相同的郵箱地址。

  • disable emails,通常在進(jìn)行論壇遷移、備份還原后這一項(xiàng)通常會(huì)被設(shè)置為 non-staff,此時(shí),設(shè)置為 no 后將恢復(fù)郵件發(fā)送。

SSL、CDN服務(wù)設(shè)定

在 app.yml 文件中,tempates 下引入 templates/cloudflare.template.ymltemplates/web.ssl.template.yml 兩個(gè)模板文件。再次登錄 Cloudflare 賬號(hào),將 DNS 記錄從 DNS only 改為 Proxied,等待記錄生效。如果本地的網(wǎng)絡(luò)質(zhì)量不佳,也可引入 templates/web.china.template.yml 模版,它將從國(guó)內(nèi)的 Ruby 鏡像獲取資源。

templates:
  - "templates/postgres.template.yml"
  - "templates/redis.template.yml"
  - "templates/web.template.yml"
  - "templates/web.ratelimited.template.yml"
  - "templates/cloudflare.template.yml"
## Uncomment these two lines if you wish to add Lets Encrypt (https)
  - "templates/web.ssl.template.yml"
    #  - "templates/web.letsencrypt.ssl.template.yml"

/var/discourse/shared/standalone/``ssl 目錄下放入步驟2 中所創(chuàng)建的證書(shū)文件。

加入新插件(可選)

為了更好幫助海外用戶閱讀論壇上的中文內(nèi)容,我們引入了翻譯插件。Discourse 擁有豐富的插件,因此如果有需要,你可以安裝任何你感興趣的插件。

在 app.yml 文件的 hooks 字段下配置可被 git 獲取的鏈接,當(dāng) Discourse 的 Docker container 重新創(chuàng)建時(shí)新插件既完成安裝。

## Plugins go here
## 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
          - git clone https://github.com/discourse/discourse-translator.git
完成配置后

在完成以上配置后,在 /var/discourse 目錄錄下運(yùn)行 ./launcher rebuild app,并再次等待 10 分鐘,即可完成最終的構(gòu)建。

對(duì)于個(gè)人站長(zhǎng)而言,還需安裝并配置 Fail2ban 來(lái)保護(hù) ssh 服務(wù)安全。Discourse 每周會(huì)自動(dòng)創(chuàng)建一個(gè)備份保存在本機(jī)的 /var/discourse/shared/standalone/backups 目錄下,可設(shè)置 rsync 將它們備份到本地的服務(wù)器上。如果有可用的 Amazon S3 服務(wù),還可在后臺(tái)配置 S3 服務(wù)的相關(guān)信息,Discourse 會(huì)在完成備份后自動(dòng)將備份上傳至對(duì)應(yīng)的 S3 實(shí)例。

現(xiàn)在,你擁有了一個(gè)具備全站 CDN 加速能力的 Discourse 論壇,得益于全站 CDN 和全鏈路 SSL,論壇可以在全球任何位置被安全的訪問(wèn)。從你的域名訪問(wèn)論壇,并根據(jù)需要填寫(xiě)的信息即可初始化論壇并創(chuàng)建管理員賬號(hào),通過(guò)郵件中的鏈接確認(rèn)注冊(cè)后即可開(kāi)啟論壇服務(wù)。

關(guān)于“怎么用全站CDN部署Discourse論壇”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI