Skip to content

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

特别说明

  1. ,不支持云服务器,因为云服务不支持虚拟化!
  2. ,虚拟机安装存在严重性能问题,极大概率会导致数据损坏
  3. WSL 2部署的服务 IO 性能下降约 100 倍,独立数据库版本无此影响(Windows 本身缺陷)
  4. 处理器需要包含虚拟化功能,否则会有以下报错

如非必要,强烈推荐使用Linux部署(部署简单、运行稳定、性能更好),其次可以使用windows server 独立数据库部署方式(部署复杂,但没有性能问题)

提示

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

1.安装docker

特别说明

在上一个安装成功之前,不可以执行后续步骤!!!

在上一个安装成功之前,不可以执行后续步骤!!!

在上一个安装成功之前,不可以执行后续步骤!!!

Window-Server 对操作的先后顺序极为敏感!!! 为避免麻烦,请勿跳步骤执行安装部署!!

推荐条件

  • Window Server 2025

注意1:低版本 Windows Server 安装极易失败,处理过于繁琐,即便成功安装也可能有兼容性问题,遂不在本文说明范围内

  • 具备 Hyper-V 和 Containers 特性
  • 至少8GB内存

Docker-官方原文-System requirements

1.1.开启服务器特性

提示

以下两项特性均需要以 管理员身份 启动 Powershell 控制窗口来完成。

可以直接 鼠标右键 单击左下角的 Win 图标,或者按下快捷键 "Win + X",弹出如下弹窗中,选择 Windows PowerShell(管理员)

Hyper-V 特性

以管理员身份打开 Powershell 控制台。

然后输入以下命令,并回车

powershell
Install-WindowsFeature -Name Hyper-V

Containers 特性

以管理员身份打开 Powershell 控制台。

然后输入以下命令,并回车

powershell
Install-WindowsFeature -Name containers

确认以上两项安装完毕后, 重启服务器

提示

以上两项特性安装时,均会有类似控制台输出

等待它流程走完即可。这个过程可能比较 耗时

1.2.安装 WSL-2

安装方式

由于存在不可控的网络问题,以及其他的类似的现场环境问题,会导致便捷安装失败,所以下文分别提供了 自动安装手动安装 两种方式,任选其一即可。

1.2.1 自动安装

注意

为了后续 Docker Desktop 的安装顺利,此步是必要的。

参考文档来源:⇲Windows Server 安装 WSL

Windows Server 2019(版本 1709+)或更高。
强烈推荐 使用 Window Server 2025 ,低版本安装时会出现兼容性问题,失败概率较高。

管理员身份 打开 Powershell 控制台。

然后输入以下命令,并回车:

powershell
wsl --install

提示

等待流程走完即可

等待流程走完,然后重启服务器,使 wsl 生效:

重启后,打开 Powershell 控制台,输入如下命令,若显示与下图类似,则为安装成功

powsershell
wsl -l -v

wsl --install 多次失败

如果上述命令的安装反复失败,无法成功,有如下原因:

  1. 系统版本太低wsl --install 的最低支持版本是 window-server 2022
  • 此情况如果不能接受 重装系统 的话,那便只能 ⇲手动安装
  1. 系统 内核版本太低版本1709 是最低支持版本,但建议是高于 1903 ,可在 设置->系统->系统信息/关于 中查阅到当前系统的内部版本)
  • 此情况直接在 系统更新 界面检查更新即可。确保服务器网络环境通畅
  1. 系统 网络环境太差 / 特殊原因无法访问微软官方的部分链接
  • 如果无法处理/不知道如何处理网络环境的改善问题,则只能选择 ⇲手动安装
  1. 其他情况

然后执行以下命令确保 wsl版本和内核 为最新版:

powsershell
wsl --update

警告

此步骤执行时,会出现和 wsl --install 相似的日志信息,需要耐心等待 进度条 走完,确保更新完成后,再执行后续流程。

否则有极大概率使后续安装失败,届时再来修复将会非常繁琐

网络原因导致更新失败参考例图:

若遇到类似情况,建议直接跳到 ⇲手动安装

1.2.2 手动安装

参考官方文档

以下两篇均为微软官方文档,分别对应不同的控制端操作,倘若后续步骤不符合实际服务器环境,可以点击下方链接,前往微软原文对比步骤差异。

命令拆分,逐步安装:⇲旧版本Window的手动安装步骤

命令整合,一键安装:⇲在Windows Server 上安装

注意:如果一键安装出现问题,建议回到前一篇文章采用分步骤方式安装。

注意

后续手动安装均采用 第一篇文档 作为参考,一方面是其普及范围更广,另一方面是分步执行便于排查。

安装 WSL1:

首先按下组合键 Win + X ,选择 Windows PowerShell(管理员) ,打开一个控制台,并输入以下命令:

powershell
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

升级 WSL1 到 WSL2

WSL 2 运行要求

升级之前,需要先检查系统版本信息。

对于 x86 架构:发布版本 >= 1903;内部版本 >= 18362.1049
对于 arm 架构:发布版本 >= 2004;内部版本 >= 19041

这一点和 Window10/11 的要求比较相似。
若不清楚体系架构,可以按下组合键 Win + X ,在菜单中找到 系统 选项,打开 关于系统 界面后可以找到当前系统的体系结构。

依然以管理员身份打开 PowerShell 控制台,输入以下命令并回车:

powershell
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

下载 WSL 内核安装包:

下载后双击打开,自动安装即可。

提示

此处为微软官方提供的最旧版本的安装文件,这是官方为了确保 WSL 的兼容性安装。

建议安装以上内容后,确认无误后,再去微软的 WSL2 仓库下载最新的安装包再安装一遍。

下载带有 Latest 标签,最新的安装包即可。

特别说明

不要下载 Pre-Release 标签的安装包!!!
不要下载 Pre-Release 标签的安装包!!!
不要下载 Pre-Release 标签的安装包!!!

【可选操作】预设分发版本默认使用 WSL2

然后提前预设后续安装的 wsl 分发版本均为 WSL2

powershell
wsl --ser-default-version 2

至此,若未出现明显错误或异常,WSL2 的基础运行环境便布置完毕。

1.3.下载 Docker Desktop

提示

因为 Docker Desktop 实则为基于 hyper-V 和 Container 特性,并利用 wsl 直连底层,所以高版本的 Windows-Server 也是可以安装 Docker Desktop 的,这样可以极大程度减少 Docker 的安装流程。

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

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

提示

下载结束后,按默认配置进行安装。安装完成后需要注销系统,重新登录。

注销重登录系统后,在PowerShell中执行下面的命令

bash
docker version

如果能够显示出docker的版本号,并且如下图红框所示为 linux 前缀,则表明为 Linux 内核,表明 Docker 安装成功。

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

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

特别说明一

若在启动 Dockers Desktop 并出现下图所示警告:

说明 WSL内核 过于老旧,需要在控制台中执行 wsl --update 进行更新。

如果此处因为网络原因更新反复失败,则需要 手动 去微软WSL仓库下载最新的 内核安装包 ,执行安装和修复。
下载带有 Latest 标签,最新的安装包即可。微软WSL内核仓库: ⇲github-微软WSL内核仓库
注意:不要下载 Pre-release 标签的安装包

特别说明二-关于 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(磁盘)>= 500GB
如下图示例:

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.运行会众云平台

如果需要增加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 --ulimit nofile=200000:200000 --ulimit nproc=200000:200000 --name hzy-main swr.cn-southwest-2.myhuaweicloud.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 --ulimit nofile=200000:200000 --ulimit nproc=200000:200000 --name hzy-main swr.cn-southwest-2.myhuaweicloud.com/hzy0code/hzy-release:db.x86.[版本号]

提示

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

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


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

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


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

2.3.升级会众云平台

特别说明

升级服务不会导致数据丢失,所有的数据都保存于本地磁盘中,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 --ulimit nofile=200000:200000 --ulimit nproc=200000:200000 --name hzy-main swr.cn-southwest-2.myhuaweicloud.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反向代理

提示

可以使用:部署域名代理工具,进行nginx代理、域名校验

3.2.docker-compose 配置

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

注意

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

yml
version: '3'
services:
  hzy-release:
    image: hzy0code/hzy-release:db.x86.6.0.0
    container_name: hzy-main
    privileged: true
    environment:
      - TZ=Asia/Shanghai
    restart: always
    ports:
      - 20000:20000
      - 2020:2020
    volumes:
      - /etc/hzy:/root/conf
      - /var/hzy:/root/upload
    ulimits:
      nofile:
        soft: 200000
        hard: 200000
      nproc:
        soft: 200000
        hard: 200000

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 --ulimit nofile=200000:200000 --ulimit nproc=200000:200000 hzy0code/hzy-release:db.[平台架构].[版本号]

2. 修改mongodb集群模式

提示

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

特别说明

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

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

# 请将将IP修改为真实的IP(注意:填写内网IP,不要填写公网的IP,否则会被攻击)
# 单机部署,只需要添加一个节点
config={_id:"apaas",members:[{_id:0,host:"IP:17017"}]}
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": "这里是控件值"