Skip to main content

Установка SonarQube на Rocky Linux

В этом руководстве описано, как установить и настроить SonarQube на сервере Rocky Linux 9. SonarQube — платформа с открытым исходным кодом для статического анализа кода: обнаруживает ошибки, «запахи кода» и уязвимости безопасности, поддерживает множество языков программирования и автоматизирует код-ревью для поддержания высокого качества. SonarQube основан на Java и может быть развёрнут на различных дистрибутивах Linux (включая Rocky Linux) или в контейнерах (Docker, Kubernetes).

Описываемая установка использует OpenJDK 17, PostgreSQL в качестве базы данных, Apache в качестве обратного прокси и Let's Encrypt для HTTPS.

Заказать сервер

Для размещения экземпляра SonarQube HostMyServers предлагает несколько подходящих вариантов:

Предварительные требования

  • SSH-доступ от root или пользователя с sudo
  • Система Rocky Linux 9 64 бит
  • Не менее 4 ГБ ОЗУ (SonarQube и Elasticsearch требовательны к памяти)
  • Доменное имя (например, sonarqube.вашдомен.com) с записью A, указывающей на IP сервера
  • Доступны порты 80 (HTTP) и 443 (HTTPS)

Требуемая конфигурация

КомпонентМинимумРекомендуется
ОЗУ4 ГБ8 ГБ
CPU2 ядра4 ядра
Хранилище10 ГБ20 ГБ
Сеть100 Мбит/с1 Гбит/с
Порт по умолчанию

SonarQube прослушивает порт 9000 локально. Apache выступает обратным прокси к этому порту; публичный доступ по HTTP/HTTPS на 80/443.

Подключение к серверу

Подключитесь по SSH к серверу Rocky Linux:

ssh пользователь@ip_адрес_сервера

Обновление системы

Обновите пакеты перед началом:

sudo dnf update -y

Установка OpenJDK 17

SonarQube требует JRE/JDK. Версия LTA (long-term active) 2025 SonarQube требует Java 17 или 21. Используем OpenJDK 17.

sudo dnf install -y java-17-openjdk java-17-openjdk-devel

Проверьте установленную версию:

java -version

Должна отображаться строка вида: openjdk version "17.x.x". Если активна более старая версия, выберите Java 17: sudo alternatives --config java.

Создание пользователя SonarQube

SonarQube использует Elasticsearch для поиска и индексации; должен запускаться от не-root пользователя. Создайте отдельного системного пользователя:

sudo useradd --system sonarqube

База данных PostgreSQL для SonarQube

SonarQube поддерживает несколько СУБД. Используем PostgreSQL.

Установка и инициализация PostgreSQL

sudo dnf install -y postgresql-server postgresql-contrib
sudo postgresql-setup --initdb
sudo systemctl enable postgresql
sudo systemctl start postgresql

Создание базы и пользователя

Подключитесь к PostgreSQL под пользователем postgres:

sudo -i -u postgres psql

В консоли PostgreSQL выполните (замените ВАШ_ПАРОЛЬ на надёжный пароль):

\password postgres
CREATE DATABASE sonardb;
CREATE USER sonaruser WITH ENCRYPTED PASSWORD 'ВАШ_ПАРОЛЬ';
GRANT ALL PRIVILEGES ON DATABASE sonardb TO sonaruser;
\q

Включение аутентификации по паролю (pg_hba.conf)

Отредактируйте файл конфигурации аутентификации:

sudo nano /var/lib/pgsql/data/pg_hba.conf

Для локальных и TCP-подключений используйте trust для «local» и md5 для «host» (например, 127.0.0.1/32 и ::1/128). Пример:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local all all trust
host all all 127.0.0.1/32 md5
host all all ::1/128 md5

Перезапустите PostgreSQL:

sudo systemctl restart postgresql

Установка SonarQube

SonarQube не входит в стандартные репозитории DNF. Скачайте архив с официального сайта.

Скачивание и распаковка SonarQube

См. страницу загрузок SonarQube для последней версии LTA. Пример для версии 25.x (при необходимости измените URL и имя папки):

sudo dnf install -y unzip
sudo mkdir -p /opt/sonarqube
cd /tmp
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-25.1.0.102122.zip
unzip sonarqube-25.1.0.102122.zip
sudo mv sonarqube-25.1.0.102122/* /opt/sonarqube
Версия

Замените sonarqube-25.1.0.102122 на точное имя распакованной папки для скачанной версии.

Установка SonarScanner CLI (опционально, но полезно)

SonarScanner позволяет анализировать проекты из командной строки. Скачайте последнюю версию с SonarScanner CLI.

sudo mkdir -p /opt/sonarscanner
cd /tmp
wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-7.0.2.4839-linux-x64.zip
unzip sonar-scanner-cli-7.0.2.4839-linux-x64.zip
sudo mv sonar-scanner-7.0.2.4839-linux-x64/* /opt/sonarscanner

Настройте URL сервера SonarQube (для локального анализа):

sudo nano /opt/sonarscanner/conf/sonar-scanner.properties

Добавьте или задайте: sonar.host.url=http://127.0.0.1

Сделайте исполняемый файл доступным в системе:

sudo chmod +x /opt/sonarscanner/bin/sonar-scanner
sudo ln -sf /opt/sonarscanner/bin/sonar-scanner /usr/local/bin/sonar-scanner

Проверка: sonar-scanner -v

Настройка SonarQube

Файл sonar.properties

Отредактируйте основную конфигурацию SonarQube:

sudo nano /opt/sonarqube/conf/sonar.properties

В конец файла добавьте (замените ВАШ_ПАРОЛЬ на пароль пользователя PostgreSQL sonaruser):

sonar.jdbc.username=sonaruser
sonar.jdbc.password=ВАШ_ПАРОЛЬ
sonar.jdbc.url=jdbc:postgresql://localhost/sonardb
sonar.web.host=0.0.0.0
sonar.web.port=9000
sonar.web.javaOpts=-Xmx512m -Xms256m -XX:+HeapDumpOnOutOfMemoryError
sonar.search.javaOpts=-Xmx1g -Xms1g -XX:MaxDirectMemorySize=512m -XX:+HeapDumpOnOutOfMemoryError
sonar.path.data=data
sonar.path.temp=temp
ПараметрОписание
sonar.jdbc.*Подключение к PostgreSQL
sonar.web.hostПрослушивание на всех интерфейсах (0.0.0.0)
sonar.web.portПорт веб-интерфейса (9000)
sonar.web.javaOptsПараметры JVM для веб-сервера
sonar.search.javaOptsПараметры JVM для Elasticsearch (поиск)
sonar.path.data / sonar.path.tempКаталоги данных и временных файлов

Права и системные лимиты

Назначьте владельца каталога SonarQube пользователю sonarqube:

sudo chown -R sonarqube:sonarqube /opt/sonarqube
sudo chmod -R 775 /opt/sonarqube

SonarQube (Elasticsearch) требует более высокий лимит для областей отображённой памяти. Добавьте в /etc/sysctl.conf:

sudo nano /etc/sysctl.conf

В конец добавьте:

vm.max_map_count=524288
fs.file-max=131072

Затем примените: sudo sysctl -p

Служба systemd для SonarQube

SonarQube поставляется со скриптом запуска в /opt/sonarqube/bin/linux-x86-64/sonar.sh. Создайте службу systemd.

Контекст SELinux (Rocky Linux 9)

В Rocky Linux SELinux включён. Разрешите выполнение скрипта:

sudo chcon -t bin_t /opt/sonarqube/bin/linux-x86-64/sonar.sh
sudo restorecon -Rv /opt/sonarqube

Файл службы

sudo nano /etc/systemd/system/sonarqube.service

Содержимое:

[Unit]
Description=SonarQube service
After=syslog.target network.target

[Service]
Type=forking
User=sonarqube
Group=sonarqube
PermissionsStartOnly=true
ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop
Restart=always
RestartSec=10
LimitNOFILE=131072
LimitNPROC=8192
SuccessExitStatus=143
TimeoutStartSec=300

[Install]
WantedBy=multi-user.target

Включите и запустите службу:

sudo systemctl daemon-reload
sudo systemctl enable sonarqube
sudo systemctl start sonarqube
sudo systemctl status sonarqube

Статус должен быть active (running). Первый запуск может занять несколько минут (инициализация Elasticsearch и базы).

Обратный прокси Apache и HTTPS

Веб-интерфейс SonarQube доступен локально на порту 9000. Для доступа по HTTP/HTTPS используем Apache в качестве обратного прокси.

Установка Apache

sudo dnf install -y httpd
sudo systemctl enable httpd
sudo systemctl start httpd

Проверьте загрузку модулей proxy: sudo httpd -M | grep proxy (proxy_module, proxy_http_module, proxy_balancer_module). При необходимости раскомментируйте соответствующие строки в /etc/httpd/conf/httpd.conf.

Виртуальный хост для SonarQube

Создайте файл конфигурации для вашего домена (замените sonarqube.вашдомен.com на ваш домен):

sudo nano /etc/httpd/conf.d/sonarqube.conf

Содержимое:

<VirtualHost *:80>
ServerName sonarqube.вашдомен.com
ServerAdmin admin@вашдомен.com
ProxyPreserveHost On
ProxyPass / http://localhost:9000/
ProxyPassReverse / http://localhost:9000/
TransferLog /var/log/httpd/sonarqube_access.log
ErrorLog /var/log/httpd/sonarqube_error.log
</VirtualHost>

Проверьте конфигурацию и перезапустите Apache:

sudo apachectl configtest
sudo systemctl restart httpd

Разрешение Apache подключаться к backend (SELinux)

Чтобы Apache мог проксировать на localhost:9000:

sudo setsebool -P httpd_can_network_connect 1

Файрвол

Откройте порты HTTP и HTTPS:

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --add-service=https --permanent
sudo firewall-cmd --reload

TLS-сертификат с Certbot (Let's Encrypt)

Для защиты доступа по HTTPS:

sudo dnf install -y certbot python3-certbot-apache
sudo certbot --apache -d sonarqube.вашдомен.com -m ваш-email@пример.com --agree-tos

Certbot настроит Apache для HTTPS и автоматического обновления сертификатов.

Доступ к SonarQube

  1. Откройте браузер и перейдите по адресу: https://sonarqube.вашдомен.com
  2. Войдите с учётными данными по умолчанию: admin / admin
  3. SonarQube предложит сменить пароль администратора; выберите надёжный пароль.
  4. Для анализа (CI/CD или командная строка) создайте пользователя или токен: АдминистрированиеБезопасностьПользователи → Создать пользователя, затем сгенерируйте токен для этого аккаунта.

Анализ проекта с SonarScanner

Для проверки установки можно проанализировать пример проекта:

cd ~
mkdir -p projects && cd projects
git clone https://github.com/SonarSource/sonar-scanning-examples
cd sonar-scanning-examples/sonar-scanner

Сгенерируйте токен в интерфейсе SonarQube (Администрирование → Безопасность → Пользователи → Токены), затем запустите анализ (замените ВАШ_ТОКЕН на сгенерированный токен):

sonar-scanner -D sonar.token=ВАШ_ТОКЕН

После завершения анализа откройте проект в интерфейсе: Проекты → проанализированный проект отображается с метриками (ошибки, уязвимости, покрытие, дубликаты).

Полезные команды

КомандаОписание
sudo systemctl status sonarqubeСтатус службы SonarQube
sudo systemctl restart sonarqubeПерезапуск SonarQube
sudo systemctl restart httpdПерезапуск Apache
sonar-scanner -vВерсия SonarScanner
sonar-scanner -D sonar.token=TOKENЗапуск анализа с токеном

Структура каталогов

ПутьОписание
/opt/sonarqube/Установка SonarQube (bin, conf, data, temp, extensions)
/opt/sonarqube/conf/sonar.propertiesОсновная конфигурация
/opt/sonarscanner/Установка SonarScanner CLI
/etc/httpd/conf.d/sonarqube.confВиртуальный хост Apache

Устранение неполадок

Служба SonarQube не запускается

  • Проверьте логи: sudo journalctl -u sonarqube.service -n 100
  • Просмотрите логи SonarQube: tail -f /opt/sonarqube/logs/sonar.log и tail -f /opt/sonarqube/logs/web.log
  • Убедитесь, что PostgreSQL запущен: sudo systemctl status postgresql
  • Проверьте параметры ядра: sysctl vm.max_map_count (должно быть не менее 524288)

Ошибка 503 или страница недоступна через Apache

  • Убедитесь, что SonarQube слушает порт 9000: ss -tlnp | grep 9000
  • Проверьте SELinux: getsebool httpd_can_network_connect (должно быть «on»)
  • Просмотрите логи Apache: sudo tail -f /var/log/httpd/sonarqube_error.log

Java или память

  • Если параметры JVM в sonar.properties слишком малы для вашей ОЗУ, увеличьте sonar.web.javaOpts и sonar.search.javaOpts (например, -Xmx1g для web, -Xmx2g для search в зависимости от доступной ОЗУ).

Ссылки