Panduan cara install SonarQube di Ubuntu. Pada tutorial ini saya menggunakan Linux Ubuntu 20.04 LTS untuk menginstall SonarQube versi 9.5 (saat tutorial ini dibuat). Sepsifikasinya
- CPU: 1
- RAM: 2GB
- Disk: 40GB
Untuk provider yang saya gunakan adalah AWS EC2, Anda bebas menyewa VPS/cloud hosting di manapun, spesifikasi minimal seperti di atas, untuk rekomendasi produksi, minimal 2 CPU core dan 4GB RAM.
Sebelum ke langkah instalasi dan sebagai catatan saya pribadi berikut sekilas tentang SonarQube.
SonarQube adalah alat sumber terbuka (open source) yang dapat digunakan untuk menganalisis kualitas source code. SonarQube dapat mendeteksi bug, vulnerabilities, security black holes, and code smells pada kode.
SonarQube dibundel dengan penganalisis kode statis untuk lebih dari 27 bahasa pemrograman. SonarQube melakukan pemeriksaan kode berkelanjutan menggunakan ribuan aturan analisis kode statis otomatis.
Jadi dengan SonarQube kita dapat melakukan analisis kode secara manual atau berintegrasi dengan alat CI/CD DevOps seperti Jenkins atau sejenisnya.
Referensi: Sonarqube documentation.
Modifikasi Kernel System Limits
Karena SonarQube menggunakan Elasticsearch untuk menyimpan indeksnya di direktori MMap FS, kita perlu mengatur parameter kernel sesuai arahkan di dokumentasi SonarQube seperti di bawah ini agar bersifat permanen kita atur ke dalam file /etc/sysctl.conf
. Kalian juga bisa menggunakan perintah sysctl
untuk pengaturan secara dinamis untuk current session.
sudo nano /etc/sysctl.conf
Tambahkan baris berikut
vm.max_map_count=524288
fs.file-max=131072
ulimit -n 131072
ulimit -u 8192
Jika pengguna yang menjalankan SonarQube (sonar contoh nama user yang akan dibuat dalam tutorial ini) tidak memiliki izin untuk memiliki setidaknya 131072 deskriptor terbuka, maka kita perlu menambahkan ke dalam system limits.
nano /etc/security/limits.conf
Paste baris berikut
sonar - nofile 131072
sonar - nproc 8192
Simpan, kemudian restart
sudo reboot
Referensi: file-max parameter
Install OpenJDK 11
Versi Java yang didukung untuk SonarQube Server adalah 11 sedangkan untuk Scanners adalah versi 11 atau 17. Karena ini server jadi kita install OpenJDK 11.
sudo apt install openjdk-11-jdk -y
Cek dengan perintah: java --version
, hasilnya kira-kira seperti ini
openjdk 11.0.15 2022-04-19
OpenJDK Runtime Environment (build 11.0.15+10-Ubuntu-0ubuntu0.20.04.1)
OpenJDK 64-Bit Server VM (build 11.0.15+10-Ubuntu-0ubuntu0.20.04.1, mixed mode, sharing)
Install dan konfigurasi PostgreSQL
- Buat file repository PostgreSQL
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
- Import repository signing key
wget -q -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
- Update daftar paket
sudo apt-get update
- Install PostgreSQL versi terbaru
sudo apt-get -y install postgresql
- Start dan aktifkan saat reboot
systemctl start postgresql
systemctl enable postgresql
- Ganti password user
postgresql
sudo passwd postgres
- Login sebagai user
postgres
su - postgres
- Membuat user database
sonarqube
createuser sonarqube
- Login ke PostgreSQL monitor
psql
- Atur password untuk user database yang kita buat tadi yakni user
sonarqube
ALTER USER sonarqube WITH ENCRYPTED password 'katasandiku123';
- Membuat nama database
sonarqube
CREATE DATABASE sonarqube OWNER sonarqube;
- Memberikan privileges database ke user
GRANT ALL PRIVILEGES ON DATABASE sonarqube to sonarqube;
- Exit dari postgreSQL monitor
\q
- Exit dari user
postgres
exit
Download dan install SqonarQube
Download SonarQube versi 9 atau yang lebih baru di halaman resmi SonarQube, versi yang saya dapat adalah 9.5.0.56709
cd; sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.5.0.56709.zip
Install unzip dan ekstrak SonarQube
apt install unzip -y
unzip sonarqube-9.5.0.56709.zip
Pindahkan ke direktori /opt
dan rename direktori menjadi sonarqube
dengan perintah berikut
mv sonarqube-9.5.0.56709 /opt/sonarqube
Membuat Group dan User
Buat Group dan User khusus untuk SonarQube dengan nama sonar
- Buat Group
sonar
sudo groupadd sonar
- Buat user
sonar
, arahkan direktori user ke/opt/sonarqube
dan-g
masukkan kedalam groupsonar
sudo useradd -d /opt/sonarqube -g sonar sonar
- Izinkan user dan group
sonar
mengakses direktori/opt/sonarqube
chown -R sonar:sonar /opt/sonarqube
Melakukan konfigurasi SonarQube
- Edit konfigurasi SonarQube
sudo nano /opt/sonarqube/conf/sonar.properties
- Termukan baris ini, hilangkan tanda komentar
#
dan atur user serta password database PostgreSQLnya sesuai yang telah dibuat pada langkah sebelumnya
sonar.jdbc.username=sonar
sonar.jdbc.password=katasandiku123
- Termukan baris
sonar.jdbc.url=jdbc:postgresql
kemudian ganti seperti di bawah ini
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube
- Termukan baris ini dan hilangkan tanda komentar
#
, kemudian simpan dan exit dari editor nano
sonar.web.host=0.0.0.0
- Edit sonar script
sudo nano /opt/sonarqube/bin/linux-x86-64/sonar.sh
- Ganti baris
#RUN_AS_USER=
menjadi
RUN_AS_USER=sonar
Simpan dan keluar dari text editor nano
Setup Systemd service
Buat file untuk service systemd SonarQube
sudo nano /etc/systemd/system/sonar.service
Isinya
[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=131072
LimitNPROC=8192
[Install]
WantedBy=multi-user.target
Sekarang kita bisa mengontrolnya dengan perintah systemctl
Menjalankan SonarQube
sudo systemctl start sonar
Melihat status SonarQube
sudo systemctl status sonar
Menjalankan SonarQube ketika system reboot
sudo systemctl enable sonar
Tunggu kira-kira 15-30 detik.
Pada tahap ini, instalasi SonarQube sebenarnya sudah selesai, sekarang Anda bisa mengakses SonarQube melalui browser dengan alamat IP pada port 9000
.
Namun biar lebih efektif terutama pada kasus di perusahaan yang punya banyak server, kita perlu map DNS domain atau subdomain ke IP server SonarQube ini. Selain mudah mengingatnya juga lebih secure karena bisa diimplementasikan juga sertifikat SSL dari Let’s Encrypt via certbot untuk sistem keamanan berbasis web ini.
Jadi langkah selanjutnya (optional) kita akan memanfaatkan NGINX sebagai reverse proxy. Sekarang buat record DNS type A dan arahkan ke IP publik server, contoh: sonar.idnetter.com
Install NGINX dan Certbot
sudo apt install -y nginx certbot python3-certbot-nginx
Membuat VirtualHost
sudo nano /etc/nginx/sites-available/sonar.idnetter.com.conf
Isinya
server {
listen 80;
server_name sonar.idnetter.com;
location / {
proxy_pass http://127.0.0.1:9000;
}
}
Aktifkan virtual host
ln -s /etc/nginx/sites-available/sonar.idnetter.com.conf /etc/nginx/sites-enabled/sonar.idnetter.com.conf
Restart Nginx
sudo systemctl restart nginx
Install SSL
sudo certbot --nginx -d sonar.idnetter.com
Script certbot ini interaktif, jawab saja dengan ketik alamat email dan Y
. Untuk pertanyaan terakhir pilih nomor 2
agar semua trafik dipaksa redirect ke https
Restart Nginx
sudo systemctl restart nginx
Finish, sekarang SonarQube bisa diakses melalui subdomain. Semoga bermanfaat.