Appearance
部署会众云平台(独立数据库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": "这里是控件值" |