# 使用 SonarQube 做專案弱點掃描 >安裝 SonarQube on Rocky Linux ## 安裝 Java ``` sudo dnf install java-17-openjdk-devel -y ``` :::warning 大型專案在維護時才需要照已下流程安裝 若是小型測試請[點此](#安裝sonarqube簡易版本) ::: ## 安裝資料庫(以 PostgreSQL 為例) 省略 ## 建立資料庫與使用者給 SonarQube 用: ``` sudo su - postgres ``` ``` psql ``` ``` CREATE USER sonar WITH ENCRYPTED PASSWORD 'sonar123'; ``` ``` CREATE DATABASE sonardb OWNER sonar; ``` ``` GRANT ALL PRIVILEGES ON DATABASE sonardb TO sonar; ``` ``` \q ``` ``` exit ``` ## 調整系統參數 SonarQube 需要較高的 vm.max_map_count、fs.file-max 等系統設定。 ``` sudo tee -a /etc/sysctl.conf <<EOF vm.max_map_count=262144 fs.file-max=65536 EOF ``` ``` sudo sysctl -p ``` ## 建專用使用者、下載 SonarQube ``` sudo useradd -m -d /opt/sonarqube -s /bin/bash sonar ``` ``` cd /tmp ``` ``` wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-25.9.0.112764.zip ``` ``` unzip sonarqube-25.9.0.112764.zip ``` ``` sudo mv sonarqube-25.9.0.112764 /opt/sonarqube ``` ``` sudo chown -R sonar:sonar /opt/sonarqube ``` ## 配置 SonarQube (sonar.properties) 設定資料庫連線、Web 主機與port: ``` sudo su sonar ``` ``` vim /opt/sonarqube/sonarqube-25.9.0.112764/conf/sonar.properties ``` ``` sonar.jdbc.username=sonar sonar.jdbc.password=sonar123 sonar.jdbc.url=jdbc:postgresql://localhost/sonardb sonar.web.host=0.0.0.0 sonar.web.port=9000 ``` ## 啟動 SonarQube 建立 /etc/systemd/system/sonarqube.service ``` exit ``` ``` vim /etc/systemd/system/sonarqube.service ``` ``` [Unit] Description=SonarQube service After=network.target [Service] Type=forking # 啟動/停止指令改成完整路徑 ExecStart=/opt/sonarqube/sonarqube-25.9.0.112764/bin/linux-x86-64/sonar.sh start ExecStop=/opt/sonarqube/sonarqube-25.9.0.112764/bin/linux-x86-64/sonar.sh stop ExecReload=/opt/sonarqube/sonarqube-25.9.0.112764/bin/linux-x86-64/sonar.sh restart User=sonar Group=sonar # 系統限制 LimitNOFILE=65536 LimitNPROC=8192 TimeoutStartSec=240 # 設定環境變數(可選,視需要) Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk" Environment="SONARQUBE_HOME=/opt/sonarqube/sonarqube-25.9.0.112764" [Install] WantedBy=multi-user.target ``` 存檔後 reload systemd ``` sudo systemctl daemon-reload ``` 啟用並啟動服務 ``` sudo systemctl enable --now sonarqube ``` 查看服務狀態 ``` sudo systemctl status sonarqube ``` ## 安裝sonarqube簡易版本 (供小型專案用, 已安裝正常版本請跳過) ``` wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-25.9.0.112764.zip ``` ``` unzip sonarqube-25.9.0.112764.zip ``` ``` cd sonarqube-25.9.0.112764 ``` ``` bin/linux-x86-64/sonar.sh start ``` 防火牆記得允許 9000 port ``` sudo firewall-cmd --zone=public --add-port=9000/tcp --permanent ``` 重設防火牆 ``` sudo firewall-cmd --reload ``` ## 安裝 sonarscan ``` cd ~ ``` ``` wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-7.2.0.5079-linux-x64.zip ``` ``` unzip sonar-scanner-cli-7.2.0.5079-linux-x64.zip ``` 改名字 ``` mv sonar-scanner-7.2.0.5079-linux-x64 sonar-scanner-7.2 ``` ``` echo 'export PATH=$PATH:$HOME/sonar-scanner-7.2/bin' >> ~/.bashrc ``` ``` source ~/.bashrc ``` ``` cd sonar-scanner-7.2/conf/ ``` ``` vim sonar-scanner.properties ``` 設定你的 SonarQube URL ``` # SonarQube 伺服器位置 sonar.host.url=http://localhost:9000 ``` 設定好後去你要掃描的資料夾中建立 sonar-project.properties ``` vim sonar-project.properties ``` ``` sonar.projectKey=my_python_project sonar.projectName=My Python Project sonar.projectVersion=1.0 sonar.sources=. sonar.language=py sonar.sourceEncoding=UTF-8 ``` 先去 sonarqube 網頁取得 token ![2025-09-23 17 22 46](https://hackmd.io/_uploads/S1NWDke2lx.png) ![2025-09-23 17 23 19](https://hackmd.io/_uploads/rknzPJl3ll.png) ![2025-09-23 17 23 49](https://hackmd.io/_uploads/SJjEPJlhel.png) 建立一個 token ![image](https://hackmd.io/_uploads/BJjBPJghxx.png) 接著會顯示 token, 請妥善保存 執行掃描 ``` sonar-scanner -Dsonar.login=<你的 token> ``` 掃描完成結果 ![image](https://hackmd.io/_uploads/H125PJx3el.png) 可以到網頁上去看分析報告 ![image](https://hackmd.io/_uploads/r1U2P1g3ge.png)