How to Install SonarQube on Ubuntu 20.04
This tutorial exists for these OS versions
- Ubuntu 22.04 (Jammy Jellyfish)
- Ubuntu 20.04 (Focal Fossa)
- Ubuntu 18.04 (Bionic Beaver)
- Ubuntu 16.04 (Xenial Xerus)
On this page
SonarQube is a free and open-source and web-based platform used to analyze the source code quality. It is written in java and can analyze and manage code of more than 20 programming languages, including c/c++, PL/SQL, Cobol, etc through plugins. It can be integrated with other database servers like MSSQL, PostgreSQL, Oracle, and MySQL. It continuously inspects and shows the health of an application. It has a lot of plugins that help you to extend its functionality. In this tutorial, we will show you how to install SonarQube software on Ubuntu 20.04.
Prerequisites
- A server running Ubuntu 20.04.
- A valid domain name pointed with your server IP.
- A root password is configured the server.
Getting Started
First, you will need to update your system packages to the latest version. You can update all of them with the following command:
apt-get update -y
After updating all the packages, you will need to Increase the vm.max_map_count kernal ,file discriptor and ulimit in your system. You can do it with the following commands:
sysctl -w vm.max_map_count=262144
sysctl -w fs.file-max=65536
ulimit -n 65536
ulimit -u 4096
Once you are done, you can proceed to the next step.
Install Java
SonarQube is a Java based application. So Java must be installed in your system. If not installed, you can install it with the following command:
apt-get install default-jdk unzip gnupg2 -y
Once the Java is installed, verfiy the Java version using the following command:
java --version
You should get the following output:
openjdk 11.0.9.1 2020-11-04 OpenJDK Runtime Environment (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04) OpenJDK 64-Bit Server VM (build 11.0.9.1+1-Ubuntu-0ubuntu1.20.04, mixed mode, sharing)
Once you are finished, you can proceed to the next step.
Install and Configure PostgreSQL Server
SonarQube uses PostgreSQL as a database backend. So you will need to install it in your server. By default, the latest version of PostgreSQL is not available in the Ubuntu 20.04 default repository. So you will need to add the PostgreSQL repository to your system.
First, add the PostgreSQL repository with the following command:
sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
Next, add the GPG key with the following command:
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | apt-key add -
Next, update the repository and install the PostgreSQL server with the following command:
apt-get update -y
apt-get -y install postgresql postgresql-contrib
Once installed, start the PostgreSQL service and enable it to start at system reboot with the following command:
systemctl start postgresql
systemctl enable postgresql
Next, set the PostgreSQL password with the following command:
passwd postgres
You will need to ask for a new password as shown below:
New password: Retype new password: passwd: password updated successfully
Next, switch the user to postgres and create a new user for sonar with the following command:
su - postgres
createuser sonar
Next, lgin to PostgreSQL shell with the following command:
postgres@sonar:~$ psql
Once login, you should get the following output:
psql (13.1 (Ubuntu 13.1-1.pgdg20.04+1)) Type "help" for help.
Next, create a user and database with the following command:
postgres=# ALTER USER sonar WITH ENCRYPTED password 'sonar';
postgres=# CREATE DATABASE sonarqube OWNER sonar;
Next, grant all the privileges to the Sonar database with the following command:
postgres=# grant all privileges on DATABASE sonarqube to sonar;
Next, exit from the postgres shell and user with the following command:
postgres=# \q
postgres@sonar:~$ exit
Once you are finished, you can proceed to the next step.
Install and Configure SonarQube
First, download the latest version of SonarQube from its official website with the following command:
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.9.3.zip
Once the download is completed, unzip the downloaded file with the following command:
unzip sonarqube-7.9.3.zip
Next, move the extracted directory to the /opt with the following command:
mv sonarqube-7.9.3 /opt/sonarqube
Next, create a separate user for SonarQube with the following command:
adduser sonar
Next, change the ownership of the /opt/sonarqube directory to sonar with the following command:
chown -R sonar:sonar /opt/sonarqube
Next, you will need to edit the SonarQube configuration file and define sonar username, password, web host and PostgreSQL url.
nano /opt/sonarqube/conf/sonar.properties
Change the following lines with your sonar username, password and PostgreSQL URL:
sonar.jdbc.username=sonar sonar.jdbc.password=sonar sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube sonar.web.host=0.0.0.0
Next, edit the sonar.sh script and define the RUN_AS user:
nano /opt/sonarqube/bin/linux-x86-64/sonar.sh
Change the following line:
RUN_AS_USER=sonar
Save and close the file when you are finished.
Create a Systemd Service File for SonarQube
Next, you will need to create a systemd service file to manage the SonarQube service. You can create it with the following command:
nano /etc/systemd/system/sonar.service
Add the following lines:
[Unit] Description=SonarQube service After=syslog.target network.target [Service] LimitNOFILE=65536 LimitNPROC=4096 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
Save and close the file then reload the systemd daemon to apply the configuration changes:
systemctl daemon-reload
Next, start the SonarQube service and enable it to start at system reboot with the following command:
systemctl start sonar
systemctl enable sonar
Next, verify the status of the SonarQube service with the following command:
systemctl status sonar
You should get the following output:
? sonar.service - SonarQube service Loaded: loaded (/etc/systemd/system/sonar.service; disabled; vendor preset: enabled) Active: active (running) since Mon 2020-11-16 16:28:41 UTC; 5s ago Process: 79015 ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start (code=exited, status=0/SUCCESS) Main PID: 79081 (wrapper) Tasks: 46 (limit: 4691) Memory: 725.8M CGroup: /system.slice/sonar.service ??79081 /opt/sonarqube/bin/linux-x86-64/./wrapper /opt/sonarqube/bin/linux-x86-64/../../conf/wrapper.conf wrapper.syslog.ident=So> ??79085 java -Dsonar.wrapped=true -Djava.awt.headless=true -Xms8m -Xmx32m -Djava.library.path=./lib -classpath ../../lib/jsw/wrap> ??79125 /usr/lib/jvm/java-11-openjdk-amd64/bin/java -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInit> Nov 16 16:28:40 sonar.example.com systemd[1]: Starting SonarQube service... Nov 16 16:28:40 sonar.example.com sonar.sh[79015]: Starting SonarQube... Nov 16 16:28:41 sonar.example.com sonar.sh[79015]: Started SonarQube. Nov 16 16:28:41 sonar.example.com systemd[1]: Started SonarQube service.
At this point, SonarQube is started and listening on port 9000. You can check it with the following command:
ss -antpl | grep 9000
You should get the following output:
LISTEN 0 25 *:9000 *:* users:(("java",pid=139294,fd=121))
If you have any issue with SonarQube, you can check the SonarQube logs with the following command:
tail -f /opt/sonarqube/logs/sonar.log
You should get the following output:
2020.11.16 17:04:24 INFO app[][o.s.a.ProcessLauncherImpl] Launch process[[key='ce', ipcIndex=3, logFilenamePrefix=ce]] from [/opt/sonarqube]: /usr/lib/jvm/java-11-openjdk-amd64/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/opt/sonarqube/temp --add-opens=java.base/java.util=ALL-UNNAMED -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -Dhttp.nonProxyHosts=localhost|127.*|[::1] -cp ./lib/common/*:/opt/sonarqube/lib/jdbc/postgresql/postgresql-42.2.5.jar org.sonar.ce.app.CeServer /opt/sonarqube/temp/sq-process10447466834580828864properties 2020.11.16 17:04:30 INFO app[][o.s.a.SchedulerImpl] Process[ce] is up 2020.11.16 17:04:30 INFO app[][o.s.a.SchedulerImpl] SonarQube is up
Once you are finished, you can proceed to the next step.
Install and Configure Nginx
Next, you will need to install and configure Nginx as a reverse proxy for SonarQube. First, install the Nginx server with the following command:
apt-get install nginx -y
Once the Nginx is installed, create a ne wNginx virtual host configuration file for SonarQube:
nano /etc/nginx/conf.d/sonar.conf
Add the following lines:
upstream sonar_backend { server 127.0.0.1:9000; } server { listen 80; server_name sonar.example.com; location / { proxy_pass http://sonar_backend/; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forward-For $proxy_add_x_forwarded_for; proxy_set_header X-Forward-Proto http; proxy_set_header X-Nginx-Proxy true; proxy_redirect off; } }
Save and close the file then verify the Nginx for any syntax error with the following command:
nginx -t
You should get the following output:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Next, check the status of the Nginx service with the following command:
systemctl status nginx
You should see the following output:
? nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2020-11-16 17:04:16 UTC; 4min 3s ago Docs: man:nginx(8) Process: 140017 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 140028 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 140035 (nginx) Tasks: 3 (limit: 4691) Memory: 4.6M CGroup: /system.slice/nginx.service ??140035 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; ??140037 nginx: worker process ??140038 nginx: worker process Nov 16 17:04:16 kolab.example.com systemd[1]: Starting A high performance web server and a reverse proxy server... Nov 16 17:04:16 kolab.example.com systemd[1]: Started A high performance web server and a reverse proxy server.
Once you are finished, you can proceed to the next step.
Access SonarQube Web UI
Now, open your web browser and access the SonarQube using the URL http://sonar.example.com. You will be redirected to the following page:
Now, click on the Log in button. You should see the following page:
Provide default username as admin and the password as admin then click on the Login button. You should see the SonarQube default dashboard in the following screen:
Conclusion
Congratulations! you have successfully installed and configured SonarQube with Nginx as a reverse proxy on Ubuntu 20.04. I hope you can now deploy it easily in the development environment. Feel free to ask me if you have any questions.