任何云上基于 Docker 的 MEAN.JS 和 Mongo 副本集自动化

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

几天前注册试用 DCHQ.io Hosted PaaS 的用户问我是否有 MEAN.JS 的现成模板。所以我告诉他,我们会先为他构建一个基本模板,然后再检查 Docker Hub 上是否有官方镜像。

幸运的是,我遇到了 MEAN.JS 官方 GitHub 项目,它有一个 Dockerfile 和一个 Docker Compose 模板。所以我继续在 DCHQ 上为模板建模,并将 Node.js 容器连接到 Mongo 副本集。以下是 DCHQ 应用模型的主要优势:

  • Mongo 副本集和节点容器可以在不同的主机上运行,​​以符合关联规则。这是可能的,因为我们与 Weave 的集成以及我们在 Docker Compose 应用程序模板中引入的主机参数。
  • Mongo 主节点的容器 IP 在请求时动态解析,用于在 Node.JS 容器上配置 development.js 文件。如果计算资源与许多开发人员共享,这可以避免容器名称冲突。
  • BASH 脚本插件用于使用请求时解析的辅助节点的容器 IP 在主节点上配置 Mongo 副本集。

DCHQ 简化了应用程序的容器化,并使得通过一键部署按钮在多个主机上复制非常复杂的应用程序环境成为可能。 DCHQ 不仅自动化应用程序部署,而且还与 12 家不同的云提供商集成,以自动配置和自动扩展由分布式虚拟机组成的支持 Weave 的集群。

在此博客中,我们将介绍连接到 Mongo 副本集的基于 Docker 的 MEAN.JS 堆栈的部署自动化。

首先,我们要构建 MEAN.JS 堆栈的 Node.js 图像,方法是导航到构建部分,然后单击 + 按钮选择 Git。这里的必填字段是:

  • 具有 Dockerfile 和所有关联工件的项目的 Git URL。在这种情况下,我们使用官方 MEAN.JS 项目 ( https://github.com/meanjs/mean )
  • 用于创建图像的集群。 DCHQ 代理在集群中的其中一台主机上自动构建或创建 Docker 映像。
  • 用于推送新图像的注册表。这可以通过导航到 Manage > Repo & Cloud Provider 进行注册。用户可以在 Docker Hub 注册他/她的帐户,以便开始推送到他的私有或公共存储库。
  • 实际的存储库名称
  • 新图像的标签(例如最新)
  • (可选)可以提供一个 cron 表达式来安排从此 Git 项目创建图像。

将图像推送到您的存储库后,我们将导航到“管理”>“模板”,为 MEAN.JS 堆栈创建应用程序模板。以下是此模板中需要注意的关键事项:

  • Node.js 镜像是从我们推送到 dchq/mean 的新创建的镜像中提取的
  • 我们在 Node.js 容器中调用 BASH 脚本插件,以在请求时在 development.js 文件中添加以下行 – uri: 'mongodb://$MONGO_IP/mean-dev',
  • 您会注意到 $MONGO_IP 在请求时解析主 Mongo 节点的容器 IP,如环境变量 MONGO_IP={{mongo_rs1_srv1 |容器IP}}
  • Mongo 副本集的主节点 (mongo_rs1_srv1) 正在调用 BASH 脚本插件,以使用在请求时解析的辅助节点的容器 IP 来初始化副本集。

此外, 主机 参数允许您指定要用于容器部署的主机。在这个例子中,我们将 Node.js 的所有容器和 Mongo 副本集拆分到不同的主机上。以下是主机参数支持的值:

  • host1、host2、host3 等——在数据中心(或集群)中随机选择一个主机进行容器部署
  • <IP Address 1, IP Address 2, etc.> -- 允许用户指定用于容器部署的实际 IP 地址
  • <Hostname 1, Hostname 2, etc.> -- 允许用户指定用于容器部署的实际主机名
  • 通配符 (例如“db-*”或“app-srv-*”)——指定在主机名中使用的通配符

用户可以通过导航到自助服务库然后单击运行以将应用程序部署到用户的默认集群(或数据中心)来部署该应用程序。默认集群需要启用 Wea​​ve,以便于跨不同主机的跨容器通信。

您会注意到 Node.js(或 MEAN.JS)容器在一台主机上运行,​​而 Mongo 副本集容器在另一台主机上运行。 Mongo 副本集容器端口未在主机上公开。然而,Node.js 容器使用端口 32779 在主机上公开端口 3000。

一旦应用程序启动并运行,用户就可以监控正在运行的容器的 CPU、内存和 I/O 利用率,并执行第 2 天的操作,例如备份、使用 BASH 插件的容器更新、扩展/扩展和持续交付.

当容器或主机关闭或主机或容器的 CPU 和内存利用率超过定义的阈值时,警报和通知可用。


DCHQ.io 托管的 PaaS ( http://dchq.io ) 免费注册以获取此模板以及其他模板,如 Java、PHP、Ruby、Python 等。