問題描述
今天原本要做別的事情,但是突然發現 JumpServer 發布新版本。並且,我們還發現優化資產樹節點排序問題(這是我們比較關心的問題,2.4.4 的資產排序方式“似乎沒有規律”,導致資產節點顯示有些“不整齊”)。
因此,我們決定對我們的 JumpServer 服務進行升級,升級到最新的版本(2.8.2)。也許這太魯莽,但是換個角度看:做好數據備份以后,即使升級失敗,我們也能夠進行回滾;此外,JumpServer 的配置不會經常變動,哪怕回滾導致數據遺失,對於我們來說是在可接受范圍內的。所以,我們能夠接受升級失敗帶來的后果。
該筆記將記錄:將 JumpServer 從 2.4.4 升級 2.8.2 版本的過程,以及常見問題出來。
解決方案
每個人的部署方式很信息都不相同,我們創建該筆記是為了記錄我們的升級過程,以及常見問題的解決方案,為他人提供經驗與參考。
另外,此次升級的變動還是很大的,比如:從 2.6 后,統一企業版本與開源版本安裝方式,企業版和社區版可以無縫切換。今后只會維護這種安裝方式(通過 jmsctl.sh 管理),其他安裝方式不再提供技術支持。所以,此次升級需要完成的工作比像以往那樣直接。
原始部署信息
部署方式:我們的 JumpServer 2.4.4 的部署方式為 Docker 運行,使用 jms_all 鏡像。這樣,便於管理。
數據目錄:數據目錄(/srv/jumpserver/data、/srv/jumpserver/mysql)是掛載到容器外的。
其他信息:參考 1.5.6 to 2.4.4 筆記;
第一步、數據庫備份(重要)
docker container stop jumpserver_2.4.4 rsync -avz /srv/jumpserver/data /srv/jumpserver/.backup/2.4.4/data rsync -avz /srv/jumpserver/mysql /srv/jumpserver/.backup/2.4.4/mysql
至此,我們已經創建數據備份,那么之后我們便可大膽升級。不管最終結果如何,不管最終怎么失敗,我們都能夠利用備份數據進行還原。當然,要小心誤操作而把備份數據刪除。
第二步、導出數據庫
docker container start jumpserver_2.4.4 docker container exec -it jumpserver_2.4.4 \ bash -c 'mysqldump -h$DB_HOST -P$DB_PORT -u$DB_USER -p$DB_PASSWORD $DB_NAME' \ > /opt/jumpserver.sql if grep -q 'COLLATE=utf8_bin' /opt/jumpserver.sql; then echo "備份數據庫字符集正確"; else cp /opt/jumpserver.sql /opt/jumpserver_bak.sql sed -i 's@CHARSET=utf8;@CHARSET=utf8 COLLATE=utf8_bin;@g' /opt/jumpserver.sql fi if grep -q 'CHARSET=utf8;' /opt/jumpserver.sql; then cp /opt/jumpserver.sql /opt/jumpserver_bak.sql.1 sed -i 's@CHARSET=utf8;@CHARSET=utf8 COLLATE=utf8_bin;@g' /opt/jumpserver.sql else echo "備份數據庫字符集正確"; fi docker container stop jumpserver_2.4.4
第三步、安裝 JumpServer 服務
cd /opt yum -y install wget wget https://github.com/jumpserver/installer/releases/download/v2.8.2/jumpserver-installer-v2.8.2.tar.gz tar -xf jumpserver-installer-v2.8.2.tar.gz cd jumpserver-installer-v2.8.2 vi config-example.txt SECRET_KEY= # 從舊版本的配置文件獲取后填入 (*) BOOTSTRAP_TOKEN= # 從舊版本的配置文件獲取后填入 (*) ./jmsctl.sh install
注意事項:后面,根據提示進行選擇即可,無需進行特殊設置。
第四步、導入原始數據,並啟動服務
# ./jmsctl.sh stop # docker exec -it jms_mysql /bin/bash -c 'mysql -uroot -p$DB_PASSWORD' ... mysql> drop database jumpserver; Query OK, 88 rows affected (0.11 sec) mysql> create database jumpserver default charset 'utf8' collate 'utf8_bin'; Query OK, 1 row affected (0.02 sec) mysql> exit; Bye # ./jmsctl.sh restore_db /opt/jumpserver.sql Start restoring database: /opt/jumpserver.sql mysql: [Warning] Using a password on the command line interface can be insecure. [SUCCESS] Database recovered successfully # ./jmsctl.sh start
第五步、配置 Nginx 轉發
server { listen 80; server_name demo.jumpserver.org; # 自行修改成你的域名 client_max_body_size 4096m; # 上傳文件大小限制 location / { # 這里的 ip 是后端 JumpServer nginx 的 ip proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_buffering off; proxy_request_buffering off; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
注意事項,我們是內網使用,因此僅簡單配置 HTTP 訪問。關於 Nginx 的更多設置,參考 JumpServer 文檔/反向代理 文檔。
最后,升級成功,登錄查看!!!
此次升級,新版本的登錄界面也發生變化,以及資產樹的排序是有規律的。
常見問題匯總
ERROR: for XXX Container "XXX" is unhealthy.
問題描述:在啟動服務時,產生如下錯誤信息
# ./jmsctl.sh start Recreating jms_redis ... Recreating jms_redis ... done Creating jms_core ... ERROR: for lina Container "cd64d6d81be5" is unhealthy. ERROR: for koko Container "cd64d6d81be5" is unhealthy. ERROR: for guacamole Container "cd64d6d81be5" is unhealthy. ERROR: for celery Container "cd64d6d81be5" is unhealthy. ERROR: for luna Container "cd64d6d81be5" is unhealthy. ERROR: Encountered errors while bringing up the project.
問題原因:容器 cd64d6d81be5 是 jms_core 容器。鑒於 jms_core 調整數據庫的時間比較長,導致其他容器健康檢查失敗,所以出現該錯誤信息。
解決方法:
# docker logs -f jms_core ... 2021-03-27 01:48:57 Check service status: gunicorn -> running at 764 2021-03-27 01:48:57 Check service status: flower -> running at 770 2021-03-27 01:48:57 Check service status: daphne -> running at 772 2021-03-27 01:49:30 Check service status: gunicorn -> running at 764 ... // 等待出現類似如上日志,然后重新啟動服務即可 # ./jmsctl.sh start
相關文章
「Jumpserver」- 升級(1.4.9 to latest)
「Jumpserver」- 升級(1.4.6-2 to latest)
「Jumpserver」- 升級 v1.5.6 到 v2.4.4 版本
「Jumpserver」- 安裝(1.4.9-2)
參考文獻
JumpServer 文檔 / 升級文檔 / docker 部署