千家信息网

Discourse在Rainbond上的部署是怎样的

发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,Discourse在Rainbond上的部署是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。开源社区Discour
千家信息网最后更新 2025年12月03日Discourse在Rainbond上的部署是怎样的

Discourse在Rainbond上的部署是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

开源社区Discourse在Rainbond上的部署

概述

Discourse 是一个完全开源的论坛平台。具有丰富的插件库与主题库,适用于开源社区的构建。Rainbond官方社区就是基于Discourse搭建的实际案例。

Rainbond官方社区建立之初就已经使用了Discourse,当时的版本为 1.5.4。时过境迁,为了更好的社区体验,Rainbond社区运营团队决定部署最新版本的Discourse社区,并将原社区的数据迁移到新社区中。

小编会详细介绍如何在Rainbond容器云平台上部署Discourse,以及在整个部署乃至迁移数据过程中所趟平的坑。对于有意搭建基于Discourse的社区的小伙伴,会有很大的帮助。

基于应用市场快速安装

Discourse 已经发布到了Rainbond应用市场,可以一键部署安装,即点即用。

点击安装,选择应用后稍等一会,即可访问你的Discourse了

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

  • 环境变量:

    • 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 模式。最终的拓扑,将会是下面这种情况:

  • 环境的要求 首先,我们需要有一个可以运行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_onlylocal_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 datalocal_discourse/data       latest              76e100480749        2 weeks ago         2.35GB


    这个镜像不必推送到镜像仓库,后续的步骤会继续拆分这个镜像,并进行数据自动初始化的处理。

当前构建出来的data镜像,是一个合并了 postgresql 和 redis 的镜像。这还不符合我们想要的部署方式,我要将它进行进一步的拆分。

我决定使用官方镜像来运行 postgresql 和 redis。然后对 postgresql 进行处理,使之可以自动初始化。

redis 部署

这一步比较简单,直接基于镜像部署一个标准的redis即可:

postgresql部署

基于官方的postgresql镜像做了进一步处理,使之可以自动初始化Discourse所需要的数据库。

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

关键Dockerfile部分解析:

FROM postgres:10-alpineMAINTAINER guox@goodrain.com# 下面的步骤,会将初始化数据用的sql脚本放置在指定目录下ADD sql/*.sql /docker-entrypoint-initdb.d/ADD docker-entrypoint.sh /RUN chmod +x /docker-entrypoint.shENV TZ Aisa/ShanghaiENV LANG en_US.utf8ENV PGDATA /var/lib/postgresql/dataENV PG_MAJOR 10ENV PG_VERSION 10.11VOLUME /var/lib/postgresql/dataEXPOSE 5432

自动初始化的原理参见:https://hub.docker.com/_/postgres 中的 Initialization scripts 部分。docker化的数据库,大部分都支持这种方式自动初始化,这样做的好处是,基于此镜像的容器在首次启动时,不需要其他操作,就会自动执行sql脚本完成初始化。对于Rainbond部署而言,在将这样的数据库作为应用的一部分发布到应用市场后,执行一键安装可以达到即安即用的效果。

这一步的另一个重点在于如何获取初始化用的sql脚本。这需要利用到上个步骤构建出来的数据库镜像。

将这个镜像启动为容器:

./launcher start data

这时就会启动一个已经初始化好了的data容器。我们需要将它里面的数据库 discourse 备份出来。

docker exec -ti data bashpg_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 了

构建之前,需要定义高级设置:

  • 组件部署类型 :有状态服务

  • 环境变量:

    • POSTGRES_DB=discourse

    • POSTGRES_PASSWORD=自定义的数据库密码

    • POSTGRES_USER=discourse

部署Discourse_web

利用我们已经推送好的 rainbond/discourse_web:2.4.0-beta8 镜像,来部署WEB服务部分。

点击构建之前,进行高级设置:

  • 环境变量:

    • 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支持全站数据的备份与恢复,但是我在实际恢复过程中遇到了很多问题,究其原因还是我的旧版本实在是太老了。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。

镜像 数据 服务 社区 环境 数据库 容器 服务器 配置 变量 官方 版本 应用 支持 密码 方式 地址 域名 工具 插件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 不能验证服务器的身份 星驿付云音响服务器连接失败 d带有gui的服务器 国内近十年网络安全 数据库图片缩写 什么是ctf网络安全大赛 嵌入式服务器哪个品牌好 闵行区制造软件开发成本 工业网络技术专业就业怎么样 企业邮箱软件服务器 国外服务器免费ip地址游戏 游戏服务器一直连不上 企业如何做好网络安全工作 先电云计算管理服务器的重装 全国网络技术水平大赛 工企数据库设置面板 华讯网络技术支持工资低 数据库四种类型是什么 旧苹果手机无法验证服务器身份 深圳市商和网络技术有限公司 浦东新区无线网络技术报价 部队防范手机网络安全问题 麦克町互联网科技有限公司 如何实现网络安全机制 大合网络技术公司 数据库一个表数据全部删除 杀毒时代网络安全 俄罗斯服务器 vps 银行做好开发测试环境数据库管理 石淑华网络安全技术答案
0