Sonarqube is a great tool for source code quality management, code analysis etc. This is the most widely used tool for code coverage and analysis.
Install and Configure Sonarqube on Linux
This guide will help you to set up and configure sonarqube on Linux servers (Redhat/Centos 7 versions) on any cloud platforms like ec2, azure, compute engine or on-premise data centers. Follow the steps given below for the complete sonarqube configuration.
Sonarqube requirements
- Server with minimum 2GB/1 vcpu capacity
- PostgreSQL version 9.3 or greater.
- OpenJDK 11 or JRE 11
- All sonarquber process should run as a non-root sonar user.
You can find the official requirement doc here.
Update: MySQL for Sonarqube is depricated
Prep the Server With Required Softwares
Step 1: Update the server.
1
|
sudo yum update –y
|
Step 2: Install wget & unzip
1
|
sudo yum install wget unzip –y
|
Step 3: Install java 11
1
|
sudo yum install java–11–openjdk–devel –y
|
Step 4: Login as root and execute the following commands.
1
2
3
4
|
sysctl vm.max_map_count
sysctl fs.file–max
ulimit –n
ulimit –u
|
Setup PostgreSQL 10 Database For SonarQube
Step 1: Install PostgreSQL 10 repo.
1
|
sudo yum install https://download.postgresql.org/pub/repos/yum/10/redhat/rhel–7–x86_64/pgdg–centos10–10–2.noarch.rpm –y
|
Step 2: Install PostgreSQL 10
1
|
sudo yum install postgresql10–server postgresql10–contrib –y
|
Step 3: Initialize the database.
1
|
sudo /usr/pgsql–10/bin/postgresql–10–setup initdb
|
Step 4: Open /var/lib/pgsql/data/pg_hba.conf file to change the authentication to md5.
1
|
sudo vi /var/lib/pgsql/10/data/pg_hba.conf
|
Find the following lines at the bottom of the file and change peer
to trust
and idnet
to md5
1
2
3
4
5
6
7
8
|
# TYPE DATABASE USER ADDRESS METHOD
# “local” is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 ident
# IPv6 local connections:
host all all ::1/128 ident
|
Once changed, it should look like the following.
1
2
3
4
5
6
7
8
|
# TYPE DATABASE USER ADDRESS METHOD
# “local” is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
|
Step 5: Start and enable PostgreSQL.
1
2
|
sudo systemctl start postgresql–10
sudo systemctl enable postgresql–10
|
Step 6: You can verify the installation using the following version select query.
1
|
sudo –u postgres /usr/pgsql–10/bin/psql –c “SELECT version();”
|
Setup Sonar User and Database
We need to have a sonar user and database for the sonar application.
Step 1: Change the default password of the Postgres user. All Postgres commands have to be executed from this user.
1
|
sudo passwd postgres
|
Step 2: Login as postgres user with the new password.
1
|
su – postgres
|
Step 3: Login to the PostgreSQL CLI.
1
|
psql
|
Step 4: Create a sonarqubedb database.
1
|
create database sonarqubedb;
|
Step 5: Create the sonarqube DB user with a strongly encrypted password. Replace your-strong-password with a strong password.
1
|
create user sonarqube with encrypted password ‘your-strong-password’;
|
Step 6: Next, grant all privileges to sonrqube user on sonarqubedb.
1
|
grant all privileges on database sonarqubedb to sonarqube
|
Step 7: Exit the psql prompt using the following command.
1
|
\q
|
Step 6: Switch to your sudo user using the exit command.
1
|
exit
|
Setup Sonarqube Web Server
Step 1: Download the latest sonarqube installation file to /opt folder. You can get the latest download link from here. http://www.sonarqube.org/downloads/
1
2
|
cd /opt
sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube–7.6.zip
|
2. Unzip sonarqube source files and rename the folder.
1
2
|
sudo unzip sonarqube–7.6.zip
sudo mv sonarqube–7.6 sonarqube
|
4. Open /opt/sonarqube/conf/sonar.properties file.
1
|
sudo vi /opt/sonarqube/conf/sonar.properties
|
Uncomment and edit the parameters as shown below. Change the password accordingly. You will find jdbc parameter under PostgreSQL section.
1
2
3
|
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar–db–password
sonar.jdbc.url=jdbc:postgresql://localhost/sonar
|
By default, sonar will run on 9000. If you want on port 80 or any other port, change the following parameters for accessing the web console on that specific port.
1
2
|
sonar.web.host=0.0.0.0
sonar.web.port=80
|
If you want to access sonarqube some path like http://url:/sonar, change the following parameter.
1
|
sonar.web.context=/sonar
|
Add Sonar User and Privileges
Create a user named sonar and make it the owner of the /opt/sonarqube
directory.
1
2
|
sudo useradd sonar
sudo chown –R sonar:sonar /opt/sonarqube
|
Start Sonarqube Service
To start sonar service, you need to use the script in sonarqube bin directory.
Step 1: Login as sonar user
1
|
sudo su – sonar
|
Step 2: Navigate to the start script directory.
1
|
cd /opt/sonarqube/bin/linux–x86–64
|
Step 3: Start the sonarqube service.
1
|
./sonar.sh start
|
Now, you should be able to access sonarqube on the browser on port 9000
Step 4: Check the application status. If it is in running state, you can access the sonarqube dashboard using the DNS name or Ip address of your server.
1
|
sudo ./sonar.sh status
|
Setting up Sonarqube as a service
Step 1: Create a file /etc/systemd/system/sonarqube.service
1
|
sudo vi /etc/systemd/system/sonarqube.service
|
Step 2: Copy the following content on to the file.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[Unit]
Description=SonarQube service
After=syslog.target network.target
[Service]
Type=simple
User=sonarqube
Group=sonarqube
PermissionsStartOnly=true
ExecStart=/bin/nohup java –Xms32m –Xmx32m –Djava.net.preferIPv4Stack=true –jar /opt/sonarqube/lib/sonar–application–7.6.jar
StandardOutput=syslog
LimitNOFILE=65536
LimitNPROC=8192
TimeoutStartSec=5
Restart=always
[Install]
WantedBy=multi–user.target
|
Step 3: Start and enable sonarqube
1
2
|
sudo systemctl start sonarqube
sudo systemctl enable sonarqube
|
Step 4: Check the sonarqube status to ensure it is running as expected.
1
|
sudo systemctl status sonarqube
|
Troubleshooting Sonarqube
All the logs of sonarqube are present in the /opt/sonarqube/logs
directory.
1
|
cd /opt/sonarqube/logs
|
You can find the following log files.
1
2
3
4
|
es.log
sonar.log
web.log
access.log
|
Using tail command you can check the latest logs. For example,
1
|
tail –f access.log
|
For sonarqube support, visit this link