Установка 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 предлагает несколько подходящих вариантов:
- VPS Performance — идеально для небольших проектов
- NVMe VPS — отличное соотношение цены и качества
- Эко выделенные серверы — для многих проектов или тяжёлого анализа
- Выделенные серверы Performance — максимальная производительность
Предварительные требования
- SSH-доступ от root или пользователя с sudo
- Система Rocky Linux 9 64 бит
- Не менее 4 ГБ ОЗУ (SonarQube и Elasticsearch требовательны к памяти)
- Доменное имя (например,
sonarqube.вашдомен.com) с записью A, указывающей на IP сервера - Доступны порты 80 (HTTP) и 443 (HTTPS)
Требуемая конфигурация
| Компонент | Минимум | Рекомендуется |
|---|---|---|
| ОЗУ | 4 ГБ | 8 ГБ |
| CPU | 2 ядра | 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.