Cara install SonarQube di Ubuntu

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

  1. 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'
  1. Import repository signing key
wget -q -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
  1. Update daftar paket
sudo apt-get update
  1. Install PostgreSQL versi terbaru
sudo apt-get -y install postgresql
  1. Start dan aktifkan saat reboot
systemctl start postgresql
systemctl enable postgresql
  1. Ganti password user postgresql
sudo passwd postgres
  1. Login sebagai user postgres
su - postgres
  1. Membuat user database sonarqube
createuser sonarqube
  1. Login ke PostgreSQL monitor
psql
  1. Atur password untuk user database yang kita buat tadi yakni user sonarqube
ALTER USER sonarqube WITH ENCRYPTED password 'katasandiku123';
  1. Membuat nama database sonarqube
CREATE DATABASE sonarqube OWNER sonarqube;
  1. Memberikan privileges database ke user
GRANT ALL PRIVILEGES ON DATABASE sonarqube to sonarqube;
  1. Exit dari postgreSQL monitor
\q
  1. 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

  1. Buat Group sonar
sudo groupadd sonar
  1. Buat user sonar, arahkan direktori user ke /opt/sonarqube dan -g masukkan kedalam group sonar
sudo useradd -d /opt/sonarqube -g sonar sonar
  1. Izinkan user dan group sonar mengakses direktori /opt/sonarqube
chown -R sonar:sonar /opt/sonarqube

Melakukan konfigurasi SonarQube

  1. Edit konfigurasi SonarQube
sudo nano /opt/sonarqube/conf/sonar.properties
  1. 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
  1. Termukan baris sonar.jdbc.url=jdbc:postgresql kemudian ganti seperti di bawah ini
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube
  1. Termukan baris ini dan hilangkan tanda komentar #, kemudian simpan dan exit dari editor nano
sonar.web.host=0.0.0.0
  1. Edit sonar script
sudo nano /opt/sonarqube/bin/linux-x86-64/sonar.sh
  1. 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.

Add a comment