Rainbond云原生部署開源社區(qū)Discourse的配置過(guò)程
概述
Discourse 是一個(gè)完全開源的論壇平臺(tái)。具有豐富的插件庫(kù)與主題庫(kù),適用于開源社區(qū)的構(gòu)建。Rainbond官方社區(qū)就是基于Discourse搭建的實(shí)際案例。
Rainbond官方社區(qū)建立之初就已經(jīng)使用了Discourse,當(dāng)時(shí)的版本為 1.5.4。時(shí)過(guò)境遷,為了更好的社區(qū)體驗(yàn),Rainbond社區(qū)運(yùn)營(yíng)團(tuán)隊(duì)決定部署最新版本的Discourse社區(qū),并將原社區(qū)的數(shù)據(jù)遷移到新社區(qū)中。
這篇文檔,會(huì)詳細(xì)介紹如何在Rainbond容器云平臺(tái)上部署Discourse,以及在整個(gè)部署乃至遷移數(shù)據(jù)過(guò)程中所趟平的坑。對(duì)于有意搭建基于Discourse的社區(qū)的小伙伴,會(huì)有很大的幫助。
了解更多有關(guān)Discourse的信息:
基于應(yīng)用市場(chǎng)快速安裝
Discourse 已經(jīng)發(fā)布到了Rainbond應(yīng)用市場(chǎng),可以一鍵部署安裝,即點(diǎn)即用。
點(diǎn)擊安裝,選擇應(yīng)用后稍等一會(huì),即可訪問(wèn)你的Discourse了
在正式使用前,一定要修改以下環(huán)境變量:
環(huán)境變量:
DISCOURSE_DB_PASSWORD=你自定義的數(shù)據(jù)庫(kù)密碼
DISCOURSE_DEVELOPER_EMAILS=管理員的郵箱地址
DISCOURSE_HOSTNAME=為社區(qū)準(zhǔn)備的域名,如果希望使用Rainbond默認(rèn)為80端口生成的域名,這個(gè)值設(shè)置為 ${DOMAIN}
DISCOURSE_SMTP_ADDRESS=可用的smtp服務(wù)器
DISCOURSE_SMTP_PORT=smtp服務(wù)器的端口
DISCOURSE_SMTP_USER_NAME=smtp賬戶
DISCOURSE_SMTP_PASSWORD=smtp賬戶的密碼
修改完成后,就可以繼續(xù)注冊(cè)使用了。
Discourse應(yīng)用如何制作
在使用舊版本Discourse的時(shí)候,為了將其容器化,我們做了很多工作。但在當(dāng)前版本,Discourse官方已經(jīng)支持并且主推容器化部署,這對(duì)于將Discourse部署在Rainbond容器云平臺(tái)非常友好。
接下來(lái)的部分,我將說(shuō)明如何制作一個(gè)即點(diǎn)即用的Discourse應(yīng)用。
獲取鏡像
部署的第一步,就是獲取到Discourse的鏡像。
區(qū)別于一般的容器化部署,Discourse并沒(méi)有將它自己的鏡像托管于Docker Hub,而是為用戶準(zhǔn)備了一套完整的工具,可以讓用戶高度自定義自己需要的鏡像,這套工具就是discourse_docker。在這套工具里,用戶可以根據(jù)其提供的模版自定義部署的方式、包含的插件等信息,并通過(guò)一條命令,快速構(gòu)建對(duì)應(yīng)的鏡像;也可以利用它來(lái)管理本機(jī)正在運(yùn)行的docker化部署的Discourse。
Discourse部署支持 all in one 的 Standalone 模式,也支持適用于生產(chǎn)的 Multiple 模式。Multiple 模式的意思,就是將Discourse 的WEB部分,和后端數(shù)據(jù)庫(kù)Postgresql、緩存中間件Redis分離部署。
本次部署,將使用 Multiple 模式。最終的拓?fù)洌瑢?huì)是下面這種情況:
環(huán)境的要求
首先,我們需要有一個(gè)可以運(yùn)行docker服務(wù)的環(huán)境,如果你已經(jīng)安裝了Rainbond容器云平臺(tái),那么集群中任何一個(gè)節(jié)點(diǎn),都可以滿足你的需要。如果你還沒(méi)有安裝Rainbond,或者根本不知道它是什么,你需要點(diǎn)擊了解一下。
獲取discourse_docker
git clone https://github.com/discourse/discourse_docker.git
配置模版
在項(xiàng)目的根目錄中,名為 samples
的目錄下,會(huì)有我們所需要的模版文件 web_only.yml
data.yml
,將這兩個(gè)模版文件拷貝到項(xiàng)目根目錄下的 containers
目錄下。
自定義配置
Discourse最主要的自定義在于主題(theme) 和插件(plugins),其中主題可以在網(wǎng)站設(shè)置中配置,而插件的安裝,則需要修改上述的模版文件。
編輯web_only.yml
文件,在第84行附近找到如下段落,并追加插件地址:
hooks: after_code: - exec: cd: $home/plugins cmd: - git clone https://github.com/discourse/docker_manager.git - git clone https://github.com/discourse/discourse-whos-online.git
具體原理及操作,點(diǎn)擊了解一下
其他的標(biāo)準(zhǔn)配置,如郵件服務(wù)器的配置,均以環(huán)境變量的方式指定,當(dāng)前可以保持默認(rèn),部署于Rainbond的時(shí)候,可以支持自定義環(huán)境變量進(jìn)行替換。
關(guān)于Discourse 環(huán)境變量配置的說(shuō)明
關(guān)于Rainbond如何自定義環(huán)境變量
- 構(gòu)建WEB服務(wù)鏡像
使用命令行工具 launcher
來(lái)構(gòu)建 web_only 鏡像:
./launcher bootstrap web_only
構(gòu)建完成后,在服務(wù)器的本地鏡像列表里,就會(huì)出現(xiàn)對(duì)應(yīng)的鏡像:
root@localhost:~/discourse_docker# docker images | grep web_only local_discourse/web_only latest 79a99d0d8fd1 7 days ago 2.83GB
將這個(gè)鏡像推送至Docker hub或者私有的鏡像倉(cāng)庫(kù)備用即可,在我的部署環(huán)境里,我將其推送到了 Docker hub,具體的鏡像地址為: rainbond/discourse_web:2.4.0-beta8
。
構(gòu)建數(shù)據(jù)庫(kù)鏡像
使用命令行工具構(gòu)建 data 鏡像
./launcher bootstrap data
構(gòu)建完成后,在服務(wù)器的本地鏡像列表里,就會(huì)出現(xiàn)對(duì)應(yīng)的鏡像:
root@iZj6chkije5xk0gfyvcrzyZ:~/discourse_docker# docker images | grep data local_discourse/data latest 76e100480749 2 weeks ago 2.35GB
這個(gè)鏡像不必推送到鏡像倉(cāng)庫(kù),后續(xù)的步驟會(huì)繼續(xù)拆分這個(gè)鏡像,并進(jìn)行數(shù)據(jù)自動(dòng)初始化的處理。
當(dāng)前構(gòu)建出來(lái)的data鏡像,是一個(gè)合并了 postgresql 和 redis 的鏡像。這還不符合我們想要的部署方式,我要將它進(jìn)行進(jìn)一步的拆分。
我決定使用官方鏡像來(lái)運(yùn)行 postgresql 和 redis。然后對(duì) postgresql 進(jìn)行處理,使之可以自動(dòng)初始化。
redis 部署
這一步比較簡(jiǎn)單,直接基于鏡像部署一個(gè)標(biāo)準(zhǔn)的redis即可:
postgresql部署
基于官方的postgresql鏡像做了進(jìn)一步處理,使之可以自動(dòng)初始化Discourse所需要的數(shù)據(jù)庫(kù)。
部署的方式使用了基于 Dockerfile 的源碼構(gòu)建,項(xiàng)目地址:https://github.com/dazuimao1990/pri-postgresql
關(guān)鍵Dockerfile部分解析:
FROM postgres:10-alpine MAINTAINER guox@goodrain.com # 下面的步驟,會(huì)將初始化數(shù)據(jù)用的sql腳本放置在指定目錄下 ADD sql/*.sql /docker-entrypoint-initdb.d/ ADD docker-entrypoint.sh / RUN chmod +x /docker-entrypoint.sh ENV TZ Aisa/Shanghai ENV LANG en_US.utf8 ENV PGDATA /var/lib/postgresql/data ENV PG_MAJOR 10 ENV PG_VERSION 10.11 VOLUME /var/lib/postgresql/data EXPOSE 5432
自動(dòng)初始化的原理參見(jiàn):https://hub.docker.com/_/postgres 中的 Initialization scripts
部分。docker化的數(shù)據(jù)庫(kù),大部分都支持這種方式自動(dòng)初始化,這樣做的好處是,基于此鏡像的容器在首次啟動(dòng)時(shí),不需要其他操作,就會(huì)自動(dòng)執(zhí)行sql腳本完成初始化。對(duì)于Rainbond部署而言,在將這樣的數(shù)據(jù)庫(kù)作為應(yīng)用的一部分發(fā)布到應(yīng)用市場(chǎng)后,執(zhí)行一鍵安裝可以達(dá)到即安即用的效果。
這一步的另一個(gè)重點(diǎn)在于如何獲取初始化用的sql腳本。這需要利用到上個(gè)步驟構(gòu)建出來(lái)的數(shù)據(jù)庫(kù)鏡像。
將這個(gè)鏡像啟動(dòng)為容器:
./launcher start data
這時(shí)就會(huì)啟動(dòng)一個(gè)已經(jīng)初始化好了的data容器。我們需要將它里面的數(shù)據(jù)庫(kù) discourse
備份出來(lái)。
docker exec -ti data bash pg_dump -d discourse -h 127.0.0.1 -U discourse > data.sqlpg_dump -d discourse -h 127.0.0.1 -U discourse > /shared/data.sql
輸入密碼后即可開始備份,備份完成后在服務(wù)器的 /var/discourse/shared/data/
目錄下,找到對(duì)應(yīng)的 data.sql
文件。
在官方鏡像使用 data.sql 初始化的時(shí)候,發(fā)現(xiàn)一個(gè)小問(wèn)題,官方鏡像沒(méi)有默認(rèn)創(chuàng)建role:postgres
故此手動(dòng)在 data.sql
前面加入以下內(nèi)容:
-- -- This row is added manually because when the SQL is imported manually, recived role "postgres" does not exist -- CREATE USER postgres SUPERUSER;
準(zhǔn)備就緒后,就可以在Rainbond部署訂制的postgresql 了
構(gòu)建之前,需要定義高級(jí)設(shè)置:
組件部署類型 :有狀態(tài)服務(wù)
環(huán)境變量:
POSTGRES_DB=discourse
POSTGRES_PASSWORD=自定義的數(shù)據(jù)庫(kù)密碼
POSTGRES_USER=discourse
部署Discourse_web
利用我們已經(jīng)推送好的 rainbond/discourse_web:2.4.0-beta8 鏡像,來(lái)部署WEB服務(wù)部分。
點(diǎn)擊構(gòu)建之前,進(jìn)行高級(jí)設(shè)置:
環(huán)境變量:
DISCOURSE_DB_HOST=127.0.0.1
DISCOURSE_DB_PASSWORD=你自定義的數(shù)據(jù)庫(kù)密碼
DISCOURSE_DB_USERNAME=discourse
DISCOURSE_DEVELOPER_EMAILS=管理員的郵箱地址
DISCOURSE_HOSTNAME=為社區(qū)準(zhǔn)備的域名,如果希望使用Rainbond默認(rèn)為80端口生成的域名,這個(gè)值設(shè)置為 ${DOMAIN}
DISCOURSE_REDIS_HOST=127.0.0.1
DISCOURSE_SMTP_ADDRESS=可用的smtp服務(wù)器
DISCOURSE_SMTP_PORT=smtp服務(wù)器的端口
DISCOURSE_SMTP_USER_NAME=smtp賬戶
DISCOURSE_SMTP_PASSWORD=smtp賬戶的密碼
建立依賴
利用Rainbond依賴關(guān)系,將三個(gè)服務(wù)建立起正確的依賴關(guān)系。
discourse_web 依賴 postgresql10
discourse_web 依賴 redis 訪問(wèn)
訪問(wèn)
discourse_web的80端口所對(duì)應(yīng)的域名,看到歡迎頁(yè)面即可證明系統(tǒng)部署完成了。
一些踩過(guò)的坑
郵件配置
Discourse初始化安裝,是會(huì)向管理員的郵箱發(fā)送注冊(cè)郵件的,所以正確的配置郵件服務(wù)是重中之重,官方推薦的郵件服務(wù)器及配置方式參見(jiàn):
https://github.com/discourse/discourse/blob/main/docs/INSTALL-email.md
數(shù)據(jù)恢復(fù)
如果你是一個(gè)向我一樣的老版本用戶,那么將舊版本的數(shù)據(jù)導(dǎo)入到新版本的 Discourse,就會(huì)是個(gè)非常必要的操作。Discourse支持全站數(shù)據(jù)的備份與恢復(fù),但是我在實(shí)際恢復(fù)過(guò)程中遇到了很多問(wèn)題,究其原因還是我的舊版本實(shí)在是太老了。具體的解決方式,請(qǐng)參見(jiàn)下面的帖子,我得到了來(lái)自官方工程師大牛的幫助:
https://meta.discourse.org/t/restore-from-old-version-to-a-new-version-of-discourse-failed/135545
以上就是Rainbond云原生部署開源社區(qū)Discourse的配置過(guò)程的詳細(xì)內(nèi)容,更多關(guān)于Rainbond云原生部署開源社區(qū)Discourse的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Rainbond云原生部署SpringCloud應(yīng)用架構(gòu)實(shí)踐
- Rainbond上部署API?Gateway?Kong及環(huán)境配置教程
- Rancher部署配置開源Rainbond云原生應(yīng)用管理平臺(tái)
- Rainbond配置組件自動(dòng)構(gòu)建部署官方文檔講解
- Rainbond對(duì)前端項(xiàng)目Vue及React的持續(xù)部署
- Rainbond部署組件Statefulset的使用官方文檔
- Rainbond自動(dòng)部署初始化Schema的數(shù)據(jù)庫(kù)步驟教程
- Rainbond云原生快捷部署生產(chǎn)可用的Gitlab步驟詳解
相關(guān)文章
k8s?service?nodePort無(wú)法訪問(wèn)的問(wèn)題解決
今天有一個(gè)項(xiàng)目做service nodeport轉(zhuǎn)發(fā),結(jié)果設(shè)置完之后發(fā)現(xiàn)外網(wǎng)訪問(wèn)失敗,下面這篇文章主要給大家介紹了關(guān)于k8s?service?nodePort無(wú)法訪問(wèn)的問(wèn)題解決,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-01-01Rainbond使用Dockerfile構(gòu)建便捷應(yīng)用運(yùn)行流程
這篇文章主要為大家介紹了Rainbond使用Dockerfile構(gòu)建便捷應(yīng)用運(yùn)行流程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04Kubernetes實(shí)現(xiàn)CI與CD配置教程
這篇文章主要為大家介紹了基于Kubernetes實(shí)現(xiàn)CI與CD配置教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Rainbond云原生部署開源社區(qū)Discourse的配置過(guò)程
這篇文章主要為大家介紹了Rainbond云原生部署開源社區(qū)Discourse配置過(guò)程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-04-04一文解析Kubernetes使用PVC后數(shù)據(jù)丟失
這篇文章主要為大家介紹了Kubernetes使用PVC后數(shù)據(jù)丟失原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03k8s入門實(shí)戰(zhàn)deployment使用詳解
這篇文章主要為大家介紹了k8s入門實(shí)戰(zhàn)deployment使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03K8s實(shí)戰(zhàn)教程之容器和?Pods資源分配問(wèn)題
這篇文章主要介紹了K8s實(shí)戰(zhàn)教程之容器和?Pods資源分配,本篇文章通過(guò)配置集群中運(yùn)行的容器的?CPU?請(qǐng)求和限制,你可以有效利用集群上可用的?CPU?資源,通過(guò)將?Pod?CPU?請(qǐng)求保持在較低水平,可以使?Pod?更有機(jī)會(huì)被調(diào)度,需要的朋友可以參考下2022-07-07Containerd容器運(yùn)行yum安裝與二進(jìn)制安裝
這篇文章主要為大家介紹了Containerd容器運(yùn)行yum安裝與二進(jìn)制安裝,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06