Skip to content

部署会众云平台(内置数据库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、多组织版本设置组织人数

设置方式

个人中心创建组织


后台管理分配组织人数

地址:http://192.168.0.1:2020/apaas/admin/ (ip替换为真实的服务器ip)

1. 下载脚本

自动脚本使用前提

  1. Linux系统,且为 x86 架构
  2. 具备 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": "这里是控件值"