SonarQube — это то, на что смотрят все, когда нужен серьёзный инструмент для анализа кода. Платформа сканирует исходники, ловит баги, уязвимости, дублирование кода и проблемы с архитектурой. Звучит как волшебство? На самом деле это просто статический анализ, но сделанный очень хорошо.
Но вот незадача — установка SonarQube отпугивает многих. PostgreSQL, Java, куча конфигов... По моему опыту, половина попыток установки заканчивается на этапе запуска. Поэтому я расскажу, как это сделать правильно, с деталями.
Что такое SonarQube и зачем оно нужно
Короче, это сервер, который парсит ваш код и выдаёт отчёт: "здесь дыра в безопасности", "этот метод 500 строк, пора рефакторить", "код дублируется в трёх местах".
SonarQube работает на основе правил — их больше 3000 для разных языков. Поддерживает Python, Java, JavaScript, TypeScript, C#, Go, PHP и ещё с десяток других.
Возможности:
- Поиск баг и потенциальных проблем (обычно находит 20-30% реальных ошибок)
- Проверка безопасности (injection, XSS, утечки данных)
- Анализ покрытия кода тестами
- Метрики сложности и технического долга
Плюсы: полнофункциональный, гибкий, можно развернуть на своих серверах. Минусы: тяжелый (требует PostgreSQL и 2+ ГБ RAM), медленный на больших кодовых базах, платная версия для продвинутых фич.
Требования к системе и подготовка
Прежде чем начать, нужно понять, что мы устанавливаем. SonarQube — это Java-приложение, которое требует:
- Java 17 или выше (последние версии требуют именно 17+)
- PostgreSQL 12+ (можно MySQL, но PostgreSQL стабильнее)
- 2+ ГБ оперативной памяти (для малых проектов), 4+ для нормальной работы
- 10+ ГБ дискового пространства (зависит от размера кодовой базы)
Я рекомендую Linux (Ubuntu 20.04+ или Debian 11+). На Windows тоже работает, но хлопот больше.
Проверим Java:
java -version
Если нет — устанавливаем:
sudo apt-get update
sudo apt-get install openjdk-17-jdk
Убедитесь, что Java именно 17+:
java -version
# должно вывести что-то вроде "openjdk version "17.0.x""
Установка PostgreSQL
SonarQube на встроенной БД работает только для оценки. Для production — нужна отдельная база.
sudo apt-get install postgresql postgresql-contrib
Стартуем PostgreSQL:
sudo systemctl start postgresql
sudo systemctl enable postgresql
Теперь создаём пользователя и базу для SonarQube:
sudo -u postgres psql
В интерактивной оболочке PostgreSQL:
CREATE USER sonarqube WITH PASSWORD 'your_secure_password_here';
CREATE DATABASE sonarqube OWNER sonarqube;
GRANT ALL PRIVILEGES ON DATABASE sonarqube TO sonarqube;
ALTER SYSTEM SET max_prepared_transactions = 96;
\q
Перезагружаем PostgreSQL, чтобы применить параметры:
sudo systemctl restart postgresql
Проверяем подключение:
psql -U sonarqube -d sonarqube -h localhost
Если вы видите prompt sonarqube=>, значит всё работает. Выходим:
\q
Скачивание и распаковка SonarQube
Идём на sonarqube.org/downloads. Берём Community Edition (бесплатная версия). На момент написания это версия 10.x.
cd /opt
sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-10.6.0.92116.zip
sudo unzip sonarqube-10.6.0.92116.zip
sudo mv sonarqube-10.6.0.92116 sonarqube
sudo chown -R nobody:nogroup /opt/sonarqube
Почему nobody:nogroup? Потому что SonarQube не должен работать от root — это плохая идея для безопасности.
Конфигурирование SonarQube
Основной конфиг находится в sonarqube/conf/sonar.properties. Отредактируем его:
sudo nano /opt/sonarqube/conf/sonar.properties
Нужно раскомментировать и заполнить строки про БД:
sonar.jdbc.username=sonarqube
sonar.jdbc.password=your_secure_password_here
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube
# Порт, на котором будет работать веб-интерфейс
sonar.web.port=9000
# Если хотите доступ не только с localhost
sonar.web.host=0.0.0.0
# Java heap размер (для малых проектов 512m, для больших 2g+)
sonar.web.javaOpts=-Xmx2g -Xms1g
Сохраняем (Ctrl+X, Y, Enter).
Создание systemd сервиса
Чтобы SonarQube запускался при старте системы и управлялся как сервис, создаём файл:
sudo nano /etc/systemd/system/sonarqube.service
Вставляем:
[Unit]
Description=SonarQube service
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=nobody
Group=nogroup
Restart=always
[Install]
WantedBy=multi-user.target
Даём права на исполнение скрипту:
sudo chmod +x /opt/sonarqube/bin/linux-x86-64/sonar.sh
Перезагружаем systemd и стартуем SonarQube:
sudo systemctl daemon-reload
sudo systemctl start sonarqube
sudo systemctl enable sonarqube
Проверяем статус:
sudo systemctl status sonarqube
Должно быть active (running).
Первый запуск и вход в веб-интерфейс
Первый запуск может занять минуту-две. SonarQube инициализирует БД, создаёт индексы и всё такое.
Когда сервис запустился, открываем браузер и идём на:
http://localhost:9000
Вводим дефолтные учётные данные:
- Логин:
admin - Пароль:
admin
SonarQube попросит сменить пароль. Меняем на что-то безопасное.
Поздравляю, вы установили SonarQube!
Интеграция с GitHub/GitLab и первый анализ
Теперь нужно настроить анализ кода. Самый популярный способ — через SonarScanner.
Скачиваем SonarScanner:
cd /opt
sudo wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-6.2.1.4610-linux-x64.zip
sudo unzip sonar-scanner-cli-6.2.1.4610-linux-x64.zip
sudo mv sonar-scanner-6.2.1.4610-linux-x64 sonar-scanner
sudo chown -R nobody:nogroup /opt/sonar-scanner
Добавляем в PATH:
echo 'export PATH=$PATH:/opt/sonar-scanner/bin' >> ~/.bashrc
source ~/.bashrc
В проекте создаём файл sonar-project.properties:
sonar.projectKey=my_project
sonar.projectName=My Project
sonar.projectVersion=1.0
sonar.sources=src
sonar.host.url=http://localhost:9000
sonar.login=YOUR_TOKEN_HERE
Токен берём из SonarQube в Administration > Security > Users > Generate Token.
Запускаем анализ:
cd /path/to/your/project
sonar-scanner
SonarScanner загрузит результаты в SonarQube, и вы увидите отчёт в веб-интерфейсе.
Плюсы и минусы SonarQube в реальной работе
Плюсы:
- Очень подробные отчёты с объяснением каждой проблемы
- Можно запустить на своих серверах — данные не уходят никуда
- Огромное сообщество и документация
- Интеграция со всеми популярными CI/CD системами
Минусы:
- Установка и поддержка требуют знаний DevOps
- Медленнее, чем облачные решения (типа CodeClimate)
- Требует ресурсов — не поднимешь на слабом сервере
- Платная версия нужна для серьёзных фич (branch analysis, pull request decoration)
- По моему опыту, на кодовой базе 500k+ строк анализ может занять 10+ минут
Когда SonarQube имеет смысл, а когда нет
Подходит для:
- Enterprise проектов, где важна безопасность
- Больших команд (10+ разработчиков)
- Проектов с жёсткими требованиями к качеству кода
- Когда данные критичны и нельзя отправлять в облако
Не подходит для:
- Стартапов и MVP (слишком тяжело поддерживать)
- Малых команд (до 5 человек)
- Когда нужна скорость и минимум хлопот
Альтернативы:
- CodeClimate — облачный, быстрый, но платный
- Checkstyle/PMD — легче, но менее мощные
- GitHub Advanced Security — если вы на GitHub, встроенные инструменты неплохо работают
- Distiq — если вы на GitLab или GitHub и хотите русский сервис с AI code review, который не требует отдельного сервера и БД, это может быть проще
Честно? Если у вас есть возможность использовать облачное решение — используйте. Если нужна полная приватность и контроль — тогда SonarQube.
Я установил SonarQube на пяти разных проектах. Первый раз в душе не чаю, потом привыкаешь. Главное — не пытайтесь установить это на shared hosting или дешёвый VPS. Это инструмент для серьёзных систем.
Если вам нужна автоматизация code review, но без лишних сложностей с установкой — посмотрите на Distiq. Это российский AI-бот для code review, который интегрируется за 2 минуты и не требует отдельного сервера. Работает в GitLab, GitHub и GitVerse.
