Ubuntu 18.04 LTS’ye SonarQube Nasıl Kurulur ?

Mükemmel bir dünyada başlamak için sorunsuz bir kod yazardık. Kesinlikle mükemmel bir dünyada yaşamıyoruz ve hatasız kod bir hayaldir, ancak kodumuzu analiz ediyorsak ve ortaya çıkan sorunları düzeltmek için emek harcıyorsak, daha etkili kod yazmaya devam edebiliriz. Yazımda bu bağlamda karşımıza çıkan SonarQube aracını anlatmak istedim.

 

SonarQube, 20’den fazla programlama dilinde hataları, kod analizlerini ve güvenlik açıklarını tespit etmek için kodun statik analizi ile otomatik incelemeler yapmak üzere kod kalitesinin sürekli denetimi için Sonar Source tarafından geliştirilen açık kaynaklı bir platformdur. SonarQube, yinelenen kod, kodlama standartları, birim testleri, kod kapsamı, kod karmaşıklığı, yorumlar, hatalar ve güvenlik açıkları hakkında raporlar sunar.Kod analizini manuel olarak gerçekleştirebilir veya Jenkins, Azure DevOps ve Bamboo gibi CICD DevOps araçlarıyla entegre edebiliriz. Ayrıca SonarQube’u Visual Studio ve Eclipse gibi IDE araçlarınızla entegre edebilirsiniz. SonarQube, kodunuzu tehlikeye atan güvenlik açıklarını düzelterek hataları ve uygulama güvenliğini önleyerek kod güvenilirliği sağlar. SonarQube açık kaynaklı bir platformdur. Statik kod analizi ve kod kalitesinin sürekli denetimi için kullanılır. SonarQube, hataları, kod kokularını ve güvenlik açıklarını algılayabilir. SonarQube, geliştiricilere daha temiz ve daha güvenli kod yazma olanağı sağlar. SonarQube, kodunuzu tehlikeye atan güvenlik açıklarını düzelterek hataları ve uygulama güvenliğini önleyerek kod güvenilirliği sağlar. SonarQube, Jenkins, Azure DevOps, GitHub, GitLab, Bitbucket ve çok daha fazlası gibi CI / CD araçlarıyla entegre olabilir.

Ön koşullar:

  • OS - Ubuntu 18.04 / 16.04 LTS / Debian /Centos /Rhel 7
  • RAM - 4GB Minimum RAM
  • CPU - 1vCPU
  • JAVA - Oracle JRE 11 or OpenJDK 11

 Nedir bu SonarQube?

Başlarken

Başlamadan önce, sisteminizi en son sürümle güncellemeniz gerekecektir. Bunu aşağıdaki komutu çalıştırarak yapabilirsiniz:

sudo apt-get update -y
sudo apt-get upgrade -y

Java’yı yükleyin

SonarQube Java dilinde yazılmıştır, bu nedenle sisteminize Java yüklemeniz gerekecektir. Öncelikle, aşağıdaki komutla Java havuzunu ekleyin:

sudo add-apt-repository ppa:webupd8team/java

Ardından, depoyu güncelleyin ve aşağıdaki komutla Java’yı yükleyin:

sudo apt-get update -y
sudo apt-get install oracle-java8-installer -y

Java yüklendikten sonra, aşağıdaki komutu kullanarak Java sürümünü kontrol edin:

java -version

Çıktı:

openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-8u292-b10-0ubuntu1~18.04-b10)
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)

PostgreSQL’i Kurun ve Yapılandırın

Varsayılan olarak, PostgreSQL’in en son sürümü Ubuntu 18.04 varsayılan deposunda mevcut değildir. Bu nedenle, PostgreSQL deposunu sisteminize eklemeniz gerekecektir.

Bunu aşağıdaki komutla yapabilirsiniz:

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
sudo wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -

Ardından, depoyu güncelleyin ve aşağıdaki komutla PostgreSQL’i kurun:

sudo apt-get update -y
sudo apt-get install postgresql postgresql-contrib

Kurulum tamamlandıktan sonra, aşağıdaki komutla PostgreSQL’in durumunu kontrol edin:

sudo systemctl status postgresql

Çıktı:

postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
   Active: active (exited) since Sun 2021-05-16 17:05:52 +03; 5h 47min ago
Main PID: 1635 (code=exited, status=0/SUCCESS)
    Tasks: 0 (limit: 4663)
   CGroup: /system.slice/postgresql.service

May 16 17:05:52 osman-Virtual-Machine systemd[1]: Starting PostgreSQL RDBMS...
May 16 17:05:52 osman-Virtual-Machine systemd[1]: Started PostgreSQL RDBMS.

Ardından, aşağıdaki komutla postgres kullanıcısına geçin:

sudo su - postgres

Ardından, aşağıdaki komutla bir sonar kullanıcısı oluşturun:

createuser sonar

Ardından, aşağıdaki komutla PostgreSQL kabuğuna geçin:

psql

Ardından, sonar kullanıcısı için şifre belirleyin ve aşağıdaki komutla bir sonar veritabanı oluşturun:

ALTER USER sonar WITH ENCRYPTED password 'password';
CREATE DATABASE sonar OWNER sonar;

Ardından, PostgreSQL kabuğundan çıkarın:

\q

 

SonarQube’u Kurun ve Yapılandırın

Önce, aşağıdaki komutla SonarQube için bir kullanıcı oluşturun:

sudo adduser sonar

Ardından, aşağıdaki komutla SonarQube’un en son sürümünü indirin:

sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-8.0.zip

İndirme işlemi tamamlandığında, indirilen dosyayı aşağıdaki komutla açın:

unzip sonarqube-8.0.zip

Ardından, çıkarılan dizini aşağıdaki komutla / opt klasörüne kopyalayın:

sudo cp -r sonarqube-8.0 /opt/sonarqube

Ardından, aşağıdaki komutla sonar kullanıcısına sahiplik verin:

sudo chown -R sonar:sonar /opt/sonarqube

Daha sonra, SonarQube’u bir sonar kullanıcısı olarak çalışacak şekilde yapılandırmanız gerekecektir. Bunu aşağıdaki komutla yapabilirsiniz:

sudo vim /opt/sonarqube/bin/linux-x86-64/sonar.sh

Aşağıdaki değişiklikleri yapın:

RUN_AS_USER = sonar

Dosyayı kaydedin ve kapatın. Ardından, SonarQube varsayılan yapılandırma dosyasını açın ve veritabanı kimlik bilgilerini daha önce oluşturduğumuzla değiştirin:

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

Aşağıdaki değişiklikleri yapın:

sonar.jdbc.username = sonar 
sonar.jdbc.password = şifre 
sonar.jdbc.url = jdbc: postgresql: // localhost / sonar 
sonar.web.host = 127.0.0.1 
sonar.search.javaOpts = -Xms512m -Xmx512m

Bitirdiğinizde dosyayı kaydedin ve kapatın.

SonarQube için Systemd Hizmet dosyasını oluşturun

Ardından, SonarQube hizmetini yönetmek için bir systemd hizmet dosyası oluşturmanız gerekecektir. Bunu aşağıdaki komutla yapabilirsiniz:

sudo vim /etc/systemd/system/sonar.service

Aşağıdaki satırları ekleyin:

[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

[Install]
WantedBy=multi-user.target

Bitirdiğinizde dosyayı kaydedin ve kapatın. Ardından, SonarQube hizmetini başlatın ve aşağıdaki komutla önyükleme zamanında başlamasını etkinleştirin:

sudo systemctl start sonar
sudo systemctl enable sonar

SonarQube hizmetinin durumunu aşağıdaki komutla kontrol edebilirsiniz:

sudo systemctl status sonar

Çıktı:

sonar.service - SonarQube service
   Loaded: loaded (/etc/systemd/system/sonar.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2021-05-16 18:01:27 +03; 5h 17min ago
  Process: 6067 ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop (code=exited, status=0/SUCCESS)
  Process: 6220 ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start (code=exited, status=0/SUCCESS)
 Main PID: 6279 (wrapper)
    Tasks: 187 (limit: 4663)
   CGroup: /system.slice/sonar.service
           ├─6279 /opt/sonarqube/bin/linux-x86-64/./wrapper /opt/sonarqube/bin/linux-x86-64/../../conf/wrapper.conf wrapper.syslog.ident=Sonar
           ├─6297 java -Dsonar.wrapped=true -Djava.awt.headless=true -Xms8m -Xmx32m -Djava.library.path=./lib -classpath ../../lib/jsw/wrapper
           ├─6328 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInit
           ├─6445 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/opt/sonarqub
           └─6512 /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/opt/sonarqub

May 16 18:01:27 osman-Virtual-Machine systemd[1]: Starting SonarQube service...
May 16 18:01:27 osman-Virtual-Machine sonar.sh[6220]: Starting SonarQube...
May 16 18:01:27 osman-Virtual-Machine sonar.sh[6220]: Started SonarQube.
May 16 18:01:27 osman-Virtual-Machine systemd[1]: Started SonarQube service.

 

Apache’yi SonarQube için yapılandırma

Varsayılan olarak SonarQube, 9000 numaralı bağlantı noktasını dinler. Bu nedenle, 80 numaralı bağlantı noktasını kullanarak SonarQube’ye erişmek için Apache’yi ters proxy olarak kurmanız ve yapılandırmanız gerekir.

Bunu yapmak için, aşağıdaki komutla Apache’yi kurun:

sudo apt-get install apache2 -y

Ardından, aşağıdaki komutla mod_proxy modülünü etkinleştirin:

sudo a2enmod proxy
sudo a2enmod proxy_http

Ardından, aşağıdaki komutla SonarQube için bir Apache sanal ana bilgisayar dosyası oluşturun:

sudo vim /etc/apache2/sites-available/sonar.conf

Aşağıdaki satırları ekleyin:

<VirtualHost *: 80> 
    ServerName example.com 
    ServerAdmin [email protected] 
    ProxyPreserveHost On 
    ProxyPass / http://127.0.0.1:9000/ 
    ProxyPassReverse / http://127.0.0.1:9000/ 
    TransferLog / var / log / apache2 / sonarm_access.log 
    ErrorLog /var/log/apache2/sonar_error.log 
</VirtualHost>

Example.com’u kendi alan adınızla değiştirin. Dosyayı kaydedin ve kapatın. Ardından, SonarQube sanal ana bilgisayar dosyasını aşağıdaki komutla etkinleştirin:

sudo a2ensite sonar

Son olarak, aşağıdaki komutla tüm değişiklikleri uygulamak için Apache ve SonarQube hizmetini yeniden başlatın:

sudo systemctl restart apache2
sudo systemctl restart sonar

Varsayılan olarak SonarQube, günlüklerini / opt / sonarqube / logs dizininde depolar. SonarQube günlüğünü aşağıdaki komutla kontrol edebilirsiniz:

sudo tail -f /opt/sonarqube/logs/sonar.log

Çıktı:

2021.05.16 18:01:27 INFO  app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='es', ipcIndex=1, logFilenamePrefix=es]] from [/opt/sonarqube/elasticsearch]: /opt/sonarqube/elasticsearch/bin/elasticsearch -Epath.conf=/opt/sonarqube/temp/conf/es
2021.05.16 18:01:27 INFO  app[][o.s.a.SchedulerImpl] Waiting for Elasticsearch to be up and running
2021.05.16 18:01:28 INFO  app[][o.e.p.PluginsService] no modules loaded
2021.05.16 18:01:28 INFO  app[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.transport.Netty4Plugin]
2021.05.16 18:01:36 INFO  app[][o.s.a.SchedulerImpl] Process[es] is up
2021.05.16 18:01:36 INFO  app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='web', ipcIndex=2, logFilenamePrefix=web]] from [/opt/sonarqube]: /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/opt/sonarqube/temp -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -cp ./lib/common/*:./lib/server/*:/opt/sonarqube/lib/jdbc/postgresql/postgresql-42.2.1.jar org.sonar.server.app.WebServer /opt/sonarqube/temp/sq-process7837679281658472141properties
2021.05.16 18:01:47 INFO  app[][o.s.a.SchedulerImpl] Process[web] is up
2021.05.16 18:01:47 INFO  app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='ce', ipcIndex=3, logFilenamePrefix=ce]] from [/opt/sonarqube]: /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/opt/sonarqube/temp -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -cp ./lib/common/*:./lib/server/*:./lib/ce/*:/opt/sonarqube/lib/jdbc/postgresql/postgresql-42.2.1.jar org.sonar.ce.app.CeServer /opt/sonarqube/temp/sq-process3401750315698922579properties
2021.05.16 18:01:51 INFO  app[][o.s.a.SchedulerImpl] Process[ce] is up
2021.05.16 18:01:51 INFO  app[][o.s.a.SchedulerImpl] SonarQube is up

Aşağıdaki komutu kullanarak SonarQube web günlüğünü de kontrol edebilirsiniz:

sudo tail -f /opt/sonarqube/logs/web.log

Çıktı:

2021.05.16 18:01:47 INFO  web[][o.s.s.s.RenameDeprecatedPropertyKeys] Rename deprecated property keys
2021.05.16 18:01:47 INFO  web[][o.s.s.p.w.MasterServletFilter] Initializing servlet filter [email protected] [pattern=UrlPattern{inclusions=[/api/measures/component/*, ...], exclusions=[/api/properties*, ...]}]
2021.05.16 18:01:47 INFO  web[][o.s.s.p.w.MasterServletFilter] Initializing servlet filter [email protected] [pattern=UrlPattern{inclusions=[/api/properties/*], exclusions=[]}]
2021.05.16 18:01:47 INFO  web[][o.s.s.p.w.MasterServletFilter] Initializing servlet filter [email protected] [pattern=UrlPattern{inclusions=[/api/components/bulk_update_key, ...], exclusions=[]}]
2021.05.16 18:01:47 INFO  web[][o.s.s.p.w.MasterServletFilter] Initializing servlet filter [email protected] [pattern=UrlPattern{inclusions=[/sessions/init/*], exclusions=[]}]
2021.05.16 18:01:47 INFO  web[][o.s.s.p.w.MasterServletFilter] Initializing servlet filter [email protected] [pattern=UrlPattern{inclusions=[/oauth2/callback/*], exclusions=[]}]
2021.05.16 18:01:47 INFO  web[][o.s.s.p.w.MasterServletFilter] Initializing servlet filter [email protected] [pattern=UrlPattern{inclusions=[/api/authentication/login], exclusions=[]}]
2021.05.16 18:01:47 INFO  web[][o.s.s.p.w.MasterServletFilter] Initializing servlet filter [email protected] [pattern=UrlPattern{inclusions=[/api/authentication/logout], exclusions=[]}]
2021.05.16 18:01:47 INFO  web[][o.s.s.p.w.MasterServletFilter] Initializing servlet filter [email protected] [pattern=UrlPattern{inclusions=[/api/authentication/validate], exclusions=[]}]
2021.05.16 18:01:47 INFO  web[][o.s.s.p.Platform] WebServer is operational

 

SonarQube’a erişim

SonarQube artık kurulmuş ve yapılandırılmıştır. Web tarayıcısı üzerinden erişme zamanı.

Web tarayıcınızı açın ve http://example.com URL’si ile veya http://127.0.0.1:9000/  yazın. Aşağıdaki sayfaya yönlendirileceksiniz:

Burada Oturum  düğmesine tıklayın. Aşağıdaki sayfayı görmelisiniz:

 

Varsayılan yönetici hesabı kullanıcı adını ve şifresini admin / admin olarak girin ve Oturum  düğmesine tıklayın. SonarQube varsayılan kontrol panelini aşağıdaki sayfada görmelisiniz:

 

Tebrikler! SonarQube’u Ubuntu 18.04 sunucusuna başarıyla yüklediniz. Artık SonarQube kullanarak kolayca otomatik incelemeler gerçekleştirebilir ve bir uygulamanın sağlığını kontrol edebilirsiniz. Bir Sonraki Sonarqube basit düzeyde bir Proje nasıl test edilir ondan bahsedecedeğim. Takipte kalalım arkadaşlar 😀

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir