 Autor: [Robert Zasilny](/autorzy/robert-zasilny) Ekspert bezpieczeństwa i compliance · Zweryfikowano Kwiecień 2026

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

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 · 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 · 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 · 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/)