Skip to content

部署会众云平台(独立数据库Linux版本)

提示

容器镜像内不包含数据库驱动程序,需要单独安装数据库驱动程序,适用于需要将数据库与主服务单独部署的方式

特别说明

部署独立数据库版本前,需要先获得独立数据库版本授权
部署独立数据库版本前,需要先获得独立数据库版本授权
部署独立数据库版本前,需要先获得独立数据库版本授权

1.数据库部署

1.1 下载MongoDB安装包

下载地址:https://www.mongodb.com/try/download/community

下载注意事项

  • 数据库版本(Version)选择6.0版本
  • 平台(Platform)根据实际的操作系统选择,例如:centos7.9 x64架构,选择CentOS 7.0 x64
  • 如果是arm架构,需要选择对应的arm版本,例如:centos8.2 arm架构,选择CentOS 8.2 ARM 64
  • 目标包类型(Package),选择tgz,这样解压以后就可以直接使用,方便后续配置
  • linux下载目录:/usr/local/mongodb(mongodb目录需要创建)
  • linux下载命令:wget [文件地址]
  • linux解压命令:tar -zxvf [tgz文件]

1.2 linux下安装示例

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
# 安装 ncurses(是一套编程库)
yum -y install ncurses-devel
# 安装mongodb依赖
yum -y install libcurl xz-libs

# 以下为centos 7.9 x64下载示例
cd /usr/local
mkdir mongodb
cd mongodb
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-6.0.11.tgz
tar -zxvf mongodb-linux-x86_64-rhel70-6.0.11.tgz

1.3 创建MongoDB配置文件

创建数据库文件保存目录

bash
# 创建三个mongod实例的对应的数据、日志存储文件夹
cd /root/
mkdir mongodb
cd mongodb
mkdir data1 log1 data2 log2 data3 log3

创建mongodb集群配置文件

mongod1.conf

bash
vim /usr/local/mongodb/mongod1.conf

# 文件内容如下
yaml
#系统日志
systemLog:
  #【默认值: 无】当配置destination=file时,需要配置系统日志所在位置
  # 这里需要替换为实际地址
  path: /root/mongodb/log1/mongod.log
  #当mongod实例重启时,将新的日志拼接在旧的日志后面,而不是备份以前的日志再创建一个新的日志文件
  logAppend: true
  #【默认值: 将日志输出到标准输出】file: 将日志输出到文件;syslog: 将日志输出到系统日志;
  destination: file

#进程管理
processManagement:
  #【默认值: false】是否采用守护进程的方式后台运行mongod实例
  fork: true

#网络
net:
  #【默认值: 27017】端口号
  port: 17017
  #【默认值: localhost】绑定ip,多个ip使用","分隔,绑定所有ipv4使用"0.0.0.0"
  bindIp: 0.0.0.0

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

#存储
storage:
  #【默认值: /data/db(Linux)】mongodb存放数据的位置
  # 这里需要替换为实际地址
  dbPath: /root/mongodb/data1
  journal:
    #【默认值: true】启用日志,启用日之后可以保证数据有效性,并且可以恢复
    enabled: true
  wiredTiger:
    engineConfig:
      #【默认值: MAX(0.5 * (RAM - 1GB), 256MB)】mongod能够使用的最大缓存
      # 服务器上安装了多个程序时,需要限制最大缓存,防止内存溢出
      # mongodb除了会使用这个缓存,也会利用系统的闲置内存,所以这个值并不是实际mongodb使用的内容量
      # 每一个连接都会使用额外的内存(2M左右)
      # 索引也会使用额外的内存
	  # 这里建议设置的值不要太大,否则会导致内存耗尽
      cacheSizeGB: 1

#副本集
replication:
  #【默认值: 可用磁盘空间的5%】oplog最大存储量,oplog用于存放master节点的所有操作,这些操作会同步给second节点,所以oplog越大允许的宕机时间越长(最小990MB)
  # 此值一旦确定就无法更改(修改了数值重新启动也不行),需要使用replSetResizeOplog命令进行调整
  oplogSizeMB: 8192
  #【默认值: 无】副本集的名字,所有连接到此副本集的实例都需要配置相同的名字
  replSetName: apaas

mongod2.conf

bash
vim /usr/local/mongodb/mongod2.conf

# 文件内容如下
yaml
#系统日志
systemLog:
  #【默认值: 无】当配置destination=file时,需要配置系统日志所在位置
  # 这里需要替换为实际地址
  path: /root/mongodb/log2/mongod.log
  #当mongod实例重启时,将新的日志拼接在旧的日志后面,而不是备份以前的日志再创建一个新的日志文件
  logAppend: true
  #【默认值: 将日志输出到标准输出】file: 将日志输出到文件;syslog: 将日志输出到系统日志;
  destination: file

#进程管理
processManagement:
  #【默认值: false】是否采用守护进程的方式后台运行mongod实例
  fork: true

#网络
net:
  #【默认值: 27017】端口号
  port: 17018
  #【默认值: localhost】绑定ip,多个ip使用","分隔,绑定所有ipv4使用"0.0.0.0"
  bindIp: 0.0.0.0

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

#存储
storage:
  #【默认值: /data/db(Linux)】mongodb存放数据的位置
  # 这里需要替换为实际地址
  dbPath: /root/mongodb/data2
  journal:
    #【默认值: true】启用日志,启用日之后可以保证数据有效性,并且可以恢复
    enabled: true
  wiredTiger:
    engineConfig:
      #【默认值: MAX(0.5 * (RAM - 1GB), 256MB)】mongod能够使用的最大缓存
      # 服务器上安装了多个程序时,需要限制最大缓存,防止内存溢出
      # mongodb除了会使用这个缓存,也会利用系统的闲置内存,所以这个值并不是实际mongodb使用的内容量
      # 每一个连接都会使用额外的内存(2M左右)
      # 索引也会使用额外的内存
      # 这里建议设置的值不要太大,否则会导致内存耗尽
      cacheSizeGB: 1

#副本集
replication:
  #【默认值: 可用磁盘空间的5%】oplog最大存储量,oplog用于存放master节点的所有操作,这些操作会同步给second节点,所以oplog越大允许的宕机时间越长(最小990MB)
  # 此值一旦确定就无法更改(修改了数值重新启动也不行),需要使用replSetResizeOplog命令进行调整
  oplogSizeMB: 8192
  #【默认值: 无】副本集的名字,所有连接到此副本集的实例都需要配置相同的名字
  replSetName: apaas

mongod3.conf

bash
vim /usr/local/mongodb/mongod3.conf

# 文件内容如下
yaml
#系统日志
systemLog:
  #【默认值: 无】当配置destination=file时,需要配置系统日志所在位置
  # 这里需要替换为实际地址
  path: /root/mongodb/log3/mongod.log
  #当mongod实例重启时,将新的日志拼接在旧的日志后面,而不是备份以前的日志再创建一个新的日志文件
  logAppend: true
  #【默认值: 将日志输出到标准输出】file: 将日志输出到文件;syslog: 将日志输出到系统日志;
  destination: file

#进程管理
processManagement:
  #【默认值: false】是否采用守护进程的方式后台运行mongod实例
  fork: true

#网络
net:
  #【默认值: 27017】端口号
  port: 17019
  #【默认值: localhost】绑定ip,多个ip使用","分隔,绑定所有ipv4使用"0.0.0.0"
  bindIp: 0.0.0.0

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

#存储
storage:
  #【默认值: /data/db(Linux)】mongodb存放数据的位置
  # 这里需要替换为实际地址
  dbPath: /root/mongodb/data3
  journal:
    #【默认值: true】启用日志,启用日之后可以保证数据有效性,并且可以恢复
    enabled: true
  wiredTiger:
    engineConfig:
      #【默认值: MAX(0.5 * (RAM - 1GB), 256MB)】mongod能够使用的最大缓存
      # 服务器上安装了多个程序时,需要限制最大缓存,防止内存溢出
      # mongodb除了会使用这个缓存,也会利用系统的闲置内存,所以这个值并不是实际mongodb使用的内容量
      # 每一个连接都会使用额外的内存(2M左右)
      # 索引也会使用额外的内存
      # 这里建议设置的值不要太大,否则会导致内存耗尽
      cacheSizeGB: 1

#副本集
replication:
  #【默认值: 可用磁盘空间的5%】oplog最大存储量,oplog用于存放master节点的所有操作,这些操作会同步给second节点,所以oplog越大允许的宕机时间越长(最小990MB)
  # 此值一旦确定就无法更改(修改了数值重新启动也不行),需要使用replSetResizeOplog命令进行调整
  oplogSizeMB: 8192
  #【默认值: 无】副本集的名字,所有连接到此副本集的实例都需要配置相同的名字
  replSetName: apaas

1.4 MongoDB集群部署

启动三个mongodb节点

bash
/usr/local/mongodb/mongodb-linux-x86_64-rhel70-6.0.2/bin/mongod -f mongod1.conf
/usr/local/mongodb/mongodb-linux-x86_64-rhel70-6.0.2/bin/mongod -f mongod2.conf
/usr/local/mongodb/mongodb-linux-x86_64-rhel70-6.0.2/bin/mongod -f mongod3.conf

# 查看启动是否成功
ps -ef | grep mongod

点击安装mongoshell,并连接到节点

bash
# 连接到其中一个节点,注意端口号必须一致
mongosh --port 17017

# 使用admin库
use admin

# 添加节点到集群
# 分别配置三台机器的ip
# 注意:这里的ip需要替换为真实的内网ip!!
# 注意:这里的ip需要替换为真实的内网ip!!
# 注意:这里的ip需要替换为真实的内网ip!!
# 不要使用localhost、127.0.0.1,否则会导致docker中服务无法识别,如果是本地网络可以配置路由器使用固定内网IP
config={_id:"apaas",members:[{_id:0,host:"192.168.31.153:17017"},{_id:1,host:"192.168.31.153:17018"},{_id:2,host:"192.168.31.153:17019"}]}

# 初始化
rs.initiate(config)

# 查看状态(当节点的状态为:stateStr: 'PRIMARY'、stateStr: 'SECONDARY'、stateStr: 'SECONDARY',时正常)
rs.status()

# 创建角色(默认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"}]})

1.5 启用mongodb安全策略

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

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

修改mongod1.conf、mongod2.conf、mongod3.conf

bash
#进程管理,注意:如果需要配置systemd自动重启,必须设置为false!
processManagement:
  #【默认值: false】是否采用守护进程的方式后台运行mongod实例
  fork: false

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

创建3个mongodb服务,用于自动重启

bash
# 此步骤前需要将已经启动的Mongod进程杀掉
ps -ef | grep mongod
kill 进程号

# 创建文件(mongod1表示的是第一个mongod服务,依次配置3个服务)
cd /etc/systemd/system
vim mongod1.service

# 文件内容(mongod1.conf表示的是第一个mongod服务,依次配置3个服务)
############################ 内容开始 ############################
[Unit]
Description=MongoDB Database Service
Wants=network.target
After=network.target

[Service]
ExecStartPre=/bin/sleep 30
ExecStart=/usr/local/mongodb/mongodb-linux-x86_64-rhel70-6.0.2/bin/mongod --config /usr/local/mongodb/mongod1.conf
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
User=root
Group=root
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target
############################ 内容结束 ############################

# 启动并设置开机启动(mongod1表示的是第一个mongod服务,依次配置3个服务)
systemctl daemon-reload
systemctl start mongod1
systemctl enable mongod1
systemctl start mongod2
systemctl enable mongod2
systemctl start mongod3
systemctl enable mongod3

# 检查服务是否正确(ip替换为真实的内网ip)
mongosh --host apaas/192.168.31.153:17017,192.168.31.153:17018,192.168.31.153:17019
use admin
db.auth("hzy", "0codepaas.com")
# 查看状态(当节点的状态为:stateStr: 'PRIMARY'、stateStr: 'SECONDARY'、stateStr: 'SECONDARY',时正常)
rs.status()

2.数据库Redis部署

2.1 下载并安装Redis

官方地址:https://redis.io/download/#redis-downloads

2.2 linux下安装示例

bash
cd /usr/local
mkdir redis
cd redis

# 下载二进制文件
wget https://download.redis.io/releases/redis-6.2.5.tar.gz
# 解压缩
tar xzf redis-6.2.5.tar.gz
cd redis-6.2.5
make

2.3 配置redis自启动

修改redis配置文件

bash
# 编辑配置文件
vim /usr/local/redis/redis-6.2.5/redis.conf

# 修改内容如下:
############################ 内容开始 ############################
# 增加redis访问密码
requirepass hzy_0codepaas
# 绑定所有ip(这里需要注意!!检查文件中是否存在多个bind关键字,只能保留一个bind关键字)
bind 0.0.0.0 -::1
# 使用守护进程允许(采用systemd的方式启动设为no)
daemonize no
# 开启AOF持久化
appendonly yes
# 每秒钟进行日志同步
appendfsync everysec
# aof文件保留策略(防止无限膨胀)
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
############################ 内容结束 ############################

配置redis自启动

bash
# 创建文件
cd /etc/systemd/system
vim redis.service

############################ 内容开始 ############################
[Unit]
Description=Redis Database Service
Wants=network.target
After=network.target

[Service]
ExecStartPre=/bin/sleep 10
ExecStart=/usr/local/redis/redis-6.2.5/src/redis-server /usr/local/redis/redis-6.2.5/redis.conf
ExecReload=/bin/kill -HUP $MAINPID
Restart=always
User=root
Group=root
StandardOutput=syslog
StandardError=syslog

[Install]
WantedBy=multi-user.target
############################ 内容结束 ############################

# 启动并设置开机启动
systemctl daemon-reload
systemctl start redis
systemctl enable redis

# 查看redis是否正确启动
# 输出:/usr/local/redis/redis-6.2.5/src/redis-server 0.0.0.0:6379,时成功
# 注意:必须是0.0.0.0,如果不是,那么检查一下bind的ip是否正确
ps -ef | grep redis

3.运行主服务

3.1 创建配置文件

特别说明

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

创建配置文件

bash
# 创建配置文件步骤如下
mkdir /etc/hzy
cd /etc/hzy
vim server_config.json

配置参数说明

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

文件内容示例

特别说明

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

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

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

json
{
  "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"
  },
  "REDIS_CONFIG": "redis://:hzy_0codepaas@192.168.31.153:6379",
  "ROOT_DOMAIN": "http://192.168.31.153:2020",
  "AUTH_SECRET": "xxxxxxxxxxxxxxxx"
}

3.2 创建文件保存路径

bash
mkdir /var/hzy
cd /var/hzy
mkdir backup  excel  file

3.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

3.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:[平台架构].[版本号]

举例

安装版本为:7.9.2,CPU架构为x86时,下载命令如下:

bash
docker pull registry.cn-hangzhou.aliyuncs.com/hzy0code/hzy-release: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:[平台架构].[版本号]

注意

如果调整了系统防火墙策略,会导致docker容器失效!需要重新运行docker服务,然后重启docker容器

bash
# 例如,linux下可以使用systemctl重启docker
systemctl restart docker

1.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:[平台架构].[版本号]

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

特别说明

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

4.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

4.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;
        }
	}
}

4.3 docker-compose 配置

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

注意

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

yml
version: '3'
services:
  hzy-release:
    image: hzy0code/hzy-release: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.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": "这里是控件值"