Skip to content

部署会众云平台(内置数据库Windows版本)

特别说明

本教程不包括Windows ServerWindows Server 的安装参考:⇲内置数据库版本(Win-Server)

注意,处理器需要包含虚拟化功能,否则会有以下报错(云服务器基本都不支持,因为云服务器已经虚拟化了):

提示

容器镜像内已内置了全部数据库驱动程序,无需单独安装数据库服务,只需简单配置后就可使用

1.安装docker

先决条件

  • Windows 10 64 位:专业版、企业版、教育版,版本号要求 22H2(内部版本 19045)或更高。
  • Windows 11 64 位:专业版、企业版、教育版,版本号要求 22H2或更高
  • 已打开 Hyper-V 和 虚拟机平台 特性
  • 已安装:WSL 2
  • 至少8GB内存

Docker-官方原文-System requirements

1.1 安装 WSL 2

Windows采用WSL 2来托管Linux子系统,此方式可以提高Docker容器的运行性能。

提示

在 WSL 版本 1 中,由于 Windows 和 Linux 之间的根本差异,Docker 引擎无法直接在 WSL 内运行,因此 Docker 团队使用 Hyper-V VM 和 LinuxKit 开发了一个替代解决方案。
由于 WSL 2 现在在具有完整系统调用容量的 Linux 内核上运行,因此 Docker 可以在 WSL 2 中完全运行。 这意味着 Linux 容器可以在没有模拟的情况下以本机方式运行,从而在 Windows 和 Linux 工具之间实现更好的性能和互操作性

WSL2-安装前设置

请提前阅读微软官方文档

后文是基于已安装WSL的前提下执行的操作。

有关WSL的安装步骤,请移步至 微软官方 最新的安装文档: ⇲安装WSL

此处也提供一份微软官方文档主要做的系统环境布置的核心点

  1. 按下组合键 "Win + R" ,输入 control 后并回车。
  2. 点击并进入 卸载程序 页面,点击左侧的 启用或关闭Window功能
  3. 在弹出页面上,勾选核心功能 Hyper-V、适用于Linux的Window子系统、虚拟机平台 ,如下图所示:
  1. 然后根据引导提示,重启 Window。

WSL2分发版本安装步骤

  1. 使用管理员运行PowerShell(右键点击Windows图标)
  1. 设置WSL版本为2(在PowerShell中执行下面的命令)
bash
wsl --set-default-version 2

注意

以上设置仅对新安装分发版本生效 wsl2 ;若存在已安装分发版,请参照以下执行检查和修改 wsl 运行版本。

假如现有已经安装的发布版 Centos-7 。 先查询发行版名,然后修改该发行版的 wsl 版本
修改命令为 wsl --set-version [Distro] 2 ,其中的 [Distro] 需要替换为实际的分发名称,例如:

bat
PS C:\Windows\system32> wsl -l -v
  NAME            STATE           VERSION
* Centos-7        Stopped         1
PS C:\Windows\system32> wsl --set-version Centos-7 2
有关与 WSL 2 关键区别的信息,请访问 https://aka.ms/wsl2

正在进行转换,这可能需要几分钟时间。
操作成功完成。

报错:不存在具有提供的名称的分发

  1. 确保您的Win10/11为专业版/企业版,版本号 >= 18917。
  2. 确保已经安装任何Linux发行版和wsl。
  3. 确保已经在 启用或关闭Windows功能 中启用 Hyper-V,适用于Linux的Windows子系统,虚拟机平台
  1. 检查WSL版本是否正确(在PowerShell中执行下面的命令)
bash
wsl -l -v

提示

输出与以下内容类似的文本时( 重点关注最右侧 VERSION 这一列 ),表示wsl版本已经设置2

注意

如果未安装任意发布版本,则会提示 当前没有已安装的发布版 ,此时可以先安装任意发布版后再行检查。
或者直接越过当前这一步检查的步骤,进入到下一步 Docker Desktop 的安装。

1.2 下载 Docker Desktop

下载地址:https://www.docker.com/products/docker-desktop/

在下载页面中,选择Windows版本下载

下载结束后,按默认配置进行安装。安装完成后需要重启系统

更改安装位置和数据存放位置

Docker Desktop 默认安装位置在 C:\Program Files\Docker\
其他数据文件的主要存储位置为

  • %USERPROFILE%\AppData\Roaming\Docker
  • %USERPROFILE%\AppData\Local\Docker

若C盘空间紧张,可自行设置安装位置,以下为操作步骤:

  1. 打开上文下载的安装文件所在的目录
  2. 在资源管理器的 路径 这一栏输入 powershell 后并回车,打开 powershell 窗口。

也可以直接按下组合键 Win + X ,选择 Windows PowerShell 打开 powershell 窗口,然后使用 cd 命令跳转到前文下载的安装文件所在的目录。

  1. 参考以下命令格式,更改内部的参数路径,然后复制到控制台中,并回车确认。
powershell
Start-Process 'Docker Desktop Installer.exe' -Wait -ArgumentList 'install', '--accept-license','--installation-dir=D:\ProgramFiles\Docker\core','--hyper-v-default-data-root=D:\ProgramFiles\Docker\hyper-v','--windows-containers-default-data-root=D:\ProgramFiles\Docker\window-container','--wsl-default-data-root=D:\ProgramFiles\Docker\wsl'

以上命令会将 Docker Desktop 安装到D盘下,具体路径为: D:\ProgramFiles\Docker\core。并将 wsl 相关的容器文件存储到 D:\ProgramFiles\Docker\wsl

命令参数释义:
固定写法: Start-Process 'Docker Desktop Installer.exe' -Wait -ArgumentList 'install', '--accept-license'
指定目录的参数在后面用 半角单引号 包裹,参数之间使用 半角逗号隔开 ,其中:
--installation-dir 指定安装路径
--hyper-v-default-data-root 指定 hyper-v 模式时的数据存放位置
--windows-containers-default-data-root 指定 Windows 容器的存放位置,
--wsl-default-data-root 指定 wsl 模式时的数据存放位置。

更多安装可用的安装指令参数参考文档: ⇲Windows | Docker Docs

提示

重启系统后,在PowerShell中执行下面的命令

bash
docker version

如果能够显示出docker的版本号,则docker配置正确

特别说明-关于 Hype-V 模式运行的Docker

如果采用WSL模式成功运行Docker,则无需查看此特别说明!!!
如果采用WSL模式成功运行Docker,则无需查看此特别说明!!!
如果采用WSL模式成功运行Docker,则无需查看此特别说明!!!

如果因为 特殊情况 无法使用 WSL 模式作为Docker运行基础,而是采用 Hyper-V 作为运行基础,则需要手动调整容器的 最大资源限制 的大小。

  • 它决定了单个容器可以分配到的最大资源。

若不调整,则后续使用可能会因为 默认资源分配过小 ,导致会众云平台的各项服务受损
此情况有可能进一步导致 数据受损难以恢复

默认分配资源的设置方式:

  1. 打开 DockerDesktop 控制面板,点击 右上角齿轮 进入设置页
  2. 左侧菜单项点击: Resources ,然后进入 Advanced 选项卡
  3. 在各个 Limit控制条 下拖动,设置单容器可分配到的 最大资源

必须设置
CPUs(核心数) >= 2
Memory(内存)>= 8GB
Disk(磁盘)>= 100GB
如下图示例:

2.运行主服务

2.1 创建配置文件

特别说明

注意:务必使用正确的json格式,并且检查文件路径及文件名是否正确,否则服务无法启动!

创建配置文件

C盘创建hzy目录,然后在hzy目录下创建conf目录

conf目录下创建server_config.json文件

然后使用文本编辑器,编辑server_config.json内容,内容说明如下

配置参数说明

bash
# 必填参数
ROOT_DOMAIN     # 根地址(浏览器地址栏真实访问使用的根地址,http开头)
AUTH_SECRET     # 服务秘钥,由会众云提供,每个私有化服务独有,无法重复使用

文件内容示例

特别说明

这里是示例参数!请替换为真实的参数,并检查JSON格式是否正确

这里是示例参数!请替换为真实的参数,并检查JSON格式是否正确

这里是示例参数!请替换为真实的参数,并检查JSON格式是否正确

json
{
  "ROOT_DOMAIN": "http://192.168.31.153:2020",
  "AUTH_SECRET": "xxxxxxxxxxxxxxxx"
}

2.2 创建文件保存路径

特别说明

以下目录必须创建,并且名字必须一致,否则无法启动服务

以下目录必须创建,并且名字必须一致,否则无法启动服务

以下目录必须创建,并且名字必须一致,否则无法启动服务

hzy目录下创建data目录

data目录下创建以下目录

目录名目录说明
backup保存备份文件
excel保存excel文件
file保存系统下所有上传文件、图片
mongodb【重要】mongodb数据库文件(可以定时进行备份)
redis【重要】redis数据库文件(可以定时进行备份)

mongodb目录下创建以下目录(采用3实例副本集部署方式,提高数据安全性)

目录名目录说明
data1数据库实例1的全量数据文件
data2数据库实例2的全量数据文件
data3数据库实例3的全量数据文件
log1数据库实例1的日志文件
log2数据库实例2的日志文件
log3数据库实例3的日志文件

2.3 运行会众云平台

如果需要增加https访问,可以添加:https自动签发插件

运行主服务

点击查看所有已发布版本,并下载软件镜像(请下载内置数据库版本

powershell
# 注意:服务启动后默认映射端口2020,可以直接访问此端口,也可以配置nginx反向代理
# 注意:-v C:\hzy\conf:/root/conf   C:\hzy\conf,是上面server_config.json所在目录
# 注意:-v C:\hzy\data:/root/upload   C:\hzy\data,是上面backup、excel、file等所在目录
# 注意:hzy-release:db.x86.[版本号],查看已发布版本:https://hub.docker.com/r/hzy0code/hzy-release/tags
docker run --privileged -e TZ=Asia/Shanghai -itd --restart always -p 2020:2020 -p 20000:20000 -v C:\hzy\conf:/root/conf -v C:\hzy\data:/root/upload --name hzy-main registry.cn-hangzhou.aliyuncs.com/hzy0code/hzy-release:db.x86.[版本号]

提示

如果是在 wsl终端 与Docker交互,则应该键入此条shell:

shell
# 修改:将 C:\hzy\conf 替换为 /mnt/c/hzy/conf
# 修改:将 C:\hzy\data 替换为 /mnt/c/hzy/data
docker run --privileged -e TZ=Asia/Shanghai -itd --restart always -p 2020:2020 -p 20000:20000 -v /mnt/c/hzy/conf:/root/conf -v /mnt/c/hzy/data:/root/upload --name hzy-main registry.cn-hangzhou.aliyuncs.com/hzy0code/hzy-release:db.x86.[版本号]

提示

Window 下调整防火墙策略不会导致 Docker 容器失效,若操作了相关内容使容器失效,可以检查是否禁用了 Docker 应用的通行规则。

部署完成后,访问系统说明!!!必看!

部署完成后,访问系统说明!!!必看!

部署完成后,访问系统说明!!!必看!


部署完成后,系统的访问入口为:根域名/apaas

示例:http://192.168.0.1:2020/apaas


部署完成后,系统的相关配置及操作:点击查看

2.4 升级会众云平台

特别说明

升级服务不会导致数据丢失,所有的数据都保存于本地磁盘中,docker容器中不保存任何数据

bash
# 查看正在运行的所有容器
docker ps
# 停止会众云容器服务
docker stop [容器id]
# 删除会众云容器服务
docker rm [容器id]
# 查看所有的镜像,并删除旧版本的会众云平台镜像(此步骤可以省略)
docker images
docker rmi [历史镜像id]
# 使用新的版本号,重新运行主服务
docker run --privileged -e TZ=Asia/Shanghai -itd --restart always -p 2020:2020 -p 20000:20000 -v C:\hzy\conf:/root/conf -v C:\hzy\data:/root/upload --name hzy-main registry.cn-hangzhou.aliyuncs.com/hzy0code/hzy-release:db.x86.[版本号]

2.4 Docker其他指令说明

此处提供一部分快速的 Docker 操作指令参考,以供快速查阅

提示

此处均是基于 已存在会众云服务容器 的前提下,才可运行的指令。

并不包含从0到1的创建指令,如需创建可运行服务,请参阅 2.3 运行会众云平台

作用指令参考
重启容器 / 重启会众云服务docker restart hzy-main
停止容器 / 停止会众云服务docker stop hzy-main
启动容器 / 启动会众云服务docker start hzy-main
删除容器 / 删除会众云服务docker rm hzy-main

3. 其他配置说明(非安装步骤)

特别说明

以下步骤不是安装流程,是额外配置说明,仅需要时才进行配置
以下步骤不是安装流程,是额外配置说明,仅需要时才进行配置
以下步骤不是安装流程,是额外配置说明,仅需要时才进行配置

3.1 nginx反向代理

提示

可以使用:自动证书-HTTPS,进行自动https证书签发、nginx代理、域名校验

3.2 docker-compose 配置

当需要使用docker-compose对容器进行统一管理时,使用使用以下yml配置

注意

image为示例镜像名,需要替换为真实的镜像名

yml
version: '3'
services:
  hzy-release:
    image: hzy0code/hzy-release:db.x86.6.0.0
    privileged: true
    environment:
      - TZ=Asia/Shanghai
    restart: always
    ports:
      - 20000:20000
      - 2020:2020
    volumes:
      - /etc/hzy:/root/conf
      - /var/hzy:/root/upload
    tty: true

3.3 配置数据库角色

当前版本内置的mongodb数据库不包含数据库角色,添加数据库角色的步骤如下


1. 进入容器内部

bash
# 查看当前容器ID
docker ps | grep hzy0code

# 进入容器内部
docker exec -it [容器id] /bin/bash

2. 连接数据库并创建角色

bash
# 连接数据库
source .bash_profile
mongosh --host apaas/localhost:17017,localhost:17018,localhost:17019

# 创建角色(默认user:hzy,默认pwd:0codepaas.com,可以修改)
# 注意:数据库角色必须创建!以下5个数据库都需要创建相同角色,以及使用相同的账号密码!
# 注意:数据库角色必须创建!以下5个数据库都需要创建相同角色,以及使用相同的账号密码!
# 注意:数据库角色必须创建!以下5个数据库都需要创建相同角色,以及使用相同的账号密码!
use admin
db.createUser({user: "hzy", pwd: "0codepaas.com", roles: ["root"]})
use data
db.createUser({user: "hzy", pwd: "0codepaas.com", roles: [{role: "dbOwner", db: "data"}]})
use main
db.createUser({user: "hzy", pwd: "0codepaas.com", roles: [{role: "dbOwner", db: "main"}]})
use app
db.createUser({user: "hzy", pwd: "0codepaas.com", roles: [{role: "dbOwner", db: "app"}]})
use common
db.createUser({user: "hzy", pwd: "0codepaas.com", roles: [{role: "dbOwner", db: "common"}]})

3. 启用mongodb安全策略

创建keyFile文件(副本集需要使用)

bash
cd /usr/local/mongodb/
openssl rand -base64 -out ./keyFile 756
chmod 400 ./keyFile # 必须限制文件权限为当前用户只读

修改:mongod1.conf、mongod2.conf、mongod3.conf,并启用以下配置

bash
#安全
security:
  #【默认值: 无】如果是副本集,那么必须配置此值(openssl rand -base64 756 -out ./keyFile,chmod 400 ./keyFile)
  keyFile: /usr/local/mongodb/keyFile
  #【默认值: disabled】是否启用基于角色的访问控制(RBAC, role-based access control);enabled:启用
  authorization: enabled

4. 重启mongodb实例

bash
# 查看所有mongodb实例
ps -ef | grep mongod

# 关闭所有实例
kill [进程ID]

# 重启mongodb进程
mongod -f /usr/local/mongodb/mongod1.conf
mongod -f /usr/local/mongodb/mongod2.conf
mongod -f /usr/local/mongodb/mongod3.conf

5. 重启服务

bash
# 修改 server_config.json 文件,并在最外层增加以下配置(需要替换:账号/密码、IP地址)
"DB_INSTANCE_URL": {
  "00001": "mongodb://hzy:0codepaas.com@192.168.31.153:17017,192.168.31.153:17018,192.168.31.153:17019/?replicaSet=apaas"
}

# 修改完成后,重启docker服务
docker restart [容器id]

3.4. 连接mongoDB数据库

当需要连接数据库,并对数据库进行数据操作时,可以按以下步骤进行

特别说明

  • 如果对mongoDB数据库不了解,请勿轻易连接数据库并执行操作,防止数据损坏!

  • 为了数据安全,容器已增加安全策略禁止外部访问,取消策略一定会导致数据库被频繁攻击!

  • 请您操作前做好数据备份,一旦出现问题需要自行承担!

  • 请您操作前做好数据备份,一旦出现问题需要自行承担!

  • 请您操作前做好数据备份,一旦出现问题需要自行承担!

注意:这里需要先获得独立数据库授权,否则将授权失败无法访问
注意:这里需要先获得独立数据库授权,否则将授权失败无法访问
注意:这里需要先获得独立数据库授权,否则将授权失败无法访问


1. 使用host网络模式,重启docker服务

提示

默认的网络模式下,只会暴露指定端口。当需要连接数据库时,需要将网络模式改为host

删除docker服务

使用以下命令重启服务

bash
docker run  --privileged  -e TZ=Asia/Shanghai -itd --restart always --network=host -v /etc/hzy:/root/conf -v /var/hzy:/root/upload hzy0code/hzy-release:db.[平台架构].[版本号]

2. 修改mongodb集群模式

提示

默认mongodb集群不允许外部访问,如果需要外部访问需要在容器内连接数据库并修改集群

特别说明

如果将数据库暴露于公网上,几乎肯定会被攻击而导致所有数据丢失!请您明白以下操作的危险性
如果将数据库暴露于公网上,几乎肯定会被攻击而导致所有数据丢失!请您明白以下操作的危险性
如果将数据库暴露于公网上,几乎肯定会被攻击而导致所有数据丢失!请您明白以下操作的危险性

bash
# 进入容器内部并连接数据库
source .bash_profile
mongosh --host apaas/localhost:17017,localhost:17018,localhost:17019

# 将IP修改为真实的IP
config={_id:"apaas",members:[{_id:0,host:"IP:17017"},{_id:1,host:"IP:17018"},{_id:2,host:"IP:17019"}]}
rs.reconfig(config)
rs.status()

3. 连接数据库

数据库的连接地址为(需要替换为真实的IP地址):mongodb://IP:17017,IP:17018,IP:17019/?replicaSet=apaas

注意

如果设置过数据库的账号密码,则需要增加账号密码到连接地址上

例如:

mongodb://user:password@IP:17017,IP:17018,IP:17019/?replicaSet=apaas

4. 表单数据说明

连接数据库成功后,所有的数据都位于data数据库,data数据库中每一个应用都是一个单独的表,应用的数据都存在对应的表中

提示

例如,当应用的ID为arTQBeyM5o05S,则保存应用数据的表单为form_row_arTQBeyM5o05S

应用ID可以通过地址栏获取(地址栏第一个ID就是应用ID)。示例:

表单用于保存应用数据,表单的数据结构如下

字段id字段名字段类型字段说明
rowId记录id字符串【必填】记录的唯一ID
formId表单id字符串【必填】当前记录归属于那张表单
isDevelop是否是测试环境布尔【必填】用于标记此记录是否属于测试环境
controlId控件ID字符串控件的ID,保存的对应控件的值。例如:控件ID为BeyMarTQ5o05S,控件值为"这里是控件值",则字段为"BeyMarTQ5o05S": "这里是控件值"