说明
- jumpserver服务器环境
- CentOS-7.9
- Docker-CE 20.10.6
- MySQL-5.7.31
- 使用MySQL社区版
- Redis-3.12.0
- CentOS自带Redis-3.12.0
- jumpserver部署情况,参考这里
- 版本从原先的v2.0.1升级到了v2.4.4,改变镜像TAG就升级完成了
- 从v2.6.0开始统一采用新的部署项目来管理社区版和企业版,以前的项目不维护了
- 鉴于新的部署方式,容器镜像也不一样了,需要重新梳理一下jumpserver的部署
新版本对基础设施版本的需求
- 数据库:MySQL >= 5.7 或者 MariaDB >= 10.2
- 之前部署的时候已经是MySQL-5.7.31,不需要升级数据库版本
- 缓存:Redis >= 6.0
- CentOS7自带的是3.12.0,需要更新Redis版本
- docker版本
- jmsctl.sh会检查docker-ce和docker-compose版本
- 自动更新docker-ce和docker-compose版本为18.06.3-ce和1.27.4
- CentOS自带的docker-compose为1.18.0,执行命令会提示
ERROR: Version in "././compose/docker-compose-app.yml" is unsupported.
- 数据库:MySQL >= 5.7 或者 MariaDB >= 10.2
文档参考
升级过程要求
- 保证旧版本的jumpserver保持在线不影响业务,升级平滑
- 保证回退老版本时不影响jumpserver使用
- 这里是另起一套环境练过手,才在正式环境上面做升级!
基础设施升级
Docker-compose升级
当前版本
1 | docker-compose -v |
下载1.29.2版本
1 | wget https://get.daocloud.io/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m) -O /usr/bin/docker-compose-1.29.2 |
替换系统自带docker-compose
1 | mv /usr/bin/docker-compose /usr/bin/docker-compose-1.18.0 |
确认docker-compose版本
1 | docker-compose -v |
MySQL数据库迁移
数据库备份
1 | mysqldump -u 用户名 -p 密码 -h 主机 -P 端口 --no-create-db --set-gtid-purged=ON --single-transaction --triggers --routines --events jumpserver > jumpserver-full-dump.sql |
修改数据库字符集
1 | if grep -q 'COLLATE=utf8_bin' jmsdump.sql; then |
确认数据库配置
参考部署项目的数据库配置文件my.cnf,针对性的修改一下数据库
这里只列举此文需要修改的配置项,不要照抄!!!!1 | [mysqld] |
1 | systemctl restart mysqld.service |
1 | > SHOW VARIABLES LIKE '%character%'; |
创建数据库
这里主要用于隔离新旧jumpserver的数据库,方便回退
1 | CREATE DATABASE newDB; |
授权数据库
1 | GRANT ALL PRIVILEGES ON newDB.* to newUser@'%' identified by 'newPass'; |
导入数据
1 | mysql -u new_jms_user -p new_jms_db < jmsdump.sql |
Redis升级
下载新版本Redis
1 | wget https://download.redis.io/releases/redis-6.2.3.tar.gz -O - | tar xz |
编译安装
1 | make distclean && make MALLOC=jemalloc && make test |
配置Redis
/etc/redis/redis_6380.conf
1 | bind 0.0.0.0 |
systemd配置
/usr/lib/systemd/system/redis_multiple_servers@.service
1 | [Unit] |
启动Redis
1 | systemctl daemon-reload |
停用CentOS自带Redis
1 | systemctl disable --now redis.service |
切换到新的Redis
1 | systemctl enable --now redis_multiple_servers@6379.service |
jumpserver升级
下载安装包
1 | cd /opt |
配置jumpserver
创建配置目录
1 | mkdir -p /opt/jumpserver/config |
修改配置文件
vim /opt/jumpserver/config/config.txt
1 | # 安装配置 |
部署jumpserver
执行脚本
这里会识别到
/opt/jumpserver/config/config.txt
里面配置好的变量,可以直接用
./jmsctl.sh install
向导安装
1 | ██╗██╗ ██╗███╗ ███╗██████╗ ███████╗███████╗██████╗ ██╗ ██╗███████╗██████╗ |
修改Nginx配置
这里主要修改主机名和SSL证书
1 | vim /opt/jumpserver-installer-v2.10.4/compose/config_static/http_server.conf |
添加HTTPS证书
这里通过acme脚本部署证书到jumpserver目录
添加更新证书的操作,让Nginx重新加载证书
1 | ~/.acme.sh/acme.sh --installcert \ |
启动jumpserver
1 | ./jmsctl.sh start |
验证jumpserver
查看服务器证书
1 | openssl s_client -showcerts -connect jumpserver.example.com:8443 |
测试连接jumpserver
1 | ssh 用户名@jumpserver.example.com -p 2223 |
登录网页端
浏览器打开 https://jumpserver.example.com:8443
升级过程中碰到的问题
jms_core无法启动
查看core日志/opt/jumpserver/core/logs/jumpserver.log
django做db migrate操作失败,导致jms_core无法完成db migration阻塞了启动
解决方法
./jmsctl.sh stop
关闭堡垒机容器- 重新导入数据库
./jmsctl.sh start
重新启动堡垒机容器
网页打开提示500内部错误
浏览器按F12打开调试窗口,发现是
/api/v1/index/?total_count=1
请求500了查看core日志/opt/jumpserver/core/logs/jumpserver.log
- 发现是Redis命令的错误,这个是Redis版本问题
解决方法
- 更新Redis版本>=6.0
正式迁移
简单测试jumpserver-v2.10.4版本,没什么大问题之后,就把老版本的jumpserver停了
修改新版本配置文件,用回正常的80/443/2222端口