Deploy SonarQube on Alibaba Cloud

Cara install dan konfigurasi sonarqube di alibaba cloud
Sonarqube security
Deploy SonarQube di Alibaba Cloud dengan ECS Instance

Cara Instalasi dan Konfigurasi SonarQube menggunakan Rocky Linux 9

SonarQube adalah Tools Static Code Analysis 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

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:

Sonarqube security
Disable Selinux di rocky linux 9

Verifikasi Selinux sudah dinonaktifkan dengan cara menjalankan perintah berikut:

sudo sestatus

2.2 Buat User Sonar

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

sudo useradd sonar

Setelah itu berikan katasandi untuk user sonar

passwd sonar

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

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.

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:

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

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:

java --version

Output Result:

Java 17
Java 17

4. Instalasi Database PostgreSQL 15

Selanjutnya instalasi dan konfigurasi Database PostgreSQL 15.

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

sudo dnf -qy module disable postgresql

Tambahkan repositori PostgreSQL 15

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

sudo dnf install -y postgresql15-server

Kemudian, inisialiasi database dengan perintah ini.

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.

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:

sudo -u postgres psql

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

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.

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

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

Ganti metode otentifikasi menjadi md5,kemudian simpan konfigurasi.

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

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

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.

sudo dnf install unzip wget -y

Unduh dan extrak file Sonarqube

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.

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

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

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

sudo chown -R sonar:sonar /opt/sonarqube

Buat systemd "services" file dengan nama sonarqube.service

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

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

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

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.

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

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

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

sudo dnf install nginx -y

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

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

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

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

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

sudo nginx -t
sudo nginx -s reload

6.3 Generate SSL Certificate Let's Encrypt

Instal Epel repository dengan menjalankan perintah berikut.

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.

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

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

sudo certbot

7. Akses SonarQube Dashboard

Buka browser menggunakan Google Chrome atau Mozilla Firefox dan akses:

https://sonarqube.example.com

Login menggunakan default credential:

Username: admin
Password: admin

Screenshots:

Sonarqube security
Login SonarQube

Sonarqube security
Dashboard homepage SonarQube

Kesimpulan

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:

I like to learn new things about Technology and apply them in my work and than I am always on the lookout for the latest DevOps tools and methodologies

Post a Comment