Appearance
部署会众云平台(内置数据库Linux版本)
提示
容器镜像内已内置了全部数据库驱动程序,无需单独安装数据库服务,只需简单配置后就可使用
特别说明
服务器的CPU必须支持AVX
指令集!使用命令cat /proc/cpuinfo | grep avx
如果有输出则支持
若服务器有其他容器软件,例如 Podman
,会与会众云平台以来的 Docker
冲突,从而导致安装失败,请在安装前确认系统中没有其他容器软件
部署须知
1、推荐:阿里云、天翼云(联系会众云购买服务,会有更低的折扣以及优惠券)
2、服务器推荐配置:2核CPU,8G内存(如果后期不够可以弹性拓展)
3、磁盘需要SSD固态硬盘(数据库需要较高的磁盘性能),硬盘大小根据实际用量确定(初始推荐100GB)
4、推荐Linux操作系统:rocky 8.0及以上
,almalinux 8.0及以上
5、创建Linux服务器时,强烈建议只创建一个系统盘,不单独创建数据盘!(方便备份及恢复)
6、华为云
请注意:部分型号不支持 avx 指令,购买前需要先确定
阿里云推荐配置(性价比更高)
- 注意:以下配置为最低配置要求,需要根据实际业务场景需求进行选择
内存 & CPU
经济型价格低,但是存在资源被其他用户挤占的情况(存储增强型 或 通用型,会有更高性能表现)

硬盘 & 带宽
带宽建议按量付费,一般来说流量费不会很高,并且可以随时调整
建议开启 系统盘快照策略,可以快速恢复数据,提高数据安全

天翼云推荐配置
- 注意:以下配置为最低配置要求,需要根据实际业务场景需求进行选择
服务器区域推荐:西南1
内存 & CPU

硬盘 & 操作系统

带宽

一键部署升级脚本
会众云提供了一键部署升级脚本,一行命令就可以完成:服务部署
,服务升级
,变更配置
!
使用脚本可以保证服务配置的准确性,不会出现由于配置不当导致的错误
特别说明
1、部署完成后,系统的访问入口
访问方式
访问主服务
系统核心功能入口
地址:http://192.168.0.1:2020/apaas/ (ip替换为真实的服务器ip)

访问后台管理(必须使用初始管理员访问)
可以配置企业形象、组织成员数量等
地址:http://192.168.0.1:2020/apaas/admin/ (ip替换为真实的服务器ip)

2、多组织版本设置组织人数
1. 下载脚本
自动脚本使用前提
- Linux系统,且为
x86
架构 - 具备
yum包管理
环境
复制以下命令到命令行,点击回车键,即可完成自动化脚本下载(脚本名为:hzy)
bash
curl https://hzy-apaas.oss-cn-chengdu.aliyuncs.com/private_tools/hzy -o hzy && chmod +x hzy
执行以下命令可以查看脚本使用说明
bash
./hzy -h
2. 使用脚本部署
服务
当需要将本平台部署到新的服务器
时,可以复制以下命令到文本工具中,将参数值修改为真实的值后,复制到命令行即可自动安装
bash
./hzy deploy -VERSION db.[架构].[版本号] -ROOT_DOMAIN http://ip:2020 -AUTH_SECRET xxxxxxxxxxxxxxxxxxxxxxxxxxx
注意
以上为安装命令的格式,若需使用,则需要替换里边的参数。以下为举例说明:
假定条件:
- 版本号为:db.x86.7.9.2(注意:这里需要替换为真实的版本号。点击查看已发布版本)
- 根域名地址为:http://192.168.0.1:2020(注意:系统默认开放访问的端口为
2020
) - 授权秘钥为:xxxxxxxxxxxxxxxxxxxxxxxxxxx
举例条件下的部署命令:
bash
./hzy deploy -VERSION db.x86.7.9.2 -ROOT_DOMAIN http://192.168.0.1:2020 -AUTH_SECRET xxxxxxxxxxxxxxxxxxxxxxxxxxx
3. 使用脚本升级
服务
当需要将本平台升级为新版本
时,可以复制以下命令到文本工具中,将参数值修改为真实的值后,复制到命令行即可自动升级版本
bash
./hzy upgrade -VERSION db.[架构].[版本号]
注意
以上为升级命令的格式。以下为举例:
假定条件如下:
- 升级版本号为:db.x86.7.9.2
bash
./hzy upgrade -VERSION db.x86.7.9.2
请替换为真实的参数后再进行命令行升级!
4. 使用脚本重启
服务
当需要重启本平台时,可以使用以下脚本命令
bash
./hzy restart
手动部署升级服务
特别说明
以下内容为手动部署
流程,手动部署有一定门槛要求,强烈推荐一键部署升级脚本
进行部署。
1. 创建配置文件
注意
注意:务必使用正确的json格式,并且检查文件路径及文件名是否正确,否则服务无法启动!
创建配置文件
bash
# 创建配置文件步骤如下
mkdir /etc/hzy
cd /etc/hzy
vim 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. 创建文件保存路径
特别说明
以下目录必须创建,并且名字必须一致,否则无法启动服务
以下目录必须创建,并且名字必须一致,否则无法启动服务
以下目录必须创建,并且名字必须一致,否则无法启动服务
bash
mkdir /var/hzy
cd /var/hzy
# backup 保存备份文件
# excel 保存excel文件
# file 保存系统下所有上传文件、图片
# mongodb 【重要】mongodb数据库文件(可以定时进行备份)
# redis 【重要】redis数据库文件(可以定时进行备份)
mkdir backup excel file mongodb redis
cd mongodb
# mongodb数据文件保存目录
mkdir data1 data2 data3 log1 log2 log3
3. 安装docker(centos示例)
bash
# 安装Docker依赖:运行以下命令以安装Docker所需的依赖项:
yum install -y yum-utils device-mapper-persistent-data lvm2
# 添加Docker仓库:运行以下命令以添加Docker的官方仓库:
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装Docker:运行以下命令以安装Docker:
yum install -y docker-ce
# 启动Docker服务:运行以下命令以启动Docker服务,并将其设置为开机启动:
systemctl start docker
systemctl enable docker
# 验证安装:运行以下命令以验证Docker是否正确安装(注意!docker版本必须大于20.10):
docker version
4. 运行会众云平台
如果需要增加https访问,可以添加:https自动签发插件
特别说明
访问主服务(ip替换为真实的服务器ip)
系统所有功能入口,地址:http://172.0.0.1:2020/apaas/
访问后台配置(ip替换为真实的服务器ip,并使用初始管理员访问)
可以配置企业形象、组织成员数量等,地址:http://172.0.0.1:2020/apaas/admin/
下载镜像
点击查看所有已发布版本,并下载软件镜像(请下载内置数据库版本
)
bash
docker pull registry.cn-hangzhou.aliyuncs.com/hzy0code/hzy-release:db.[平台架构].[版本号]
举例
安装版本为:7.9.2,CPU架构为x86时,下载命令如下:
bash
docker pull registry.cn-hangzhou.aliyuncs.com/hzy0code/hzy-release:db.x86.7.9.2
运行主服务
bash
docker run\
--privileged\
-e TZ=Asia/Shanghai\
-itd\
--restart always\
-p 2020:2020\
-p 20000:20000\
-v /etc/hzy:/root/conf\
-v /var/hzy:/root/upload\
registry.cn-hangzhou.aliyuncs.com/hzy0code/hzy-release:db.[平台架构].[版本号]
注意
如果调整了系统防火墙策略,会导致docker容器失效!需要重新运行docker服务,然后重启docker容器
bash
# 例如,linux下可以使用systemctl重启docker
systemctl restart docker
5. 升级会众云平台
特别说明
升级服务不会导致数据丢失,所有的数据都保存于本地磁盘中,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 /etc/hzy:/root/conf\
-v /var/hzy:/root/upload\
registry.cn-hangzhou.aliyuncs.com/hzy0code/hzy-release:db.[平台架构].[版本号]
其他配置说明(非安装步骤)
特别说明
以下步骤不是安装流程,是额外配置说明,仅需要时才进行配置
以下步骤不是安装流程,是额外配置说明,仅需要时才进行配置
以下步骤不是安装流程,是额外配置说明,仅需要时才进行配置
1. 打开系统限制
bash
# 修改open files(打开文件数太少时需要配置)
vim /etc/security/limits.conf
# 在文件最后增加
* soft nofile 200000
* hard nofile 200000
root soft nofile 200000
root hard nofile 200000
# 重新登录账号后,检查配置是否生效
ulimit -a
# 修改max_map_count
vim /etc/sysctl.conf
# 增加此行配置
vm.max_map_count = 262144
# 使配置生效
sysctl -p
# 查看配置
sysctl -a | grep max_map_count
2. nginx反向代理
特别说明
可以使用:自动证书-HTTPS,进行自动https证书签发、nginx代理、域名校验
注意
当需要使用独立域名访问时配置
配置独立域名后,需要修改server_config.json中的对应地址,并重启docker服务
安装nginx的相关命令
bash
# 安装 gcc 环境(nginx 编译时依赖 gcc 环境)
yum -y install gcc gcc-c++
# 安装 pcre(nginx 支持重写功能)
yum -y install pcre pcre-devel
# 安装 zlib (zlib 库提供了很多压缩和解压缩的方式,nginx 使用 zlib 对 http 包内容进行 gzip 压缩)
yum -y install zlib zlib-devel
# 安装 openssl(安全套接字层密码库,用于通信加密)
yum -y install openssl openssl-devel
# 下载nginx-1.22.0版本
curl https://nginx.org/download/nginx-1.22.0.tar.gz --output nginx-1.22.0.tar.gz
# 解压缩
tar -zxvf nginx-1.22.0.tar.gz
# 安装插件
cd nginx-1.22.0
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module
# 编译源码并安装
make
make install
nginx.conf配置示例
bash
#定义Nginx运行的用户和用户组
user root root;
#nginx进程数,设置为等于CPU总核心数
worker_processes 2;
##全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]
error_log /usr/local/nginx/logs/error.log info;
#指定进程可以打开的最大描述符:数目
#工作模式与连接数上限
#这个指令是指当一个nginx进程打开的最多文件描述符数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除
#但是nginx分配请求并不是那么均匀,所以最好与ulimit -n 的值保持一致。
#现在在linux 2.6内核下开启文件打开数为65535,worker_rlimit_nofile就相应应该填写65535。
#这是因为nginx调度时分配请求到进程并不是那么的均衡,所以假如填写10240,总并发量达到3-4万时就有进程可能超过10240了,这时会返回502错误。
worker_rlimit_nofile 65535;
#设定请求事件处理模型,可以配置事件模型、最大连接数、超时时间等
events {
#参考事件模型,use [ kqueue | rtsig | epoll | /dev/poll | select | poll ]; epoll模型
#是Linux 2.6以上版本内核中的高性能网络I/O模型,linux建议epoll,如果跑在FreeBSD上面,就用kqueue模型
#补充说明:
#与apache相类,nginx针对不同的操作系统,有不同的事件模型
#A: 标准事件模型
#Select、poll属于标准事件模型,如果当前系统不存在更有效的方法,nginx会选择select或poll
#B: 高效事件模型
#Kqueue:使用于FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X.使用双处理器的MacOS X系统使用kqueue可能会造成内核崩溃
#Epoll:使用于Linux内核2.6版本及以后的系统
#/dev/poll:使用于Solaris 7 11/99+,HP/UX 11.22+ (eventport),IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+
#Eventport:使用于Solaris 10。 为了防止出现内核崩溃的问题, 有必要安装安全补丁
use epoll;
#单个进程最大连接数(每个进程允许的最多连接数)(最大连接数=连接数*进程数)
#根据硬件调整,和前面工作进程配合起来用,尽量大,但是别把cpu跑到100%就行
worker_connections 65535;
}
#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
#文件扩展名与文件类型映射表
include mime.types;
#默认文件类型
default_type application/octet-stream;
#默认编码
#charset utf-8;
#设定通过nginx上传文件的最大值
client_max_body_size 2g;
#开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来输出文件
#对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为off,以平衡磁盘与网络I/O处理速度,降低系统的负载
#sendfile指令指定 nginx 是否调用sendfile 函数(zero copy 方式)来输出文件
sendfile on;
#是否开启Nagle算法以减少需要传输的数据包,来优化网络(设置为on表示关闭算法,nginx默认是开启了的算法的(会存在一定的时延))
tcp_nodelay on;
#长连接超时时间,单位是秒
keepalive_timeout 60s;
#使用静态gzip文件(会默认使用前端压缩过后的静态文件,不需要服务端压缩)
gzip_static on;
#启用服务端动态压缩算法
#开启gzip压缩功能
gzip on;
#设置允许压缩的最小字节数
gzip_min_length 8k;
#设置压缩缓冲区大小(4个32k缓冲区)
gzip_buffers 4 32k;
#设置压缩比率,最小为1,处理速度快,传输速度慢;9为最大压缩比,处理速度慢,传输速度快; 一般折中为6
gzip_comp_level 6;
#指定压缩的类型(只处理后端json数据)
gzip_types application/json;
#nginx日志(建议不开启,否则日志文件会非常大)
log_format main 'ALL:$request_time - BACK:$upstream_response_time - '
'$http_origin - $remote_addr - $remote_user [$time_local] "$request_uri" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#access_log /usr/local/nginx/logs/access.log main;
access_log off;
#虚拟主机的配置(不带实例编号)
server {
#监听端口(可以设置同时监听多个端口,例如:同时监听80和443端口)
listen 80;
listen 443 ssl;
#域名可以有多个,用空格隔开
server_name xxx.xxx.xxx;
#https配置(注意替换证书地址)
ssl_certificate /usr/local/nginx/conf/cert/cardifit.ysyoungth.com/cardifit.ysyoungth.com.pem;
ssl_certificate_key /usr/local/nginx/conf/cert/cardifit.ysyoungth.com/cardifit.ysyoungth.com.key;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
ssl_stapling on; #开启 OCSP Stapling
ssl_stapling_verify on; #启用OCSP响应验证,OCSP信息响应适用的证书
location / {
#将请求反向代理到目标服务器上
proxy_pass http://127.0.0.1:2020;
#后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
#如果设置了代理,那么这里会返回所有层级的代理服务器ip,例如:1.1.1.1(真实的用户ip) 2.2.2.2 3.3.3.3
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#设置请求IP地址(如果有代理服务器,那么会返回代理服务器的地址)
proxy_set_header ip $remote_addr;
#设置请求的origin-host信息
proxy_set_header origin-host $http_host;
#后端服务器连接的超时时间_发起握手等候响应超时时间
#nginx跟后端服务器连接超时时间(代理连接超时)
proxy_connect_timeout 90;
#后端服务器数据回传时间(代理发送超时)
#后端服务器数据回传时间_就是在规定时间之内后端服务器必须传完所有的数据
proxy_send_timeout 90;
#连接成功后,后端服务器响应时间(代理接收超时)
#连接成功后_等候后端服务器响应时间_其实已经进入后端的排队之中等候处理(也可以说是后端服务器处理请求的时间)
proxy_read_timeout 90;
}
location /ws {
#websocket
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_pass http://127.0.0.1:2020;
}
}
}
3. 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
4. 配置数据库角色
当前版本内置的mongodb数据库不包含数据库角色,添加数据库角色的步骤如下
1. 进入容器内部
bash
# 查看当前容器ID
docker ps | grep hzy0code
# 进入容器内部
docker exec -it [容器id] /bin/bash
2. 连接数据库并创建角色
bash
# 连接数据库
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]
5. 连接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": "这里是控件值" |