久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Discourse在Rainbond上的部署是怎樣的

238次閱讀
沒有評論

共計 5057 個字符,預計需要花費 13 分鐘才能閱讀完成。

Discourse 在 Rainbond 上的部署是怎樣的,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

開源社區 Discourse 在 Rainbond 上的部署概述

Discourse 是一個完全開源的論壇平臺。具有豐富的插件庫與主題庫,適用于開源社區的構建。Rainbond 官方社區就是基于 Discourse 搭建的實際案例。

Rainbond 官方社區建立之初就已經使用了 Discourse,當時的版本為 1.5.4。時過境遷,為了更好的社區體驗,Rainbond 社區運營團隊決定部署最新版本的 Discourse 社區,并將原社區的數據遷移到新社區中。

丸趣 TV 小編會詳細介紹如何在 Rainbond 容器云平臺上部署 Discourse,以及在整個部署乃至遷移數據過程中所趟平的坑。對于有意搭建基于 Discourse 的社區的小伙伴,會有很大的幫助。

基于應用市場快速安裝

Discourse 已經發布到了 Rainbond 應用市場,可以一鍵部署安裝,即點即用。

Discourse 在 Rainbond 上的部署是怎樣的

點擊安裝,選擇應用后稍等一會,即可訪問你的 Discourse 了

Discourse 在 Rainbond 上的部署是怎樣的

在正式使用前,一定要修改以下環境變量:

環境變量:

DISCOURSE_DB_PASSWORD= 你自定義的數據庫密碼

DISCOURSE_DEVELOPER_EMAILS= 管理員的郵箱地址

DISCOURSE_HOSTNAME= 為社區準備的域名,如果希望使用 Rainbond 默認為 80 端口生成的域名,這個值設置為 ${DOMAIN}

DISCOURSE_SMTP_ADDRESS= 可用的 smtp 服務器

DISCOURSE_SMTP_PORT=smtp 服務器的端口

DISCOURSE_SMTP_USER_NAME=smtp 賬戶

DISCOURSE_SMTP_PASSWORD=smtp 賬戶的密碼

修改完成后,就可以繼續注冊使用了。

Discourse 應用如何制作

在使用舊版本 Discourse 的時候,為了將其容器化,我們做了很多工作。但在當前版本,Discourse 官方已經支持并且主推容器化部署,這對于將 Discourse 部署在 Rainbond 容器云平臺非常友好。

接下來的部分,我將說明如何制作一個即點即用的 Discourse 應用。

獲取鏡像

部署的第一步,就是獲取到 Discourse 的鏡像。

區別于一般的容器化部署,Discourse 并沒有將它自己的鏡像托管于 Docker Hub,而是為用戶準備了一套完整的工具,可以讓用戶高度自定義自己需要的鏡像,這套工具就是 discourse_docker。在這套工具里,用戶可以根據其提供的模版自定義部署的方式、包含的插件等信息,并通過一條命令,快速構建對應的鏡像;也可以利用它來管理本機正在運行的 docker 化部署的 Discourse。

Discourse 部署支持 all in one 的 Standalone 模式,也支持適用于生產的 Multiple 模式。Multiple 模式的意思,就是將 Discourse 的 WEB 部分,和后端數據庫 Postgresql、緩存中間件 Redis 分離部署。

本次部署,將使用 Multiple 模式。最終的拓撲,將會是下面這種情況:

Discourse 在 Rainbond 上的部署是怎樣的

環境的要求 首先,我們需要有一個可以運行 docker 服務的環境,如果你已經安裝了 Rainbond 容器云平臺,那么集群中任何一個節點,都可以滿足你的需要。如果你還沒有安裝 Rainbond,或者根本不知道它是什么,你需要點擊了解一下。

獲取 discourse_docker

git clone https://github.com/discourse/discourse_docker.git

配置模版 在項目的根目錄中,名為 samples 的目錄下,會有我們所需要的模版文件 web_only.yml data.yml,將這兩個模版文件拷貝到項目根目錄下的 containers 目錄下。

自定義配置 Discourse 最主要的自定義在于主題(theme)和插件(plugins),其中主題可以在網站設置中配置,而插件的安裝,則需要修改上述的模版文件。

編輯 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

具體原理及操作,點擊了解一下

其他的標準配置,如郵件服務器的配置,均以環境變量的方式指定,當前可以保持默認,部署于 Rainbond 的時候,可以支持自定義環境變量進行替換。

關于 Discourse 環境變量配置的說明

關于 Rainbond 如何自定義環境變量

構建 WEB 服務鏡像 使用命令行工具 launcher 來構建 web_only 鏡像:

./launcher bootstrap web_only

構建完成后,在服務器的本地鏡像列表里,就會出現對應的鏡像:

root@localhost:~/discourse_docker# docker images | grep web_only
local_discourse/web_only latest 79a99d0d8fd1 7 days ago 2.83GB

將這個鏡像推送至 Docker hub 或者私有的鏡像倉庫備用即可,在我的部署環境里,我將其推送到了 Docker hub,具體的鏡像地址為:rainbond/discourse_web:2.4.0-beta8。

構建數據庫鏡像

使用命令行工具構建 data 鏡像

./launcher bootstrap data

構建完成后,在服務器的本地鏡像列表里,就會出現對應的鏡像:

root@iZj6chkije5xk0gfyvcrzyZ:~/discourse_docker# docker images | grep data
local_discourse/data latest 76e100480749 2 weeks ago 2.35GB

這個鏡像不必推送到鏡像倉庫,后續的步驟會繼續拆分這個鏡像,并進行數據自動初始化的處理。

當前構建出來的 data 鏡像,是一個合并了 postgresql 和 redis 的鏡像。這還不符合我們想要的部署方式,我要將它進行進一步的拆分。

我決定使用官方鏡像來運行 postgresql 和 redis。然后對 postgresql 進行處理,使之可以自動初始化。

redis 部署

這一步比較簡單,直接基于鏡像部署一個標準的 redis 即可:

Discourse 在 Rainbond 上的部署是怎樣的

postgresql 部署

基于官方的 postgresql 鏡像做了進一步處理,使之可以自動初始化 Discourse 所需要的數據庫。

部署的方式使用了基于 Dockerfile 的源碼構建,項目地址:https://github.com/dazuimao1990/pri-postgresql

關鍵 Dockerfile 部分解析:

FROM postgres:10-alpine
MAINTAINER guox@goodrain.com
#  下面的步驟,會將初始化數據用的 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

自動初始化的原理參見:https://hub.docker.com/_/postgres 中的 Initialization scripts 部分。docker 化的數據庫,大部分都支持這種方式自動初始化,這樣做的好處是,基于此鏡像的容器在首次啟動時,不需要其他操作,就會自動執行 sql 腳本完成初始化。對于 Rainbond 部署而言,在將這樣的數據庫作為應用的一部分發布到應用市場后,執行一鍵安裝可以達到即安即用的效果。

這一步的另一個重點在于如何獲取初始化用的 sql 腳本。這需要利用到上個步驟構建出來的數據庫鏡像。

將這個鏡像啟動為容器:

./launcher start data

這時就會啟動一個已經初始化好了的 data 容器。我們需要將它里面的數據庫 discourse 備份出來。

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

輸入密碼后即可開始備份,備份完成后在服務器的 /var/discourse/shared/data/ 目錄下,找到對應的 data.sql 文件。

在官方鏡像使用 data.sql 初始化的時候,發現一個小問題,官方鏡像沒有默認創建 role:postgres 故此手動在 data.sql 前面加入以下內容:

--
-- This row is added manually because when the SQL is imported manually, recived role  postgres  does not exist
-- 
CREATE USER postgres SUPERUSER;

準備就緒后,就可以在 Rainbond 部署訂制的 postgresql 了

Discourse 在 Rainbond 上的部署是怎樣的

構建之前,需要定義高級設置:

組件部署類型:有狀態服務

環境變量:

POSTGRES_DB=discourse

POSTGRES_PASSWORD= 自定義的數據庫密碼

POSTGRES_USER=discourse

部署 Discourse_web

利用我們已經推送好的 rainbond/discourse_web:2.4.0-beta8 鏡像,來部署 WEB 服務部分。

Discourse 在 Rainbond 上的部署是怎樣的

點擊構建之前,進行高級設置:

環境變量:

DISCOURSE_DB_HOST=127.0.0.1

DISCOURSE_DB_PASSWORD= 你自定義的數據庫密碼

DISCOURSE_DB_USERNAME=discourse

DISCOURSE_DEVELOPER_EMAILS= 管理員的郵箱地址

DISCOURSE_HOSTNAME= 為社區準備的域名,如果希望使用 Rainbond 默認為 80 端口生成的域名,這個值設置為 ${DOMAIN}

DISCOURSE_REDIS_HOST=127.0.0.1

DISCOURSE_SMTP_ADDRESS= 可用的 smtp 服務器

DISCOURSE_SMTP_PORT=smtp 服務器的端口

DISCOURSE_SMTP_USER_NAME=smtp 賬戶

DISCOURSE_SMTP_PASSWORD=smtp 賬戶的密碼

建立依賴

利用 Rainbond 依賴關系,將三個服務建立起正確的依賴關系。

discourse_web 依賴 postgresql10

discourse_web 依賴 redis

訪問

訪問 discourse_web 的 80 端口所對應的域名,看到歡迎頁面即可證明系統部署完成了。

一些踩過的坑郵件配置

Discourse 初始化安裝,是會向管理員的郵箱發送注冊郵件的,所以正確的配置郵件服務是重中之重,官方推薦的郵件服務器及配置方式參見:

https://github.com/discourse/discourse/blob/master/docs/INSTALL-email.md

數據恢復

如果你是一個向我一樣的老版本用戶,那么將舊版本的數據導入到新版本的 Discourse,就會是個非常必要的操作。Discourse 支持全站數據的備份與恢復,但是我在實際恢復過程中遇到了很多問題,究其原因還是我的舊版本實在是太老了。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注丸趣 TV 行業資訊頻道,感謝您對丸趣 TV 的支持。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-25發表,共計5057字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 华阴市| 大荔县| 平阴县| 仙居县| 万源市| 都匀市| 察隅县| 马关县| 甘洛县| 云南省| 开远市| 云霄县| 霍城县| 嵩明县| 三门县| 称多县| 新乡县| 托克托县| 洛南县| 扎鲁特旗| 咸宁市| 买车| 连云港市| 赤水市| 南丹县| 华亭县| 化隆| 抚松县| 绍兴市| 静乐县| 铜陵市| 南京市| 呼伦贝尔市| 辽源市| 砀山县| 阿合奇县| 乐至县| 湘乡市| 肥东县| 彝良县| 旌德县|