開發(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)你愉快使用C小5谖碱茁!

問(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)址入口,雖然常見插件可以通過(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)的開發(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

為方便各位硝逢,整理的插件包見:sonarqube_extensions.tar.gz

1.4 其他

分類 文件名稱 描述 下載地址
docker 鏡像 postgres 用于 sonarqube 的Database,可以選擇其他數(shù)據(jù)庫(kù)(如:Oracle等)
開發(fā)插件 SonarLint 訪問(wèn) SonarLint所有版本,根據(jù)自己jetbrains產(chǎn)品版本選擇對(duì)應(yīng)版本進(jìn)行下載
開發(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)可以打開的最大文件句柄數(shù)(查看當(dāng)前參數(shù)值:sysctl fs.file-max
sysctl -w fs.file-max=131072

3)調(diào)整當(dāng)前用戶進(jìn)程可以打開的最大文件句柄數(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)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市沪羔,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌象浑,老刑警劉巖蔫饰,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異愉豺,居然都是意外死亡篓吁,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門蚪拦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)杖剪,“玉大人节腐,你說(shuō)我怎么就攤上這事≌瑁” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵饱苟,是天一觀的道長(zhǎng)孩擂。 經(jīng)常有香客問(wèn)我,道長(zhǎng)箱熬,這世上最難降的妖魔是什么类垦? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮城须,結(jié)果婚禮上蚤认,老公的妹妹穿的比我還像新娘。我一直安慰自己糕伐,他們只是感情好砰琢,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著良瞧,像睡著了一般陪汽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上褥蚯,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天挚冤,我揣著相機(jī)與錄音,去河邊找鬼赞庶。 笑死训挡,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的歧强。 我是一名探鬼主播澜薄,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼誊锭!你這毒婦竟也來(lái)了表悬?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤丧靡,失蹤者是張志新(化名)和其女友劉穎蟆沫,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體温治,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡饭庞,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了熬荆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片舟山。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出累盗,到底是詐尸還是另有隱情寒矿,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布若债,位于F島的核電站符相,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蠢琳。R本人自食惡果不足惜啊终,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望傲须。 院中可真熱鬧蓝牲,春花似錦、人聲如沸泰讽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)已卸。三九已至肄渗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間咬最,已是汗流浹背翎嫡。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留永乌,地道東北人惑申。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像翅雏,于是被迫代替她去往敵國(guó)和親圈驼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容