Rainbond云原生部署开源社区Discourse的配置过程

目录
  • 概述
  • 基于应用市场快速安装
  • Discourse应用如何制作
    • 获取镜像
      • 环境的要求
      • 获取discourse_docker
      • 配置模版
      • 自定义配置
      • 构建数据库镜像
  • redis 部署
  • postgresql部署
  • 部署Discourse_web
  • 建立依赖
    • 访问
  • 一些踩过的坑
    • 邮件配置
    • 数据恢复

概述

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

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

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

了解更多有关Discourse的信息:

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_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即可:

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 了

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

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

环境变量:

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/main/docs/INSTALL-email.md

数据恢复

如果你是一个向我一样的老版本用户,那么将旧版本的数据导入到新版本的 Discourse,就会是个非常必要的操作。Discourse支持全站数据的备份与恢复,但是我在实际恢复过程中遇到了很多问题,究其原因还是我的旧版本实在是太老了。具体的解决方式,请参见下面的帖子,我得到了来自官方工程师大牛的帮助:

https://meta.discourse.org/t/restore-from-old-version-to-a-new-version-of-discourse-failed/135545

以上就是Rainbond云原生部署开源社区Discourse的配置过程的详细内容,更多关于Rainbond云原生部署开源社区Discourse的资料请关注我们其它相关文章!

(0)

相关推荐

  • Rainbond对前端项目Vue及React的持续部署

    目录 前言: 部署前检查 1.1 添加 nodestatic.json 文件 1.2 添加 web.conf 文件 1.3 源码部署Vue项目 常见问题 前言: 以往我们在部署 Vue.React 前端项目有几种方法: 项目打包好之后生成dist目录,将其放入nginx中,并进行相应的访问配置. 将项目打包好放入tomcat中. 将项目打包好的dist目录中的static和index.html文件放入springboot项目的resources目录下 直接运行一个前端server,类似本地开发那

  • Rainbond云原生部署SpringCloud应用架构实践

    目录 示例项目详情 模块说明: 部署环境说明: 模块构建 部署 Mysql 部署 Redis 部署 pig-ui 依赖与端口梳理 最终成果 示例项目详情 本文档以Pig 快速开发框架为例,演示如何在Rainbond上部署一套完整的Spring Cloud项目. Pig Microservice Architecture V2.1.0: 基于 Spring Cloud Finchley .Spring Security OAuth2 的RBAC权限管理系统 基于数据驱动视图的理念封装 Elemen

  • Rainbond配置组件自动构建部署官方文档讲解

    目录 前言 前提条件 基于源代码操作流程 1.开启组件 Git-Webhook 2.配置代码仓库 基于镜像仓库操作流程 1.开启镜像仓库 Webhook 自动构建 2.Tag 触发自动修改策略 3.配置镜像仓库 API 触发自动构建 前言 通过自动构建的功能,可以实现代码或镜像提交后组件自动触发构建和部署,Rainbond 提供了基于代码仓库 Webhooks.镜像仓库 Webhooks 和自定义 API 三种方式触发组件自动部署.自动构建的功能可以辅助开发者便捷的实现敏捷开发. 前提条件 组件

  • Rancher部署配置开源Rainbond云原生应用管理平台

    目录 前言 前提条件 开始安装 添加 Rainbond Operator 到应用商店 安装 Rainbond Operator 访问 Rainbond 安装 UI,完善集群配置 基于 Rancher 的 Rainbond 运维参考 查看 Rainbond 各组件运行状态与日志 按需扩容 Rainbond 各组件 Rancher用户使用Rainbond优势 参考视频 常见问题 前言 本文适用于正在使用 Rancher 或对 Rancher 有所了解的用户 Rancher,Kubernetes 生态

  • Rainbond上部署API Gateway Kong及环境配置教程

    目录 什么是Kong 从应用市场快速安装 注意事项 配置Kong 环境变量 注入Nginx配置 注入单个Nginx配置 通过注入的Nginx指令包含文件 Kong应用怎么制作 数据库自动初始化 部署Kong 部署Konga 发布应用 什么是Kong Kong是一个可扩展的开源API平台(也称为API网关,API中间件或微服务服务网格).Kong最初是由Kong Inc.(以前称为Mashape)实现的,用于为其API Marketplace维护.管理和扩展超过15,000个微服务,这些微服务每月

  • Rainbond自动部署初始化Schema的数据库步骤教程

    目录 为什么使用Rainbond? Schema初始化在传统模式中一般有两种方案: 目录结构 Dockerfile文件 为什么使用Rainbond? 我们使用容器的方式部署数据库组件,特别是企业有大量的项目开发业务的,部署的开发.测试数据库组件较多时.经常会遇到以下问题: 业务需要使用数据库,但部署完数据库后,需要在数据库中执行创建schema的操作或者一些初始化数据的创建. 开发测试多套部署环境,需要多次重复1的步骤. 项目比较多,时间久了项目需要的数据库Schema不清楚. 项目交付时数据库

  • Rainbond部署组件Statefulset的使用官方文档

    目录 前言 组件部署类型 服务的“状态” 处理服务的 “状态” 前言 对于kubernetes老玩家而言,StatefulSet这种资源类型并不陌生.对于很多有状态服务而言,都可以使用 StatefulSet 这种资源类型来部署.那么问题来了:挖掘机技术哪家强?额,不对. 如何在 Rainbond 使用 StatefulSet 资源类型来部署服务呢? 组件部署类型 通过在服务组件的其他设置中,更改 组件部署类型 即可选择使用 StatefulSet 资源类型部署服务,操作之前要注意以下几点: 组

  • Rainbond云原生部署开源社区Discourse的配置过程

    目录 概述 基于应用市场快速安装 Discourse应用如何制作 获取镜像 环境的要求 获取discourse_docker 配置模版 自定义配置 构建数据库镜像 redis 部署 postgresql部署 部署Discourse_web 建立依赖 访问 一些踩过的坑 邮件配置 数据恢复 概述 Discourse 是一个完全开源的论坛平台.具有丰富的插件库与主题库,适用于开源社区的构建.Rainbond官方社区就是基于Discourse搭建的实际案例. Rainbond官方社区建立之初就已经使用

  • Rainbond云原生快捷部署生产可用的Gitlab步骤详解

    目录 Gitlab简介 准备工作 部署步骤 部署Postgresql组件 部署Redis组件 部署Gitlab-Server组件 配置网关访问策略 FAQ Gitlab简介 GitLab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目.它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释.同时Gitlab集成了一系列的CI功能.不得不说,Gitlab在企业中是的使用率非常高. Rainbond非常推荐

  • 云原生技术kubernetes(K8S)简介

    目录 01 kubernetes是什么? 02 kubernetes和Compost+Swarm之间的区别 03 一点总结 今天我们看看kubernetes技术的介绍,最近在极客时间上看张磊老师的深入kubernetes技术,讲的非常好,有兴趣的同学可以去收听一下,对于理解kubernetes技术非常有帮助,这里我会按照自己的进度,分享一下学习的笔记. 今天站的角度比较高,概念性质的东西会多一点. 01 kubernetes是什么? 曾经我认为这个问题很好回答,直到不断的去理解kubernete

  • 云原生技术kubernetes调度单位pod的使用详解

    k8s中的最小调度单位---pod 之前的文章中,我们对k8s能够解决的问题做了简单介绍,简单来说,它解决的问题是容器的编排与调度,它的核心价值在于:运行在大规模集群的任务之间,实际上存在着各种各样的关系,这些关系的处理,才是任务编排和系统管理最困难的地方,k8s就是为了这个问题而生的. 这句话比较难理解,我们从已有的知识入手,抽丝剥茧,慢慢理解它.我们已经知道,容器的本质是一个进程,它包含三个部分: 如果说容器是云环境的一个进程,那么你可以将k8s理解成云环境中的一个操作系统. 在一个操作系统

  • Quarkus云原生开篇java框架简介

    目录 前言 什么是quarkus? 为什么用quarkus? 专为开发人员而设计 容器优先 命令式和响应式代码 结语 前言 Quarkus 是小红帽开源的专门针对云容器环境优化的云原生java框架,目前已迭代到1.6.0版本,已完成了大部分的框架库的集成扩展,为了让你低成本迁移到Quarkus来,它兼容主流的框架开发模式api,如spring web. Quarkus已具备企业级应用开发能力.而且未来容器云肯定是主流了,可以预见,未来的软件都是运行在k8s这样的容器集群里.而容器环境需要应用具备

  • 煮饺子论云原生docker与kubernetes之间的关系

    目录 前言 一.周末煮饺子聊到容器问题 二.说说docker与煮饺子的容器 三.聊聊集群煮饺子(k8s) 前言 云原生的概念最近非常火爆,企业落地云原生的愿望也越发强烈.看过很多关于云原生的文章,要么云山雾罩,要么曲高和寡. 所以笔者就有了写<大话云原生>系列文章的想法,期望用最通俗.简单的语言说明白云原生生态系统内的组成及应用关系.那么,开始吧,这是第一篇! 这真的是一篇讲架构技术的文章,不是小说!建议您看下去! 一.周末煮饺子聊到容器问题 周末和老婆一起包了顿饺子,“老公,我去买瓶醋,你把

  • 从小饭馆客流量变大论云原生负载均衡

    目录 一.前言 二.从路边摊说起 三.开饭馆与负载均衡 说说客户端负载均衡与服务端负载均衡 利与弊: 四.饭后沟通 一.前言 这是<大话云原生>系列的第二篇,第一篇<煮饺子与docker.kubernetes之间的关系>推出之后受到大家的欢迎,很多朋友联系到我给我加油打气,还得到了CSDN头部博主哪吒大佬的支持,感谢!我会继续写下去! 书接上回介绍了<煮饺子与docker.kubernetes之间的关系>之后,小娜同学(我老婆)问:为什么不把服务统一开发成一个应用?搞什

  • 前端云原生之微信小程序云服务配置指南

    目录 前言 创建使用云开发项目 搭建云环境 测试云服务 1. 获取openid(上传本地login云函数) 2. 自定义sum函数并创建部署 3. 上传图片 4. 前端操作数据库 5. 即时通信demo 总结 前言 如今云原生已经非常火热,很多伙伴说我们前端领域涉及到云原生么?当然了!今天就来为大家介绍我们最直白的涉及到的云原生,就是我们微信小程序开发中的云函数云存储 创建使用云开发项目 将AppID填入 选择小程序云开发 创建即可 成功后会为我们呈现一个实例 刚刚创建的云服务项目中 测试器中有

随机推荐