SonarQube merupakan sebuah aplikasi open-source berbasis JAVA yang berfungsi untuk memeriksa kualitas kodingan yang kalian buat secara berkelanjutan. Jadi untuk kalian yang ingin tahu apakah kodingan kalian memiliki bugs atau vulnerabilities dan di-review secara otomatis, maka aplikasi SonarQube ini adalah jawaban yang tepat. Dan Kerennya lagi, SonarQube ini mendukung pemeriksaan hingga 20 bahasa pemrograman.
- Baca Juga: Instalasi Jenkins 2.235 di CentOS 7 Server
Sebelum melakukan instalasinya, ada beberapa hal yang perlu disiapkan, yaitu:
1 – Persyaratan
Software
- Java (OpenJDK 11)
- PostgreSQL 10 atau 9.3-9.6
Hardware
- Server dengan RAM >=2GB
- System setting untuk Linux (vm.max_map_count >=262144 dan fs.file-max >= 65536)
2 – Lakukan Update System
Caranya dengan menjalankan perintah:
sudo yum update
3 – Menonaktifkan Selinux
Caranya dengan menjalankan perintah:
sudo vi /etc/selinux/config
Ubah “selinux=enforcing” menjadi “selinux=disabled”
selinux=disabled
Untuk menonaktifkan selinux secara tidak permanen, jalankan perintah:
sudo setenforce 0
Untuk melihat status dari selinux, jalankan perintah:
sestatus
4 – Menambahkan System Settings
Seperti yang sudah dijelaskan di atas bahwa nilai vm.max_map_count >=262144 dan fs.file-max >= 65536. Untuk mengubahnya, jalankan perintah:
sudo vi /etc/sysctl.conf
dan tambahkan
vm.max_map_count=262144
fs.file-max=65536

5 – Installing JAVA
Karena aplikasi ini berbasis JAVA, maka kalian harus melakukan instalasi openJDK. versi yang kalian butuhkan adalah versi 11. Untuk melakukannya, jalankan perintah:
sudo yum update sudo yum install java-11-openjdk-devel

apabila kalian memiliki lebih dari 1 versi openJDK dan sedang menggunakan versi sebelum versi 11, maka kalian harus mengubahnya dan menjadikan openJDK versi 11 sebagai yang default. Cara melakukannya adalah dengan menjalankan perintah:
sudo update alternatives --config java
Pilih yang versi 11

Untuk benar memastikan apakah openJDK11 yang menjadi versi default, jalankan perintah:
java -version

6 – Instalasi PostgreSQL 10
PostgreSQL merupakan database yang akan digunakan oleh aplikasi SonarQube. Sebelum melakukan instalasinya, terlbeih dahulu kalian harus menambahkan repositorinya. Caranya dengan memasukkan perintah berikut:
yum install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
Jika sudah ditambahkan, baru instalasi paketnya dengan menjalankan perintah:
yum install postgresql10-server postgresql10-contrib

Berikutnya adalah inisialisasi database. Caranya dengan menjalankan perintah:
/usr/pgsql-10/bin/postgresql-10-setup initdb

Ubah file pg_hba.conf; Ganti kata “peer” menjadi “trust” dan “ident” menjadi “md5”
vi /var/lib/pgsql/10/data/pg_hba.conf
Sebelum

Sesudah

Untuk membuat service PostgreSQL otomatis berjalan ketika server di-restart, jalankan perintah:
sudo systemctl enable postgresql-10

Sekarang jalankan service-nya dan periksa statusnya dengan perintah:
systemctl start postgresql-10 systemctl status postgresql-10

Ganti default password dari Postgres user dengan perintah:
passwd postgres

Usai mengganti password, sekarang waktunya login dengan user postgres. Caranya:
su - postgres
Buat user baru untuk SonarQube dengan perintah:
createuser <nama_user>
Sekarang masuk ke dalam PostgreSQL shell. Caranya dengan mengetikkan perintah:
pgsql
Sekarang waktunya untuk membuat password baru untuk user yang baru saja kalian buat (untuk database SonarQube). Jalankan perintah:
alter user <nama_user> with encrypted password <password_barunya>;
Sesudah itu, kalian bisa membuat database baru dengan owner user yang baru saja kalian buat. Caranya:
create database <nama_daatabase> owner <nama_user>;

Keluar dari pgsql shell dan kemudian keluar dari user postgres. Ketik:
\q exit
7 – Unduh dan Konfigur SonarQube
OpenJDK sudah terpasang, PostgreSQL juga sudah berjalan, kini saatnya mengunduh paaket SonarQube. Kali ini paket tersebut akan diunduh di folder /opt. Untuk mengunduhnya, silakan jalankan perintah berikut:
cd /opt
versi yang akan digunakan pada postingan ini aadalah SonarQube versi 7.9.x LTS. Untuk versi lengkapnya bisa dilihat DI SINI
wget -c https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.9.1.zip

Setelah paket terunduh sempurna, waktunya untuk mengekstraknya. Caranya:
unzip sonarqube-7.9.1.zip
Kemudian ubah nama direktorinya dari ‘sonarqube-7.9.1’ menjadi ‘sonarqube’ dengan perintah:
mv sonarqube-7.9.1 sonarqube
Sekarang waktunya untuk memodifikasi file sonar.properties. Ada beberapa perubahan yang perlu dilakukan pada file tersebut. Diantaranya username, password, dan URL dari PostgreSQL. Perubahan yang perlu kalian lakukan adalah:
Temukan baris berikut, uncomment dan modifikasi nilainya
sonar.jdbc.username=<user_postgre> sonar.jdbc.password=<password_user_postgre> sonar.jdbc.url=jdbc:postgresql://<ip_postgre>/<db_postgre>

sonar.web.host=<ip_akses> sonar.web.port=<default_port> sonar.web.javaOpts=-server -Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError sonar.search.javaOpts=-server -Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError

sonar.path.data=/var/sonarqube/data
sonar.path.temp=/var/sonarqube/temp

Jika sudah semua, simpan dan kemudian keluar dari editor yang kalian gunakan.
Untuk menjalankan service SonarQube ini, kalian akan membuat user di OS terlebih dahulu. Caranya:
useradd <nama_user>
buat password untuk user tersebut.
passwd <nama_user>

Ubah folder permission SonarQube yang ada di direktori /opt menjadi milik user yang baru saja kalian buat. Caranya:
sudo chown -R <user>:<group> /opt/sonarqube
Berikutnya adalah membuat direktori untuk elasticsearch yang sudah kalian tambahkan di sonar.properties tadi. Setelah itu, ubah kepemilikan direktori tersebut menjadi milik user sonar. Caranya:
mkdir -p /var/sonarqube/data
mkdir -p /var/sonarqube/temp
chown -R sonar:sonar /var/sonarqube

Tahap berikutnya adalah membuat SonarQube ini menjadi sebuah service. Untuk mewujudkannya, buat sebuah file bernama sonarqube.service pada direktori systemd dan isi file tersebut dengan perintah:
vi /etc/systemd/system/sonarqube.service
Tambahkan baris berikut:
[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 LimitNOFILE=65536 LimitNPROC=4096 User=sonar Group=sonar Restart=on-failure [Install] WantedBy=multi-user.target

reload “systemctl” daemon dan aktifkan sonar ketika booting dengan perintah:
systemctl daemon-reload systemctl enable sonarqube.service

Sekarang jalankan service-nya dan pantau hasilnya dengan perintah:
systemctl start sonarqube.service systemctl status sonarqube.service

Sekaarang service-nya sudah berjalan.
8 – Modifikasi Aturan Firewall
Secara default, SonarQube akan berjalan di port 9000. Apabila kalian memang menggunakan port tersebut dan ingin mengaksesnya dari luar, maka kalian harus membuat CentOS mengizinkan port tersebut. Caranya:
firewall-cmd --zone=public --add-port=9000/tcp --permanent firewall-cmd --reload iptables-save

9 – Konfigurasi Reverse Proxy
Untuk ‘mempermudah’ pengaksesan SonarQube ini, lebih baik bila ditambahkan Nginx di depan aplikasi sebagai reverse proxy. Cara melakukan instalasi Nginx menjadi reverse proxy adalah seperti berikut:
Install Nginx. Jalankan service-nya dan aktifkan secara otomatis saat booting dengan perintah:
sudo yum install -y nginx

sudo systemctl start nginx sudo systemctl enaable nginx

Tahap berikutnya, setelah melakukan instalasi nginx, adalah dengan memasang SSL. Untuk instalasi SSL menggunakan Certbot, silakan lihat caranya DI SINI
Jika sudah memiliki sertifikat untuk dipasang di Nginx, sekarang adalah waktunya untuk melakukan konfigurasinya. Buat sebuah konfigurasi di folder conf.d
sudo vi /etc/nginx/conf.d/sonar.conf
Masukkan konfigurasi berikut sebagai isinya:
upstream <nama_upstream> { server 127.0.0.1:9000 fail_timeout=0; } server { listen 80; server_name <nama_server>; return 301 https://<nama_server>$request_uri; } server { listen 443 ssl; server_name <nama_server>; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA256:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EDH+aRSA+AESGCM:EDH+aRSA+SHA256:EDH+aRSA:EECDH:!aNULL:!eNULL:!MEDIUM:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED"; add_header Strict-Transport-Security "max-age=31536000"; ssl_certificate <lokasi_public_key>; ssl_certificate_key <lokasi_private_key>; gzip on; gzip_types text/plain text/css application/javascript application/json; gzip_vary on; location / { proxy_set_header Host $host:$server_port; 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 $scheme; proxy_redirect http:// https://; proxy_pass http://<nama_upstream>; # Required for new HTTP-based CLI proxy_http_version 1.1; proxy_request_buffering off; proxy_buffering off; # Required for HTTP-based CLI to work over SSL add_header 'X-SSH-Endpoint' '<nama_server>:50022' always; } }
Jika sudah, simpan dan kemudian keluar dari editor tersebut. Selanjutnya adalah memeriksa syntax-nya apakah sudah benar atau belum dengan menjalankan perintah:
sudo nginx -t

Jika sudah oke, tidak ada masalaha sama sekali, restart service nginx dengan perintah:
sudo systemctl restart nginx
10 – Modifikasi Aturan Firewall
Jika firewall kalian diaktifkan, jalankan perintah berikut untuk mengizinkan traffic https:
firewall-cmd --zone=public --permanent --add-service=https firewall-cmd --reload

11 – Akses SonarQube
Semua sudah kalian lakukan. Sekarang waktunya mengakses SonarQube melalui browser. Caranya:
https://<nama_server>

Tekan login dan kalian akan dihadapkan dengan dengan login page

*****
Itu tadi cara melakukan instalasi SonarQube di Centos7 Server. Semoga informasinya bisa berguna ya 🙂
Tambahan
Untuk memantau proses dari SonarQube, ada beberapa file log yang bisa kalian periksa:
- Service Logs
tail -100f /opt/sonarqube/logs/sonar.log - Web Server Logs
tail -100f /opt/sonarqube/logs/web.log - ElasticSearch Logs
tail -100f /opt/sonarqube/logs/es.log - Compute Engine Logs
tail -100f /opt/sonarqube/logs/ce.log
