「JumpServer」- 更新 2.4.4 到 2.8.2 版本 @20210329


問題描述

今天原本要做別的事情,但是突然發現 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 部署



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM