Adalah impian setiap pengembang untuk memiliki kode yang bersih dan bebas masalah yang dapat dengan mudah digunakan ke dalam lingkungan pementasan dan produksi. Salah satu alat yang dapat membantu Anda mencapai ini adalah dalam pipa CI/CD Anda adalah SonarQube. SonarQube adalah alat lintas platform dan berbasis web yang digunakan untuk pemeriksaan kode sumber secara berkelanjutan. Itu ditulis dalam bahasa Jawa. SonarQube memungkinkan Anda untuk menulis kode yang lebih bersih dan aman dengan memeriksa kode dan mendeteksi bug dan inkonsistensi lainnya.
SonarQube dapat diintegrasikan ke dalam platform seperti GitHub, Gitlab, BitBucket, dan Azure DevOps untuk menyebutkan beberapa platform. Muncul dalam berbagai edisi termasuk edisi Komunitas, Pengembang, Perusahaan, dan Pusat Data.
Dalam tutorial ini, kita mempelajari cara menginstal SonarQube di Ubuntu 20.04 . Kami akan menginstal edisi Komunitas karena gratis untuk mengunduh dan mengaktifkan Sertifikat SSL (https) dengan Ayo Enkripsi dengan menyetel Nginx sebagai proxy terbalik.
Prasyarat
Sebelum memulai, pastikan Anda memenuhi persyaratan berikut:
- Ubuntu 20.04 LTS dengan pengguna sudo yang dikonfigurasi.
- Pastikan sistem Anda memiliki minimal 4 GB RAM dan 2vCPU core
Anda perlu menginstal beberapa alat
$ sudo apt update
$ sudo apt install net-tools unzip vim curl
Juga, Anda perlu meningkatkan kernel memori virtual
$ sudo sysctl -w vm.max_map_count=262144
dengan jumlah maksimum file yang terbuka
$ sudo sysctl -w fs.file-max=65536
dan batasan sumber daya
$ ulimit -n 65536
$ ulimit -u 4096
Anda dapat membuat perubahan tetap ada dengan memodifikasi parameter sistem di /etc/sysctl.conf
file konfigurasi
$ sudo vim /etc/sysctl.conf
Tambahkan baris berikut.
vm.max_map_count=262144
fs.file-max=65536
ulimit -n 65536
ulimit -u 4096
Simpan dan keluar. Setelah itu, buka limits.conf
berkas
$ sudo vim /etc/security/limits.conf
Di bagian paling bawah, tambahkan baris berikut
sonarqube - nofile 65536
sonarqube - nproc 4096
Simpan dan keluar. Agar perubahan diterapkan, reboot server Anda.
Langkah 1:Instal OpenJDK
Karena ditulis dalam Java, SonarQube bergantung pada Java untuk berfungsi. Kami akan menginstal OpenJDK 11 yang menyediakan java.
$ sudo apt install openjdk-11-jdk
Setelah terinstal, Anda dapat memverifikasi versi Java.
$ java -version
Langkah 2:Instal database PostgreSQL
Mulai 2016, SonarQube menghentikan dukungan untuk MySQL dan sekarang hanya mendukung PostgreSQL. Karena itu, kita perlu menginstal database PostgreSQL.
Untuk memulai, unduh dan tambahkan kunci GPG PostgreSQL.
$ wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -
Setelah itu, tambahkan repositori 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'
Kemudian perbarui indeks paket untuk menyinkronkan repositori baru.
$ sudo apt update
Setelah Anda selesai memperbarui daftar paket, instal database PostgreSQL dan dependensinya.
$ sudo apt install postgresql postgresql-contrib
Secara default, layanan PostgreSQL dimulai setelah penginstalan, jika tidak dijalankan, jalankan perintah berikut.
$ sudo systemctl start postgresql
Hanya untuk mengonfirmasi bahwa semuanya berjalan seperti yang diharapkan, verifikasi status berjalannya.
$ sudo systemctl status postgresql
Anda juga dapat mengonfirmasi port yang sedang didengarkan:
$ sudo netstat -pnltu | grep 5432
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 7768/postgres
tcp6 0 0 ::1:5432 :::* LISTEN 7768/postgres
Aktifkan PostgreSQL untuk memulai secara otomatis saat booting:
$ sudo systemctl enable postgresql
Sejauh ini, PostgreSQL kami aktif dan berjalan tanpa hambatan.
Langkah 3:Konfigurasi PostgreSQL
Selanjutnya, kita akan mengatur kata sandi untuk pengguna Postgres yang biasanya datang secara default ketika PostgreSQL diinstal. Untuk melakukannya, jalankan perintah:
$ sudo passwd postgres
Ketik kata sandi dan konfirmasikan. Selanjutnya, beralih ke pengguna Postgres.
$ su - postgres
Selanjutnya, lanjutkan dan buat pengguna database baru.
$ createuser sonar
Setelah selesai, alihkan ke prompt PostgreSQL menggunakan perintah:
$ psql
Dengan akses ke shell PostgreSQL, buat kata sandi untuk pengguna yang baru saja Anda buat.
ALTER USER sonar WITH ENCRYPTED PASSWORD 'strong_password';
Selanjutnya, buat database SonarQube dengan pengguna yang Anda buat sebagai pemiliknya
CREATE DATABASE sonarqube OWNER sonar;
Kemudian, tetapkan atau berikan semua hak istimewa ke penggunaan basis data sedemikian rupa sehingga mereka memiliki semua hak istimewa untuk memodifikasi basis data.
GRANT ALL PRIVILEGES ON DATABASE sonarqube to sonar;
Sekarang keluar dari database.
\q
Langkah 4:Unduh dan konfigurasikan SonarQube
Selanjutnya, kita akan mengunduh file zip biner SonarQube terbaru. Saat ini rilis Community Edition terbaru yang merupakan rilisan Long Term Service ( LTS ) adalah SonarQube versi 9.0.1. Anda dapat menuju ke halaman unduhan SonarQube untuk unduhan terbaru.
Untuk mengunduh file zip, jalankan perintah:
$ wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.0.1.46107.zip
Selanjutnya, unzip file zip.
$ unzip sonarqube-9.0.1.46107.zip
Dan pindahkan ke jalur /opt/.
$ sudo mv sonarqube-9.0.1.46107 /opt/sonarqube
Langkah 5:Buat pengguna dan grup baru
Selanjutnya, kami akan membuat pengguna dan grup baru yang akan menjalankan layanan SonarQube. Jadi, buat grup.
$ sudo groupadd sonar
Selanjutnya, buat pengguna dengan direktori home yang disetel ke /opt/sonarqube saat Anda menambahkan pengguna ke grup yang baru dibuat.
$ sudo useradd -c "SonarQube - User" -d /opt/sonarqube/ -g sonar sonar
Kemudian atur kepemilikan ke direktori /opt/sonarqube.
$ sudo chown -R sonar:sonar /opt/sonarqube/
Langkah 6:Konfigurasi SonarQube
Sekarang mari kita mengkonfigurasi SonarQube. Buka file konfigurasi SonarQube.
$ sudo vim /opt/sonarqube
/conf/sonar.properties
Cari dan batalkan komentar pada baris berikut
sonar.jdbc.username=
sonar.jdbc.password=
Ini mewakili pengguna dan kata sandi basis data SonarQube yang kami buat di server basis data PostgreSQL. Oleh karena itu, isi nilainya sesuai dengan itu.
sonar.jdbc.username=sonar_user
sonar.jdbc.password=strong_password
Selanjutnya, ubah baris-baris ini agar terlihat seperti yang disediakan
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube
sonar.search.javaOpts=-Xmx512m -Xms512m -XX:MaxDirectMemorySize=256m -XX:+HeapDumpOnOutOfMemoryError
Setelah itu, ubah baris berikut agar terlihat seperti yang terlihat.
sonar.web.host=0.0.0.0
sonar.web.port=9000
sonar.web.javaAdditionalOpts=-server
sonar.log.level=INFO
sonar.path.logs=logs
Selanjutnya, ubah pengguna yang akan menjalankan layanan SonarQube dengan mengedit file yang ditampilkan.
$ sudo vim /opt/sonarqube/bin/linux-x86-64/sonar.sh
Gulir ke bawah dan pastikan baris di bawah ini muncul seperti yang ditunjukkan.
RUN_AS_USER=sonar
Langkah 7:Buat file layanan Systemd untuk SonarQube
Saat ini, sistem kami tidak memiliki cara untuk memulai layanan SonarQube. Oleh karena itu, kita perlu membuat layanan systemd. Untuk melakukannya, jalankan perintah:
$ sudo vim /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
User=sonar
Group=sonar
Restart=always
LimitNOFILE=65536
LimitNPROC=4096
[Install]
WantedBy=multi-user.target
Simpan perubahan dan keluar dari file.
Aktifkan layanan SonarQube untuk memulai saat boot
$ sudo systemctl enable sonarqube
Dan mulai layanan SonarQube.
$ sudo systemctl start sonarqube
Untuk memastikan bahwa layanan SonarQube berjalan, jalankan perintah:
$ sudo systemctl status sonarqube
Juga, pastikan port 9000 dibuka
$ sudo ufw allow '9000'
Rules updated
Rules updated (v6)
Periksa apakah layanan mendengarkan pada port 9000
$ sudo netstat -pnltu | grep 9000
tcp6 0 0 :::9000 :::* LISTEN 65140/java
Sekarang Anda dapat mencoba memeriksa apakah Anda dapat mengakses halaman login dengan memasukkan IP publik server Anda dan nomor port dari browser Anda yaitu http://<server-ip>:9000/
. Nama pengguna administrator default adalah 'admin' dan kata sandinya adalah 'admin'.
Sonarqube akan meminta Anda untuk memperbarui kata sandi untuk mengubah kata sandi default.
Langkah 8:Instal dan Konfigurasi Nginx dengan SSL (opsional)
Untuk mengakses Sonarqube Anda dengan nama domain berkemampuan SSL, Anda perlu menginstal proxy terbalik seperti Nginx. Server web akan mem-proxy koneksi ke SonarQube sehingga pengembang dapat mengaksesnya dari nama domain yang aman.
Menginstal Nginx sederhana dan mudah dan dapat dilakukan dalam satu perintah.
$ sudo apt install nginx
Setelah instalasi, aktifkan server web Nginx untuk memulai saat boot.
$ sudo systemctl enable nginx
Dan mulai layanan
$ sudo systemctl start nginx
Agar server web mengetahui SonarQube, kita akan membuat file konfigurasi yang ditampilkan.
$ sudo vim /etc/nginx/sites-available/sonarqube.conf
Kemudian tempel konten yang disediakan.
server {
listen 80;
server_name example.com or SERVER-IP;
access_log /var/log/nginx/sonar.access.log;
error_log /var/log/nginx/sonar.error.log;
proxy_buffers 16 64k;
proxy_buffer_size 128k;
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;
}
}
Simpan dan keluar. Kemudian aktifkan situs Sonarqube:
$ sudo ln -s /etc/nginx/sites-available/sonarqube.conf /etc/nginx/sites-enabled/sonarqube.conf
Periksa apakah konfigurasi sudah benar
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Kemudian restart server web Nginx agar perubahan diterapkan.
$ sudo systemctl restart nginx
Sekarang kita perlu mengkonfigurasi firewall UFW untuk mengizinkan nginx. Untuk melakukannya, jalankan perintah
$ sudo ufw allow 'Nginx Full'
Kemudian muat ulang firewall untuk melakukan perubahan.
$ sudo ufw --reload
Anda sekarang dapat mengakses SonarQube Anda dengan melalui nama domainnya
Di sini, kita akan menggunakan sertifikat ayo mengenkripsi gratis. Untuk mengonfigurasinya, kita perlu menjalankan cerbot untuk Nginx:
$ sudo certbot --nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator nginx, Installer nginx Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): [email protected] Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory (A)gree/(C)ancel: A Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. (Y)es/(N)o: N
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator nginx, Installer nginx Which names would you like to activate HTTPS for? 1: websitefortesting.com Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel): 1 Obtaining a new certificate Performing the following challenges: http-01 challenge for websitefortesting.com Waiting for verification… Cleaning up challenges Deploying Certificate to VirtualHost /etc/nginx/sites-enabled/sonarqube.conf Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2 Redirecting all traffic on port 80 to ssl in /etc/nginx/sites-enabled/sonarqube.conf Congratulations! You have successfully enabled https://websitefortesting.com You should test your configuration at: https://www.ssllabs.com/ssltest/analyze.html?d=websitefortesting.com IMPORTANT NOTES: Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/websitefortesting.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/websitefortesting.com/privkey.pem Your cert will expire on 2021-11-27. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew all of your certificates, run "certbot renew" If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Secara default, mari mengenkripsi akan menambahkan beberapa baris di file blok server Nginx.
Anda harus memiliki sesuatu seperti ini
server { server_name websitefortesting.com; add_header Strict-Transport-Security max-age=2592000; #rewrite ^ https://$server_name$request_uri? permanent; access_log /var/log/nginx/sonarqube.access.log; error_log /var/log/nginx/sonarqube.error.log; proxy_buffers 16 64k; proxy_buffer_size 128k; location / { proxy_pass http://127.0.0.1:9000; 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; } listen 443 ssl; # managed by Certbot ssl_certificate /etc/letsencrypt/live/websitefortesting.com/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/websitefortesting.com/privkey.pem; # managed by Certbot include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot } server { if ($host = websitefortesting.com) { return 301 https://$host$request_uri; } # managed by Certbot
listen 80;
server_name websitefortesting.com; return 404; # managed by Certbot }
Langkah 10:Akses SonarQube dengan HTTPS
Sekarang Anda dapat mengakses SonarQube secara aman dengan URL HTTPS yang dikonfigurasi dengan let's encrypt.
https://domain-name
Setelah login, Anda akan melihat halaman arahan yang ditampilkan.
Kesimpulan
Dalam tutorial ini, kita belajar cara menginstal SonarQube di Ubuntu 20.04. Kami telah mengaktifkan Sonarqube dengan SSL menggunakan sertifikat Let's Encrypt menggunakan Nginx sebagai proxy terbalik.