DocumentationSonarQube

SonarQube

Prerequisites

# Install Java 17 (required)
sudo apt update
sudo apt install openjdk-17-jre openjdk-17-jdk -y
 
# Verify installation
java -version

Installation on Linux

Ubuntu/Debian

# Install PostgreSQL (recommended for production)
sudo apt install postgresql postgresql-contrib -y
sudo systemctl start postgresql
sudo systemctl enable postgresql
 
# Create SonarQube database
sudo -u postgres createdb sonarqube
sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'new_password';"
 
# Download SonarQube
cd /tmp
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-10.2.1.78527.zip
unzip sonarqube-10.2.1.78527.zip
 
# Move to /opt
sudo mv sonarqube-10.2.1.78527 /opt/sonarqube
sudo chown -R sonarqube:sonarqube /opt/sonarqube

Create SonarQube User

# Create system user
sudo useradd -m -d /var/sonarqube -s /bin/false sonarqube
 
# Create directories
sudo mkdir -p /var/sonarqube/data
sudo mkdir -p /var/sonarqube/temp
sudo chown -R sonarqube:sonarqube /var/sonarqube

Configuration

Edit SonarQube Properties

# Edit configuration
sudo nano /opt/sonarqube/conf/sonar.properties
 
# Add/modify these settings
sonar.jdbc.username=postgres
sonar.jdbc.password=your_password
sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube
 
sonar.javaHome=/usr/lib/jvm/java-17-openjdk-amd64
sonar.path.data=/var/sonarqube/data
sonar.path.temp=/var/sonarqube/temp
 
# Bind to all interfaces
sonar.web.host=0.0.0.0
sonar.web.port=9000

Running SonarQube

Manual Start/Stop

# Start SonarQube
sudo /opt/sonarqube/bin/linux-x86-64/sonar.sh start
 
# Stop SonarQube
sudo /opt/sonarqube/bin/linux-x86-64/sonar.sh stop
 
# Check status
sudo /opt/sonarqube/bin/linux-x86-64/sonar.sh status
 
# View logs
sudo tail -f /opt/sonarqube/logs/sonar.log

Using Systemd Service

# Create systemd service file
sudo nano /etc/systemd/system/sonarqube.service
 
# Add content
[Unit]
Description=SonarQube
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
ExecReload=/opt/sonarqube/bin/linux-x86-64/sonar.sh restart
User=sonarqube
Group=sonarqube
Restart=always
RemainAfterExit=yes
 
[Install]
WantedBy=multi-user.target
 
# Enable and start service
sudo systemctl daemon-reload
sudo systemctl enable sonarqube
sudo systemctl start sonarqube
sudo systemctl status sonarqube

Nginx Reverse Proxy

# Create Nginx configuration
sudo nano /etc/nginx/conf.d/sonarqube.conf
 
# Add configuration
server {
    listen 80;
    server_name your_domain_or_ip;
 
    location / {
        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 $scheme;
        proxy_pass http://localhost:9000;
        proxy_read_timeout 90s;
    }
 
    client_max_body_size 256M;
}
 
# Test and restart Nginx
sudo nginx -t
sudo systemctl restart nginx

Firewall Configuration

# UFW (Ubuntu)
sudo ufw allow 9000
sudo ufw allow 80
sudo ufw allow 443
 
# Firewalld (CentOS)
sudo firewall-cmd --permanent --add-port=9000/tcp
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload

Web Interface Access

# Access SonarQube
http://your_domain_or_ip
 
# Default credentials
username: admin
password: admin
 
# Change password on first login (recommended)

Docker Installation

# Pull image
docker pull sonarqube:latest
 
# Run container
docker run -d \
  --name sonarqube \
  -p 9000:9000 \
  -e SONAR_JDBC_URL=jdbc:postgresql://postgres:5432/sonarqube \
  -e SONAR_JDBC_USERNAME=sonarqube \
  -e SONAR_JDBC_PASSWORD=password \
  -v sonarqube_data:/opt/sonarqube/data \
  sonarqube:latest

User & Token Management

# Access admin panel
1. Navigate to Administration > Users
2. Create new user or manage existing users
 
# Generate API token
1. Navigate to user profile (top right)
2. Select "Security"
3. Create token
4. Use in CI/CD pipelines

SonarScanner Installation

# Download SonarScanner
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-4.8.0.2856-linux.zip
unzip sonar-scanner-4.8.0.2856-linux.zip
sudo mv sonar-scanner-4.8.0.2856-linux /opt/sonar-scanner
 
# Create symlink
sudo ln -s /opt/sonar-scanner/bin/sonar-scanner /usr/local/bin/sonar-scanner
 
# Verify installation
sonar-scanner --version

Run SonarScanner

# Create sonar-project.properties
cat > sonar-project.properties << 'EOF'
sonar.projectKey=my-project
sonar.projectName=My Project
sonar.projectVersion=1.0
sonar.sources=src
sonar.host.url=http://localhost:9000
sonar.login=your-api-token
EOF
 
# Run scanner
sonar-scanner

Uninstall

Manual Installation

# Stop SonarQube
sudo /opt/sonarqube/bin/linux-x86-64/sonar.sh stop
 
# Remove installation
sudo rm -rf /opt/sonarqube
sudo rm -rf /var/sonarqube
sudo userdel sonarqube
 
# Remove database
sudo -u postgres dropdb sonarqube
 
# Remove Nginx config
sudo rm /etc/nginx/conf.d/sonarqube.conf
sudo systemctl restart nginx

Docker Installation

# Stop and remove container
docker stop sonarqube
docker rm sonarqube
 
# Remove volume (optional)
docker volume rm sonarqube_data