1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  SonarQube - analiza kodu

# SonarQube - analiza jakości kodu i wykrywanie błędów

Opublikowano: 10 kwietnia 2026 · Kategoria: VPS i serwery

⚡ W skrócie · 7 min czytania

-   SonarQube Community: instalacja Docker, konfiguracja sonar-project.properties, integracja GitHub Actions i Jenkins, Quality Gates, profile reguł i porównanie z SonarCloud.
-   Instalacja SonarQube przez Docker Compose.
-   Konfiguracja projektu - sonar-project.properties.
-   Integracja z GitHub Actions.
-   Integracja z Jenkins.

Code review przez ludzi nie wyłapuje wszystkiego - SQL injection w obiekcie DAO, brakujące null-checke, zduplikowane bloki kodu kopiowane między modułami. SonarQube automatyzuje tę walidację, skanując każdy pull request i blokując merge, gdy jakość kodu nie spełnia zdefiniowanych progów. Ten artykuł pokazuje instalację SonarQube Community Edition przez Docker, konfigurację projektu, integrację z GitHub Actions i Jenkins oraz definiowanie własnych Quality Gates.

## Instalacja SonarQube przez Docker Compose

SonarQube wymaga PostgreSQL - wbudowany H2 jest tylko do testów. Konfiguracja `vm.max_map_count` to wymóg Elasticsearch wbudowanego w SonarQube.

```
# Wymagane na hoście (Elasticsearch)
sudo sysctl -w vm.max_map_count=524288
sudo sysctl -w fs.file-max=131072
echo "vm.max_map_count=524288" | sudo tee -a /etc/sysctl.conf

# docker-compose.yml
version: "3.9"
services:
  sonarqube:
    image: sonarqube:community
    container_name: sonarqube
    restart: unless-stopped
    depends_on:
      - db
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar_pass
    ports:
      - "9000:9000"
    volumes:
      - sonar_data:/opt/sonarqube/data
      - sonar_extensions:/opt/sonarqube/extensions
      - sonar_logs:/opt/sonarqube/logs
    ulimits:
      nofile:
        soft: 131072
        hard: 131072

  db:
    image: postgres:15-alpine
    container_name: sonar-db
    restart: unless-stopped
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar_pass
      POSTGRES_DB: sonar
    volumes:
      - sonar_db:/var/lib/postgresql/data

volumes:
  sonar_data:
  sonar_extensions:
  sonar_logs:
  sonar_db:

# docker compose up -d
# UI: http://twoj-ip:9000 (login: admin / admin - zmien od razu!)
```

## Konfiguracja projektu - sonar-project.properties

Każdy projekt wymaga pliku `sonar-project.properties` w root repozytorium. Alternatywnie parametry można przekazać przez CLI (`-Dsonar.projectKey=...`). Poniższy przykład dla projektu PHP z testami PHPUnit i TypeScript.

```
# sonar-project.properties
sonar.projectKey=myproject
sonar.projectName=My Project
sonar.projectVersion=1.0
sonar.host.url=https://sonar.example.com

# Katalogi z kodem (przecinkowe)
sonar.sources=src,app
sonar.tests=tests,test

# Wyklucz pliki vendor i node_modules
sonar.exclusions=vendor/**,node_modules/**,*.min.js

# PHP - raport pokrycia (PHPUnit → Clover XML)
sonar.php.coverage.reportPaths=coverage/clover.xml

# JavaScript/TypeScript - LCOV
sonar.javascript.lcov.reportPaths=coverage/lcov.info

# Kodowanie
sonar.sourceEncoding=UTF-8
```

## Integracja z GitHub Actions

SonarQube może analizować każdy PR i raportować wynik bezpośrednio w GitHub. Wymaga tokenu projektu SonarQube w GitHub Secrets oraz dekoracji PR (opcja w ustawieniach projektu SonarQube).

```
# .github/workflows/sonar.yml
name: SonarQube Analysis

on:
  push:
    branches: [ main, develop ]
  pull_request:
    types: [ opened, synchronize ]

jobs:
  sonar:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0   # Wazne! SonarQube potrzebuje pelnej historii git

      - name: Generate coverage report
        run: |
          composer install --prefer-dist
          ./vendor/bin/phpunit --coverage-clover coverage/clover.xml

      - name: SonarQube Scan
        uses: SonarSource/sonarqube-scan-action@master
        env:
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
          SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}

      - name: SonarQube Quality Gate check
        uses: SonarSource/sonarqube-quality-gate-action@master
        timeout-minutes: 5
        env:
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
```

## Integracja z Jenkins

```
# Jenkinsfile (Declarative Pipeline)
pipeline {
  agent any

  environment {
    SONAR_TOKEN = credentials('sonar-token')
  }

  stages {
    stage('Tests') {
      steps {
        sh './vendor/bin/phpunit --coverage-clover coverage/clover.xml'
      }
    }

    stage('SonarQube Analysis') {
      steps {
        withSonarQubeEnv('SonarQube') {
          sh '''
            sonar-scanner \
              -Dsonar.projectKey=myproject \
              -Dsonar.sources=src \
              -Dsonar.php.coverage.reportPaths=coverage/clover.xml
          '''
        }
      }
    }

    stage('Quality Gate') {
      steps {
        timeout(time: 5, unit: 'MINUTES') {
          waitForQualityGate abortPipeline: true
        }
      }
    }
  }
}
```

## Quality Gates i profile reguł

Quality Gate to warunki, które musi spełnić analiza. Domyślny _Sonar way_ sprawdza nowy kod (dodany w bieżącym PR/commicie). Możesz tworzyć własne Quality Gates dostosowane do projektu.

Metryka

Domyślny próg (Sonar way)

Przykład własnego progu

Coverage on new code

≥ 80%

≥ 70% (złagodzony)

Duplicated Lines on new code

≤ 3%

≤ 5%

New Security Vulnerabilities

0 (High/Critical)

0 (All severities)

New Bugs (Blocker/Critical)

0

0

Maintainability Rating

A

B (złagodzony)

**Profile reguł** (Quality Profiles) definiują zestaw reguł aktywnych dla danego języka. SonarQube ma wbudowane profile dla PHP, Java, JS/TS i innych. Możesz dziedziczyć z Sonar way i wyłączać reguły, które generują fałszywe alarmy w Twoim projekcie. Profile możesz przypisać do konkretnego projektu lub ustawić jako domyślny dla języka.

## Najczęstsze pytania

Co to jest SonarQube i do czego służy? +

SonarQube to platforma do statycznej analizy kodu (SAST) - skanuje kod źródłowy i wykrywa błędy (bugs), podatności bezpieczeństwa (vulnerabilities), zapach kodu (code smells), duplikaty i brakujące testy. Obsługuje ponad 30 języków: Java, PHP, JavaScript/TypeScript, Python, C#, Go i inne. SonarQube Community Edition (dawniej Developer) jest darmowy i open-source.

Jakie są wymagania sprzętowe SonarQube? +

SonarQube Community wymaga minimum 2 GB RAM tylko dla procesu (zalecane 4+ GB), Java 17+, Elasticsearch (wbudowany) i bazy PostgreSQL. Nie działa na SQLite. Typowe małe wdrożenie to VPS z 4 GB RAM i 20 GB dysku SSD. JVM Elasticsearch jest najbardziej pamięciochłonną częścią - nie uruchamiaj SonarQube na VPS z 1 GB RAM.

Czym różni się SonarQube od SonarCloud? +

SonarCloud to SaaS hostowany przez SonarSource - zero infrastruktury, integracja w 5 minut z GitHub/GitLab/Bitbucket, bezpłatny dla projektów open-source. SonarQube Community to self-hosted - pełna kontrola nad danymi (RODO), działanie offline, integracja z prywatnym Gitea/GitLab. SonarCloud jest tańszy w eksploatacji (brak VPS), ale SonarQube daje więcej kontroli i nie wysyła kodu do zewnętrznego serwisu.

Co to jest Quality Gate w SonarQube? +

Quality Gate to zestaw warunków, które musi spełnić analiza kodu, aby oznaczona była jako PASSED. Domyślny Sonar Way sprawdza: Coverage na nowym kodzie ≥ 80%, Duplicated Lines ≤ 3%, zero nowych podatności High/Critical, zero nowych bugs blokujących. Jeśli Quality Gate FAILED, CI/CD pipeline może zostać zatrzymany - to mechanizm ochrony jakości.

## Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.

Contabo

VPS z 4+ GB RAM wymagany przez SonarQube - Contabo oferuje dobry stosunek ceny do RAM

Wysoki RAM

[Aktywuj rabat →](/out/contabo/#reklama "Contabo")

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/contabo/)

ProSerwer.pl

Polski VPS pod SonarQube - kod pozostaje w Polsce

RODO-friendly

[Aktywuj rabat →](/out/proserwer-pl/#reklama "ProSerwer.pl")

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/proserwer/)

Mikr.us

Tanie VPS-y do testów - sprawdź plany z 2+ GB RAM pod SonarQube

Budżetowy

[Aktywuj rabat →](/out/mikrus/#reklama "Mikr.us")

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/mikrus/)

## Powiązane strony

-   [Jenkins CI/CD na VPS - instalacja i pipeline](/baza-wiedzy/jenkins-cicd-vps/)
-   [GitLab CE - instalacja na VPS i konfiguracja CI/CD](/baza-wiedzy/gitlab-ce-instalacja-vps/)
-   [Docker na VPS - instalacja i konfiguracja](/baza-wiedzy/docker-na-vps/)
-   [Wszystkie artykuły](/baza-wiedzy/)
-   [Drone CI - lekki self-hosted CI/CD dla projektów Git
    
    Drone CI: instalacja server i Docker runner, konfiguracja OAuth GitHub/Gitea, plik .drone.yml z stages i steps,…
    
    ](/baza-wiedzy/drone-cicd-konfiguracja/)
-   [GitLab Runner self-hosted: konfiguracja i best practices
    
    Instalacja, rejestracja i optymalizacja self-hosted GitLab Runner: shell vs docker executor, stages, artifacts, cache,…
    
    ](/baza-wiedzy/gitlab-runner-self-hosted/)
-   [VPS pod Node.js i Next.js - PM2, Nginx, SSL, CI/CD
    
    Jak uruchomić Node.js i Next.js na VPS? PM2, reverse proxy Nginx/Caddy, SSL Let's Encrypt i CI/CD przez GitHub Actions.…
    
    ](/baza-wiedzy/vps-pod-nodejs-nextjs/)
-   [Jaki VPS wybrać?](/jaki-vps-wybrac/)

Autor: [Redakcja HostGrade.pl](/autorzy/) Zespół redakcyjny · Aktualizacja: 10 kwietnia 2026

Artykuły HostGrade.pl przygotowuje i aktualizuje redakcja serwisu. Ceny startowe, ceny odnowienia i warunki planów sprawdzamy w cennikach i regulaminach dostawców, a potem liczymy całkowity koszt za 2 lata (cena startowa plus odnowienia). Zasady zbierania danych i liczenia kosztów opisujemy na stronie Metodologia. Linki partnerskie oznaczamy jako #reklama.

[O redakcji i metodologii →](/autorzy/)