実行環境
- amazon linux 2 t2.medium
※java,esなどを動かすためある程度のスペックが必要です。
t2.micro, t2.midiumではメモリ不足ですぐにプロセスが殺害されます。。。
公式ドキュメントにはRAM3GBが最低条件と記載ありましたが、もっと必要かと。
SonarQubeとは
オープンソースの静的解析ツール
私たちの書いたコードを全自動でレビューしてくれて、エラーの可能性や脆弱性のある個所を教えてくれます
主な機能は以下のような感じ
- 重複コードの検出
- サイクロマチック数の計測
- 脆弱性のあるコードの検出
- バグを誘発しそうなコードの検出
- 指摘されたissueの管理
APIなどでなく、専用のサーバにインストールして使用するためオンプレ環境などでも利用できるのも利点。
SonarQube構成
公式の画像がとても分かりやすいです。
専用のsonarqubeサーバを立てて、そこに解析したいコードをリクエストする形ですね。
javaインストール
sonarqubeサーバにはjava17の開発環境(Oracle JRE か OpenJDK)が必要なので入れます。(2023年2月現在)
yum listにもamazon-linux-extrasにも17がないためwgetで入れます。めんどい。
# openjdk取得
$ wget https://download.java.net/java/GA/jdk17/0d483333a00540d886896bac774ff48b/35/GPL/openjdk-17_linux-x64_bin.tar.gz
# 圧縮されているのでtar xvfで展開
$ tar xvf openjdk-17_linux-x64_bin.tar.gz
# 展開したフォルダを/optへ移動
$ sudo mv jdk-17 /opt/
# teeコマンドで設定するためのファイルを記述
$ sudo tee /etc/profile.d/jdk.sh <<EOF
#!/bin/sh
export JAVA_HOME=/opt/jdk-17
export PATH=\$PATH:\$JAVA_HOME/bin
EOF
# 設定ファイルを反映させるためsourceコマンドで一度実行
$ source /etc/profile.d/jdk.sh
# 反映されたか確認
$ echo $JAVA_HOME
==> /opt/jdk-17
# インストールされたjavaのバージョン確認
$ java -version
==> openjdk version "17" 2021-09-14
OpenJDK Runtime Environment (build 17+35-2724)
OpenJDK 64-Bit Server VM (build 17+35-2724, mixed mode, sharing)
# 圧縮ファイルは不要なので削除
$ rm openjdk-17_linux-x64_bin.tar.gz
DBインストール
公式のドキュメントにリストされている対応データベースをインストール。(表にはないですが、mysqlもいけるぽいです。)
今回はPostgresql14をインストールします。サーバがamazonlinux2なのでamazon-linux-extrasつかいます。
# ダウンロードしたいトピックの有効化
$ sudo amazon-linux-extras enable postgresql14
# yumでインストール
$ sudo yum install postgresql postgresql-server
# 自動起動有効化
$ sudo systemctl enable postgresql.service
# postgresユーザにログイン
$ sudo su - postgres
# postgresql初期化
$ initdb --encoding=UTF-8 --no-locale
# postgresqlユーザからログアウト
$ exit
# postgresql.confファイルを編集してpostsqlに接続できるように0.0.0.0をlisten
$ sudo vi /var/lib/pgsql/data/postgresql.conf
<< listen_addresses = '0.0.0.0'
$ sudo vi /var/lib/pgsql/data/pg_hba.conf
<< host all all 0.0.0.0/0 md5
# postgresqlを起動
$ sudo systemctl start postgresql
# psqlへ接続しユーザ, データベースを作成
$ psql template1 postgres
$ create user sonar with password 'sonar' createdb;
$ \c template1 sonar
$ create database sonar;
$ exit
SonarQubeインストール
とりあえずsonarqube運用するためのlinuxユーザ作成
$ sudo useradd sonarqube
また前提条件として、sonarqubeを動かすためには以下の条件が必要です。
-
vm.max_map_count
(メモリマップ領域の最大数)が524,288以上 -
fs.file-max
が131,072以上 - 131072以上のファイルディスクリプターが扱える
- 8192以上のスレッドが扱える
以上を満たすためにOSのパラメータを編集します。
# カーネルパラメータを調整
$ sudo vi /etc/sysctl.d/99-sonarqube.conf
<< fs.file-max=65536
vm.max_map_count=262144
# Ulimitを設定
$ sudo vi /etc/security/limits.d/99-sonarqube.conf
<< sonarqube - nofile 65536
sonarqube - nproc 2048
# OSを再起動して変更したカーネルパラメータを反映
$ sudo shutdown -r now
sonarqubeをダウンロード
※ダウンロードソースは公式のDistributionsから適切なバージョンを選択して入れてください。ここでは執筆現在の最新の9.9.0を入れます。
# wgetコマンドでsonarqubeのzipファイル取得
$ wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.9.0.65466.zip -O /tmp/sonarqube.zip
# ダウンロードしたzipファイルの解凍
$ unzip /tmp/sonarqube.zip
# 解凍したsonarqubeを/usr/localへ移動(これはsonarqubeユーザが使用するため/optでなく/usr/local)
$ sudo mv sonarqube-9.9.0.65466 /usr/local/
# unixベースのシステムではsonarqubeをrootユーザでは実行できないので、sonarqubeユーザに権限を変更
$ sudo chown -R sonarqube:sonarqube /usr/local/sonarqube-9.9.0.65466/
sonarqubeが先ほどインストールしたpostgresqlに接続するように設定