Deploy SonarQube on Alibaba Cloud: Cara Instalasi dan Konfigurasi SonarQube menggunakan Rocky Linux 9

Cara deploy sonarqube security di Alibaba Cloud menggunakan Rocky Linux 9
Sonarqube Security

Tools Static Code Analysis Open Source yang membantu meningkatkan kualitas kode dengan mendeteksi bug, kerentanan keamanan, dan juga maintenance kode. Dalam artikel ini, saya akan membahas cara menginstal dan mengonfigurasi SonarQube di Alibaba Cloud menggunakan ECS dan PostgreSQL.

Mengapa Menggunakan SonarQube?

SonarQube menjadi Tools pendukung yang sangat penting dalam siklus pengembangan perangkat lunak karena beberapa alasan:

  • Deteksi Bug Dini: Menganalisis kode untuk menemukan bug dan masalah keamanan sebelum masuk ke environment Production.
  • Peningkatan Kualitas Kode: Menyediakan laporan detail mengenai Duplicate Code, Complexity Code, dan Standards compliance.
  • Integrasi CI/CD: Bisa dikonfigurasi dengan CI/CD pipeline.
  • Dukungan Multi-Bahasa: SonarQube mendukung berbagai bahasa pemrograman seperti Java, Python, JavaScript, dan lainnya.

Persyaratan Sebelum Instalasi

  • Akun Alibaba Cloud yang aktif
  • Instance ECS dengan Sistem Operasi Rocky Linux 9
  • Akses root atau pengguna dengan hak akses sudo
  • PostgreSQL sebagai database untuk SonarQube

1. Menyiapkan Instance ECS di Alibaba Cloud

Masuk ke Alibaba Cloud dan buat instance ECS dengan spesifikasi berikut:

  • OS: Rocky Linux 9
  • CPU: Minimal 2 vCPU
  • RAM: 4GB atau lebih
  • Storage: 20GB atau lebih

2. Pengaturan Konfigurasi Rocky Linux 9

Sebelum instalasi Sonarqube di Rocky Linux 9, anda perlu melakukan konfigurasi seperti, menonaktifkan selinux, membuat user sonar, dan juga menaikan virtual memory java, agar Sonarqube dapat berjalan dengan normal.

2.1 Nonaktifkan Selinux

Jalankan perintah berikut untuk mengubah konfigurasi Selinux di Rocky Linux 9.

Bash
sudo vi /etc/selinux/config

Ubah parameter SELINUX=enforcing menjadi SELINUX=disabled, lalu simpan dan restart server, agar konfigurasi yang sudah dilakukan dapat diterapkan.

Output Result:

Verifikasi Selinux sudah dinonaktifkan dengan cara menjalankan perintah berikut:

Bash
sudo sestatus

2.2 Buat User Sonar

Kemudian buatlah user dengan nama sonar dengan menjalankan perintah dibawah ini:

Bash
sudo useradd sonar

Setelah itu berikan katasandi untuk user sonar

Bash
passwd sonar

Lalu, tambahkan user sonar ke grup wheel di Rocky Linux 9

Bash
sudo usermod -aG wheel sonar

2.3 Tingkatkan Virtual Java Memory

Meningkatkan java virtual memory ini penting untuk memastikan bahwa sonarqube dapat berjalan dengan lancar tanpa masalah terkait memory mapping atau file descriptor.

Edit file /etc/sysctl.conf menggunakana text editor nano/vim.

Bash
sudo vi /etc/sysctl.conf

Tambahkan baris berikut, lalu simpan konfigurasi sysctl.conf.

vm.max_map_count = 262144
fs.file-max = 65536

Terapkan konfigurasi sysctl dengan menjalankan perintah berikut:

Bash
sudo sysctl --system

3. Instalasi Java 17

Sonarqube server membutuhkan Java versi 17 agar dapat berjalan dengan normal, untuk itu anda perlu melakukan instalasi java 17 di Rocky Linux 9.

Bash
sudo dnf install java-17-openjdk java-17-openjdk-devel -y

Jika sudah selesai instalasi java, lalu verifikasi java 17 telah terinstal dengan cara menjalankan perintah berikut:

Bash
java --version

Output Result:

4. Instalasi Database PostgreSQL 15

Selanjutnya instalasi dan konfigurasi Database PostgreSQL 15.

Nonaktifkan module bawaan postgresql di rocky linux dengan menjalankan perintah ini:

Bash
sudo dnf -qy module disable postgresql

Tambahkan repositori PostgreSQL 15.

Bash
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Jalankan perintah berikut untuk instalasi PostgreSQL versi 15

Bash
sudo dnf install -y postgresql15-server

Kemudian, inisialiasi database dengan perintah ini.

Bash
sudo /usr/pgsql-15/bin/postgresql-15-setup initdb

Aktifkan service postgresql database pada saat boot dan jalankan service postgresql, serta periksa service postgresql berjalan dengan normal.

Bash
sudo systemctl enable postgresql-15
sudo systemctl start postgresql-15
sudo systemctl status postgresql-15

4.1 Konfigurasi Database PostgreSQL

Selanjutnya adalah konfigurasi lanjutan postgresql database seperti: membuat user database, katasandi database dan juga mengganti timezone ke Asia/Jakarta.

Masuk ke console postgresql dengan cara berikut:

Bash
sudo -u postgres psql

Buat username database sonar, berikan katasandi untuk user sonar dan grant permission untuk user sonar.

Bash
CREATE USER sonar WITH ENCRYPTED PASSWORD 'MyP4ssw0rd';
CREATE DATABASE sonarqube OWNER sonar;
GRANT ALL PRIVILEGES ON DATABASE sonarqube TO sonar;
\q

Ganti timezone yang awal nya UTC menjadi timezone Jakarta.

Bash
sudo sed -i "s/^timezone = .*/timezone = 'Asia\/Jakarta'/" /var/lib/pgsql/15/data/postgresql.conf

Terakhir ganti metode otentifikasi scram-sha-256 menjadi md5 pada file pg_hba.conf

Bash
sudo vi /var/lib/pgsql/15/data/pg_hba.conf

Ganti metode otentifikasi menjadi md5,kemudian simpan konfigurasi.

Bash
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5

Restart database, agar konfigurasi yang sudah dilakukan sebelumnya dapat diterapkan.

Bash
sudo systemctl restart postgresql-15

5. Instalasi SonarQube

Instal tools pendukung yaitu: wget untuk mengunduh file sonarqube dan juga unzip mengekstrak file sonarqube yang sudah di unduh.

Bash
sudo dnf install unzip wget -y

Unduh dan extrak file Sonarqube

Bash
cd /opt
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-25.3.0.104237.zip /opt/
unzip sonarqube-25.3.0.104237.zip
mv sonarqube-25.3.0.104237.zip sonarqube

5.1 Konfigurasi SonarQube

Selanjutnya adalah konfigurasi credentials sonarqube dengan mengedit file sonar.properties dan isi Username Database, Kata sandi Database dan URL Database.

Bash
sudo vi /opt/sonarqube/conf/sonar.properties

Tambahkan baris berikut dan sesuaikan dengan credentials database PostgreSQL yang sudah dibuat sebelumnya, lalu simpan konfigurasi.

Bash
sonar.jdbc.username=sonar
sonar.jdbc.password=MyP4ssw0rd
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube

Ganti hak akses folder beserta file SonarQube secara rekursif kepada user sonar

Bash
sudo chown -R sonar:sonar /opt/sonarqube

Buat systemd “services” file dengan nama sonarqube.service

Bash
sudo vi /etc/systemd/system/sonarqube.service

Kemudian ikuti dan isi konten dibawah ini, dan simpan konfigurasi systemd sonarqube.

Bash
[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

Start service sonarqube dan Aktifkan service pada saat boot server.

Bash
sudo systemctl daemon-reload
sudo systemctl enable sonarqube.service
sudo systemctl start sonarqube.service
sudo systemctl status sonarqube.service

6. Setup dan konfigurasi Domain dan SSL SonarQube

Langkah berikut ini adalah setup dan konfigurasi Domain serta SSL menggunakan Lets’Encrypt pada SonarQube.

6.1 Instalasi Nginx Web Server

Buat file dengan nama nginx.repo di folder yum repositori.

Bash
sudo vi /etc/yum.repos.d/nginx.repo

Lalu, tambahkan repositori nginx berikut ini, dan simpan konfigurasi repositori tersebut.

Bash
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

Kemudin instal Nginx Web Server dengan perintah berikut.

Bash
sudo dnf install nginx -y

Start Nginx service, dan nyalakan service nginx pada saat boot.

Bash
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx

6.2 Konfigurasi Nginx Server Blocks Domain

Buat file dengan nama sonarqube.conf

Bash
sudo vi /etc/nginx/conf.d/sonarqube.conf

Setelah itu ikuti konfigurasi dibawah ini, dan simpan konfigurasi tersebut.

Bash
server {
    # Change this to your dns domain
    server_name sonarqube.example.dev;
    listen      80;
    listen      [::]:80;
    client_max_body_size   50M;
    proxy_buffers 16 64k;
    proxy_buffer_size 128k;

    # security headers
    add_header X-XSS-Protection          "1; mode=block" always;
    add_header X-Content-Type-Options    "nosniff" always;
    add_header Referrer-Policy           "strict-origin-when-cross-origin" always;
    add_header Content-Security-Policy   "default-src 'self' http: https: ws: wss: data: blob: 'unsafe-inline'; frame-ancestors 'self';" always;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

    #log
    access_log  /var/log/nginx/sonarqube.access.log combined buffer=512k flush=1m;
    error_log   /var/log/nginx/sonarqube.error.log warn;

    # gzip compression
    gzip            on;
    gzip_vary       on;
    gzip_proxied    any;
    gzip_comp_level 6;
    gzip_types      text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;

    #proxy sonarqube
    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;
    }
}

Validasi konfigurasi server blocks dan reload nginx

Bash
sudo nginx -t
sudo nginx -s reload

6.3 Generate SSL Certificate Let’s Encrypt

Instal Epel repository dengan menjalankan perintah berikut.

Bash
sudo dnf install -y  \
https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm \
https://dl.fedoraproject.org/pub/epel/epel-next-release-latest-9.noarch.rpm

Selanjutnya instal certbot nginx, dengan mengikuti perintah dibawah ini.

Bash
sudo dnf install yum-utils certbot python3-certbot-nginx -y

Terakhir generate SSL certificate dengan menjalankan perintah ini, lalu ikuti petunjuk sampai selesai.

Bash
sudo certbot

7. Akses SonarQube Dashboard

Buka browser menggunakan Google Chrome atau Mozilla Firefox dan akses:
contoh: https://sonarqube.dika.dev

Login menggunakan default credential:

Username: admin
Password: admin

Screenshots:

Referensi:
Dengan mengikuti langkah-langkah di atas, Anda telah berhasil menginstal dan mengonfigurasi SonarQube di Alibaba Cloud menggunakan ECS dan PostgreSQL. SonarQube sebagai Tools pendukung untuk Developer dalam mendeteksi bug, meningkatkan kualitas kode, Standarisasi Kode dan juga dapat di integrasikan dengan CI/CD Pipeline.

Referensi:

Previous Article

Container Security: Scanning docker image dengan Trivy

Write a Comment

Leave a Comment

Your email address will not be published. Required fields are marked *

Let’s Keep in Touch

Get handpicked content and updates — no noise, just the good stuff.
Sent with care, not robots 🤖