如果您是雲原生開發人員(或任何其他開發人員),可能需要一款工具來分析代碼,幫助查找安全問題、缺陷、漏洞、異常和一般問題。如果您只從事一個小項目,可以通過老式的手動方法來解決。如果您經常為CI/CD之類的項目編寫代碼,工作量決定了您可能無法手動檢查。這時如何是好?
您總是可以安裝SonarQube之類的工具。這個基於Web的軟體擅長使開發人員能夠編寫更乾淨更安全的代碼。如果您恰好擁有本地Linux伺服器或者AWS、谷歌雲或Azure之類的雲帳戶,可以免費部署SonarQube社區版。該版本有以下功能:
為15種廣泛使用的語言支持靜態代碼分析
缺陷和漏洞檢測代碼中的安全熱點審查代碼異常跟蹤技術債務解決代碼質量度量指標和歷史記錄CI/CD集成可擴展,有50多個社區插件您還可以從版本矩陣中查看SonarQube收費版本的功能下面介紹在Ubuntu Server 20.04上安裝並運行SonarQube社區版的過程。
您需要什麼?
Ubuntu Server 20.04的運行實例擁有sudo特權的用戶如何修改內核系統限制?
我們要做的頭件事是對幾個內核系統限制進行一番修改。使用以下命令打開sysctl.conf文件進行編輯:
sudo nano /etc/sysctl.conf
將以下幾行添加到該文件的末尾:
vm.max_map_count=262144 fs.file-max=65536 ulimit -n 65536 ulimit -u 4096
保存並關閉文件。
下一步,我們將編輯limits.conf。用以下命令打開該文件:
sudo nano /etc/security/limits.conf
在該文件末尾,添加以下內容:
sonarqube - nofile 65536 sonarqube - nproc 4096
保存並關閉文件。
重啟系統,以便變更生效。
如何安裝OpenJDK 11?
我們現在將安裝OpenJDK依賴項。用以下命令來安裝:
sudo apt-get install openjdk-11-jdk -y
如何安裝和配置PostgreSQL?
針對SonarQube的資料庫部分,我們將使用PostgreSQL(已棄用了支持MySQL的功能)。由於標準存儲庫中沒有PostgreSQL,我們必須添加它。
用以下命令下載並安裝GPG密鑰:
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
用以下命令創建新的apt存儲庫:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
用以下命令安裝PostgreSQL:
sudo apt install postgresql postgresql-contrib -y
用以下命令啟動並啟用資料庫服務:
sudo systemctl enable postgresql sudo systemctl start postgresql
用以下命令設置PostgreSQL密碼:
sudo passwd postgres
會提示您輸入並核實資料庫管理員用戶的新密碼。
用以下命令切換到postgres用戶:
su - postgres
用以下命令為SonarQube資料庫創建新用戶:
createuser sonar
用以下命令登錄到PostgreSQL控制臺:
psql
用以下命令為新的sonar用戶設置密碼:
ALTER USER sonar WITH ENCRYPTED PASSWORD 'password';
密碼是不重複的強密碼。
用以下命令創建新的sonarqube資料庫:
CREATE DATABASE sonarqube OWNER sonar;
用以下命令為資料庫授予必要的權限:
GRANT ALL PRIVILEGES ON DATABASE sonarqube to sonar;
用以下命令退出PostgreSQL控制臺:
\q
用以下命令退出postgres用戶:
exit
用以下命令啟用PostgreSQL服務:
sudo systemctl enable postgresql
如何下載並解壓SonarQube?
處理好資料庫後,我們現在可以下載並解壓SonarQube。最新版是8.5.1.3814。您應該檢查下載連結,確保下載的是最新版。
想下載SonarQube,執行該命令:
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.5.1.38104.zip
用以下命令解壓該文件:
unzip sonarqube*.zip
如果您發現沒有unzip命令,用以下命令安裝它:
sudo apt-get install zip -y
用以下命令移動並重命名剛創建的目錄:
sudo mv sonarqube-8.5.1.38104 /opt/sonarqube
如果您下載的版本不是8.5.1.38104,確保用上述命令更改該版本號。
如何創建新的SonarQube組和用戶?
現在我們需要為SonarQube創建新的組和用戶。用以下命令創建一個組:
sudo groupadd sonar
下一步,用以下命令創建用戶,並添加到組(並將其主目錄設成/opt/sonarqube目錄):
sudo useradd -c "SonarQube - User" -d /opt/sonarqube/ -g sonar sonar
用以下命令更改/opt/sonarqube目錄的所有權:
sudo chown -R sonar:sonar /opt/sonarqube/
如何配置SonarQube?
下一步是配置SonarQube。用以下命令打開配置文件來編輯:
sudo nano /opt/sonarqube/conf/sonar.properties
在該文件中尋找下列行:
#sonar.jdbc.username= #sonar.jdbc.password= #sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube #sonar.search.javaOpts=-Xmx512m -Xms512m -XX:+HeapDumpOnOutOf
您需要從上面四行刪除#字符,並將第一行改成:
sonar.jdbc.username=sonar
更改密碼行,加入為sonar PostgreSQL用戶創建的密碼。
還應該編輯下列行,確保它們體現了您在下面看到的內容:
sonar.jdbc.username=sonar sonar.jdbc.password=PASSWORD sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube sonar.web.host=0.0.0.0 sonar.web.port=9000 sonar.web.javaAdditionalOpts=-server sonar.search.javaOpts=-Xmx512m -Xms512m -XX:+HeapDumpOnOutOfMemoryError sonar.log.level=INFO sonar.path.logs=logs
其中PASSWORD是您為sonar PostgreSQL用戶設置的密碼。
保存並關閉文件。
如何創建systemd文件並啟動服務?
現在不妨創建systemd文件,以便可以控制SonarQube服務。用以下命令創建文件:
sudo nano /etc/systemd/system/sonarqube.service
在該文件中,粘貼以下內容:
[Unit] Description=SonarQube service After=syslog.target network.target [Service] Type=forking ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop User=sonar Group=sonar Restart=always LimitNOFILE=65536 LimitNPROC=4096 [Install] WantedBy=multi-user.target
保存並關閉文件。
用以下命令啟用並啟動服務:
systemctl enable sonarqube systemctl start sonarqube
如何安裝和配置NGINX?
我們將使用NGINX作為SonarQube的反向代理。想安裝NGINX,執行該命令:
sudo apt-get install nginx -y
用以下命令啟動並啟用NGINX服務:
sudo systemctl enable nginx sudo systemctl start nginx
用以下命令創建新的NGINX配置文件:
sudo nano /etc/nginx/sites-enabled/sonarqube.conf
在該文件中,粘貼以下內容:
server{ listen 80; server_name sonarqube.da.com; access_log /var/log/nginx/sonar.access.log; error_log /var/log/nginx/sonar.error.log; proxy_buffers 16 64k; proxy_buffer_size 128k; location / { proxy_pass http://127.0.0.1:9000; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto http; } }
保存並關閉文件。
用以下命令重啟NGINX:
sudo systemctl restart nginx
如何訪問SonarQube?
SonarQube現已安裝,打開瀏覽器,指向http://SERVER_IP:9000(SERVER_IP是您伺服器的IP位址)。您會看到歡迎頁面(圖A)。
圖A:SonarQube歡迎頁面還充當儀錶板
點擊「登錄」,使用登錄信息admin/admin。一旦登錄進去,您會看到SonarQube主頁面,您可以在這裡開始上傳有待分析的代碼(圖B)。
圖B:SonarQube主頁面已準備就緒
恭喜您有了一款功能強大的工具,可幫助編寫沒有問題的乾淨代碼。經常且明智地使用它。