開(kāi)發(fā)環(huán)境搭建 | 使用docker進(jìn)行內(nèi)網(wǎng)離線安裝sonarqube(完整版MAX)



一、安裝簡(jiǎn)要

  1. 通過(guò)外網(wǎng)安裝 sonarqube 并安裝所需插件
  2. 打包相關(guān)鏡像、sonarqube 工具插件
  3. 傳輸鏡像、插件到內(nèi)網(wǎng)
  4. 內(nèi)網(wǎng)利用鏡像安裝 sonarqube
  5. 后臺(tái)將插件放置到 sonarqube 的extensions/plugins目錄并重啟服務(wù)使插件生效
  6. 請(qǐng)你愉快使用!?。?/li>

問(wèn)題: 為什么要外網(wǎng)要安裝一遍 sonarqube ,我又用不著?
回答: 因?yàn)閮?nèi)網(wǎng)環(huán)境是無(wú)法通過(guò) sonarqube 市場(chǎng)直接安裝插件,只能從外網(wǎng)離線下載傳輸?shù)絻?nèi)網(wǎng)使用,而且沒(méi)找到能直接下載與sonarqube各版本的插件網(wǎng)址入口,雖然常見(jiàn)插件可以通過(guò)插件各自更新地址去獲取(如:gitlab),但是依舊麻煩;如果你本身就有當(dāng)前待安裝sonarqube版本的插件包,也無(wú)需再更新插件,那你可以選擇不裝,直接進(jìn)行內(nèi)網(wǎng)操作。

1.1 版本信息

軟件名稱 版本 備注
docker 24.0.5 2023.08.26 當(dāng)前最新版,Winodws和Ubuntu均是該版本
sonarqube 9.9 一般首選community社區(qū)版,個(gè)人或小型團(tuán)隊(duì)不考慮付費(fèi)的開(kāi)發(fā)者版、企業(yè)版、數(shù)據(jù)中心版
postgres 15.4 2023.08.26 當(dāng)前最新版

sonarqube 9.9 官方文檔 (附環(huán)境依賴截圖)

1.2 教程環(huán)境

網(wǎng)絡(luò)類型 系統(tǒng) 已安裝軟件 描述
外網(wǎng) Windows11 docker 請(qǐng)確保已安裝對(duì)應(yīng)Windows版,并已啟用服務(wù)且服務(wù)正常
內(nèi)網(wǎng) Ubuntu 22.04.2 AMD64 docker 請(qǐng)確保已安裝對(duì)應(yīng)Linux版,并已啟用服務(wù)且服務(wù)正常
  • 查看docker服務(wù)狀態(tài): service docker status
  • 重啟docker服務(wù): ???????service docker restart

1.3 sonarqube 常用插件整合

文件名稱 描述 下載地址
sonar-pdf-plugin 生成PDF格式的 sonarqube 報(bào)告 https://gitee.com/zzulj/sonar-pdf-plugin
sonar-l10n-zh 漢化sonarqube頁(yè)面 https://github.com/xuhuisheng/sonar-l10n-zh

為方便各位,整理的插件包見(jiàn):sonarqube_extensions.tar.gz

1.4 其他

分類 文件名稱 描述 下載地址
docker 鏡像 postgres 用于 sonarqube 的Database,可以選擇其他數(shù)據(jù)庫(kù)(如:Oracle等)
開(kāi)發(fā)插件 SonarLint 訪問(wèn) SonarLint所有版本,根據(jù)自己jetbrains產(chǎn)品版本選擇對(duì)應(yīng)版本進(jìn)行下載
開(kāi)發(fā)軟件 NodeJS SonarLint 運(yùn)行環(huán)境的依賴 Windows7??:node-v13.14.0-x64.msi

Windows8+:node-v18.17.1-x64.msi

備注:Windows7最高支持版本node 13.14.0
  • sonarqube 在默認(rèn)情況下使用的是嵌入式數(shù)據(jù)庫(kù)(H2數(shù)據(jù)庫(kù)),而 H2 數(shù)據(jù)庫(kù)適合用于評(píng)估和測(cè)試,不適合生產(chǎn)環(huán)境,如果直接使用H2,頁(yè)面會(huì)提示:"Embedded database should be used for evaluation purposes only" ,為了解決這個(gè)問(wèn)題,需要配置 SonarQube 使用一個(gè)持久性數(shù)據(jù)庫(kù),比如 PostgreSQL 、MySQL、Oracle或者M(jìn)icrosoft SQL Server等,以確保數(shù)據(jù)的持久存儲(chǔ)和可靠性
  • sonarqube 7.9+不再支持Mysql,歷史版本要求 Mysql版本滿足 [5.6,8.0)
  • sonarqube頁(yè)面地址默認(rèn)為:localhost:9000(admin/admin)

二、外網(wǎng)步驟

PS:外網(wǎng)步驟的命令均在CMD窗口執(zhí)行

  1. 進(jìn)入指定目錄
    mkdir sonarqube && cd sonarqube

  2. 下載相關(guān)鏡像
    docker pull postgres:15.4 --platform linux/amd64

docker pull sonarqube:9.9-community --platform linux/amd64

  1. 啟動(dòng) sonarqube 鏡像
docker run --privileged=true -it --restart=always --name sonarqube ^
-w /opt/sonarqube ^
-p 9000:9000 ^
-e TZ=Asia/Shanghai ^
-e ALLOW_EMPTY_PASSWORD=yes ^
-d sonarqube:9.9-community
  • 查看容器日志:docker logs -f sonarqube
  • 關(guān)閉容器方式:docker stop {容器ID}ps aux | grep {容器ID} | awk '{print $2}' | xargs kill -9
  1. 進(jìn)入 sonarqube 并下載所需插件,重啟后界面為中文

考慮到不同 sonarqube 版本的插件名稱可能會(huì)不同,可以參考對(duì)應(yīng)的關(guān)鍵字

常用插件名稱 工具介紹 關(guān)鍵字
Chinese Pack 漢化界面 Chinese
ecoCode - Python language Python 靜態(tài)代碼分析 Python
ecoCode - Java language Java 靜態(tài)代碼分析 Java
ecoCode - PHP language PHP 靜態(tài)代碼分析 PHP
  1. 打包插件
    1)下載到本地


2)壓縮處理
tar -czvf sonarqube_extensions.tar.gz ./plugins

  1. 鏡像導(dǎo)出成tar包
docker save -o sonarqube_9.9_community.tar sonarqube:9.9-community
docker save -o postgres_15.4.tar postgres:15.4
  1. 壓縮成tar.gz包(主要為減少內(nèi)網(wǎng)文件傳輸大小)
tar -czvf sonarqube_9.9_community.tar.gz sonarqube_9.9_community.tar
tar -czvf postgres_15.4.tar.gz postgres_15.4.tar
del sonarqube_9.9_community.tar postgres_15.4.tar
dir

三、內(nèi)網(wǎng)步驟

  1. 上述3個(gè)tar.gz傳輸進(jìn)行內(nèi)網(wǎng)后放在指定Linux的指定目錄(如:/opt/docker_images)


  2. 解壓tar.gz包

tar -xzvf sonarqube_9.9_community.tar.gz
tar -xzvf postgres_15.4.tar.gz
tar -xzvf sonarqube_extensions.tar.gz
rm -rf sonarqube_9.9_community.tar.gz postgres_15.4.tar.gz sonarqube_extensions.tar.gz
  1. 使用內(nèi)網(wǎng)Linux安裝的docker加載鏡像
docker load -i sonarqube_9.9_community.tar
docker load -i postgres_15.4.tar
docker images
  1. 由于sonarqube安裝目錄是在容器中,便于方便與安全,故對(duì)重要目錄進(jìn)行掛載
    1)將/opt/sonarqube下的logs、conf、data、extensions目錄掛載到宿主機(jī)中(以/opt/sonarqube為例)
    2)在宿主機(jī)創(chuàng)建/opt/sonarqube目錄并賦予權(quán)限
mkdir -p /opt/sonarqube/{logs,conf,data,extensions} && chmod -R 777 /opt/sonarqube
  1. Linux內(nèi)核參數(shù)調(diào)整(在修改任何內(nèi)核參數(shù)之前,最好了解參數(shù)的含義和影響,并在必要時(shí)備份系統(tǒng)或者記錄當(dāng)前的參數(shù)值,以便需要時(shí)可以恢復(fù)到之前的狀態(tài))
    1)調(diào)整單個(gè)進(jìn)程擁有的虛擬內(nèi)存區(qū)域數(shù)量(查看當(dāng)前參數(shù)值:sysctl vm.max_map_count
    sysctl -w vm.max_map_count=262144

2)調(diào)整系統(tǒng)可以打開(kāi)的最大文件句柄數(shù)(查看當(dāng)前參數(shù)值:sysctl fs.file-max
sysctl -w fs.file-max=131072

3)調(diào)整當(dāng)前用戶進(jìn)程可以打開(kāi)的最大文件句柄數(shù)量(查看當(dāng)前參數(shù)值:ulimit -n
ulimit -n 131072

4)調(diào)整當(dāng)前用戶會(huì)話中允許的最大用戶進(jìn)程數(shù)(查看當(dāng)前參數(shù)值:ulimit -u
ulimit -u 8192

  • 為了使參數(shù)永久生效,加配置添加到/etc/sysctl.conf中,并使其立即生效
  • 第3、4條語(yǔ)句默認(rèn)為sonarqube用戶,可視情況調(diào)整其他用戶名或*
    sed -i '$a\vm.max_map_count=262144' /etc/sysctl.conf
    sed -i '$a\fs.file-max=131072' /etc/sysctl.conf
    sysctl -p
    sed -i '$a\sonarqube - nofile 131072' /etc/security/limits.conf
    sed -i '$a\sonarqube - nproc 8192' /etc/security/limits.conf
  1. 啟動(dòng) postgres 鏡像并查看啟動(dòng)日志
    1)創(chuàng)建數(shù)據(jù)卷
    docker volume create pgdata

2)啟動(dòng)容器

docker run --privileged=true -it --restart=always --name postgres \
-w /var/lib/postgresql/data \
-p 5432:5432 \
-e TZ=Asia/Shanghai \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=postgres \
-v pgdata:/var/lib/postgresql/data \
-d postgres:15.4

3)查看日志
docker logs -f postgres (Ctrl+C結(jié)束命令)

4)創(chuàng)建sonar數(shù)據(jù)庫(kù)

export PGPASSWORD=postgres
docker exec -it postgres psql -U postgres -c "CREATE DATABASE sonar;"
unset PGPASSWORD
  1. 啟動(dòng) sonarqube 鏡像并查看啟動(dòng)日志
    1)啟動(dòng)容器(注意:調(diào)整17.31.34.24為實(shí)際的主機(jī)IP)
docker run --privileged=true -it --restart=always --name sonarqube \
-w /opt/sonarqube \
-p 9000:9000 \
-e TZ=Asia/Shanghai \
-e ALLOW_EMPTY_PASSWORD=yes \
-e SONAR_JDBC_URL="jdbc:postgresql://17.31.34.24:5432/sonar" \
-e SONAR_JDBC_USERNAME=postgres \
-e SONAR_JDBC_PASSWORD=postgres \
-v /opt/sonarqube/logs:/opt/sonarqube/logs \
-v /opt/sonarqube/conf:/opt/sonarqube/conf \
-v /opt/sonarqube/data:/opt/sonarqube/data \
-v /opt/sonarqube/extensions:/opt/sonarqube/extensions \
-d sonarqube:9.9-community

2)查看日志
docker logs -f sonarqube

【FAQ】:

  1. max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
    解決方案:執(zhí)行上述步驟4的第一步
  1. 訪問(wèn) sonarqube
    默認(rèn):{主機(jī)IP}:9000 (admin/admin)
  1. 安裝插件:將插件(jar 文件)復(fù)制到$SONAR_INSTALL_DIR/extensions/plugins目錄下并重新啟動(dòng)
    cp -rf /opt/docker_image/plugins /opt/sonarqube/extensions/

【后續(xù)文章】

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容