Гид по технологиям

Установка SonarQube на Ubuntu 20.04

6 min read DevOps Обновлено 27 Nov 2025
Установка SonarQube на Ubuntu 20.04
Установка SonarQube на Ubuntu 20.04

  • Кратко: настройте Java 11, PostgreSQL, загрузите SonarQube 7.9.3, создайте пользователя, настройте systemd и обратный прокси Nginx. Проверьте логи и откройте веб-интерфейс на порту 9000 или через Nginx. Этот материал содержит инструкции, проверочные шаги, рекомендации по безопасности и план восстановления.

SonarQube — веб‑платформа с открытым кодом для анализа качества исходного кода. Она написана на Java и поддерживает более 20 языков через плагины (C/C++, PL/SQL, Cobol и др.). SonarQube интегрируется с базами данных (PostgreSQL, MySQL, Oracle, MSSQL) и непрерывно инспектирует проект, показывая метрики и дефекты.

В этом руководстве показано пошагово как установить SonarQube 7.9.3 на Ubuntu 20.04, настроить PostgreSQL, systemd‑сервис и Nginx как обратный прокси. Включены советы по безопасности, тесты приёмки и сценарий отката.

Основные понятия в одной строке

  • SonarQube: сервер для анализа кода и визуализации метрик.
  • CE (Compute Engine): компонент для фоновой обработки анализов.
  • Elasticsearch: внутренний компонент поиска и индексации (требует настройки vm.max_map_count).

Что потребуется

  • Сервер с Ubuntu 20.04.
  • Домен, указывающий на IP сервера (например sonar.example.com).
  • Доступ root или пользователь с sudo.
  • Резервная копия данных перед обновлениями/изменениями.

Факты в цифрах

  • Порт по умолчанию: 9000 (http).
  • Рекомендуемая Java: OpenJDK 11.
  • Примерная настройка лимитов: vm.max_map_count=262144, fs.file-max=65536, LimitNOFILE=65536.

Подготовка системы

Обновите пакеты:

apt-get update -y

Увеличьте системные лимиты, необходимые для Elasticsearch и SonarQube:

sysctl -w vm.max_map_count=262144
sysctl -w fs.file-max=65536
ulimit -n 65536
ulimit -u 4096

Важно: vm.max_map_count обязателен для корректной работы встроенного Elasticsearch в SonarQube 7.x.

Установка Java

SonarQube — Java‑приложение. Установите JDK:

apt-get install default-jdk unzip gnupg2 -y

Проверьте версию:

java --version

Ожидаемый результат должен показывать OpenJDK 11.*.

Установка и настройка PostgreSQL

SonarQube использует PostgreSQL как бэкенд. Добавьте официальный репозиторий PostgreSQL и установите сервер:

sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | apt-key add -
apt-get update -y
apt-get -y install postgresql postgresql-contrib

Запустите и включите сервис:

systemctl start postgresql
systemctl enable postgresql

Установите пароль для системного пользователя postgres (это пароль ОС, не пользователя PostgreSQL):

passwd postgres

Создайте роль и базу данных для SonarQube:

su - postgres
createuser sonar
psql
ALTER USER sonar WITH ENCRYPTED password 'sonar';
CREATE DATABASE sonarqube OWNER sonar;
grant all privileges on DATABASE sonarqube to sonar;
\q
exit

Замечания:

  • Используйте надежный пароль вместо ‘sonar’ в боевой среде.
  • При необходимости настройте метод аутентификации в /etc/postgresql/*/main/pg_hba.conf.

Установка SonarQube

Скачайте и распакуйте указанный релиз:

wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.9.3.zip
unzip sonarqube-7.9.3.zip
mv sonarqube-7.9.3 /opt/sonarqube

Создайте пользователя приложения и отдайте права:

adduser --system --group --no-create-home sonar
chown -R sonar:sonar /opt/sonarqube

Отредактируйте конфигурацию соединения с базой: /opt/sonarqube/conf/sonar.properties

sonar.jdbc.username=sonar
sonar.jdbc.password=sonar
sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube
sonar.web.host=0.0.0.0

Убедитесь, что драйвер PostgreSQL находится в /opt/sonarqube/lib/jdbc/postgresql/ (SonarQube обычно включает JDBC‑драйвер).

Определите пользователя в скрипте запуска:

nano /opt/sonarqube/bin/linux-x86-64/sonar.sh
# установить
RUN_AS_USER=sonar

Systemd‑сервис для SonarQube

Создайте файл /etc/systemd/system/sonar.service с содержимым:

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

[Service]
LimitNOFILE=65536
LimitNPROC=4096
Type=forking

ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start
ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop

User=sonar
Group=sonar
Restart=always

[Install]
WantedBy=multi-user.target

Примените, запустите и включите автозапуск:

systemctl daemon-reload
systemctl start sonar
systemctl enable sonar
systemctl status sonar

Проверка, что процесс слушает порт 9000:

ss -antpl | grep 9000

Логи SonarQube находятся в /opt/sonarqube/logs/. Для потокового просмотра:

tail -f /opt/sonarqube/logs/sonar.log

Настройка Nginx как обратного прокси

Установите Nginx и создайте конфигурацию виртуального хоста:

apt-get install nginx -y
nano /etc/nginx/conf.d/sonar.conf

Добавьте:

upstream sonar_backend {
  server 127.0.0.1:9000;
}

server {
    listen 80;
    server_name sonar.example.com;

    location / {
        proxy_pass http://sonar_backend/;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forward-Proto http;
        proxy_set_header X-Nginx-Proxy true;

        proxy_redirect off;
    }
}

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

nginx -t
systemctl restart nginx
systemctl enable nginx
systemctl status nginx

Совет: для HTTPS используйте Certbot (Let’s Encrypt) или другой CA и перенастройте proxy_set_header X-Forward-Proto на https.

Пример настройки SSL через Certbot (быстрая инструкция)

apt-get install certbot python3-certbot-nginx -y
certbot --nginx -d sonar.example.com

После успешного сертификата Nginx будет настроен для HTTPS автоматически.

Доступ к веб UI

Откройте в браузере http://sonar.example.com или https://sonar.example.com (если настроен SSL). По умолчанию используйте учетные данные:

  • Логин: admin
  • Пароль: admin

Измените админ‑пароль сразу после первого входа.

Экран входа SonarQube

Форма входа SonarQube

Дашборд SonarQube

Проверка работоспособности и тесты приёмки

Критерии приёмки

  • Сервис SonarQube запущен и активен в systemd.
  • Порт 9000 слушается локально и доступен через Nginx.
  • Веб‑интерфейс открывается, вход в систему под admin выполнен.
  • Анализ проекта выполняется и отображает результаты (см. лог CE).

Тестовые шаги (acceptance):

  1. Проверить статус сервиса: systemctl status sonar.
  2. Подключиться к порту: ss -antpl | grep 9000.
  3. Открыть веб UI и залогиниться.
  4. Запустить анализ простого проекта (пример: Maven/Gradle) и убедиться, что задания CE завершились.

Частые проблемы и сценарии устранения

Проблема: SonarQube не стартует, ошибки Elasticsearch

  • Проверьте vm.max_map_count.
  • Посмотрите /opt/sonarqube/logs/es.log и sonar.log.
  • Убедитесь, что права на каталоги принадлежат пользователю sonar.

Проблема: 502 Bad Gateway через Nginx

  • Убедитесь, что backend (127.0.0.1:9000) работает.
  • Проверьте proxy_set_header Host и X-Forward-Proto при использовании SSL.
  • Посмотрите журнал Nginx: /var/log/nginx/error.log.

Сценарий быстого рестарта при падении

systemctl restart sonar
sleep 10
systemctl status sonar
tail -n 200 /opt/sonarqube/logs/sonar.log

Если перезапуск не помогает — см. раздел «План отката» ниже.

План отката и аварийного восстановления

  1. Если обновление SonarQube вызвало проблему, остановите сервис: systemctl stop sonar.
  2. Восстановите директорию /opt/sonarqube из резервной копии (сохраняйте /opt/sonarqube и /opt/sonarqube/conf).
  3. Восстановите базу данных из дампа PostgreSQL: pg_restore или psql.
  4. Запустите сервис и проверьте логи.

Рекомендуемая команда для резервного копирования БД:

su - postgres
pg_dump -Fc sonarqube > /var/backups/sonarqube_db_$(date +%F).dump

Рекомендации по безопасности

  • Запустите SonarQube от непривилегированного системного пользователя (sonar).
  • Ограничьте доступ к интерфейсу администратора по IP/ACL, если возможно.
  • Настройте HTTPS и HSTS в Nginx.
  • Обновляйте плагины только из доверенных источников.
  • Храните пароли и секреты в безопасном хранилище (Vault, secrets manager).

Резервное копирование и миграции

  • Регулярно делайте дампы PostgreSQL и сохраняйте /opt/sonarqube/extensions и /opt/sonarqube/conf.
  • Для миграции на более новую версию SonarQube: читайте официальные заметки к релизу — иногда требуется миграция БД.

Альтернативные подходы

  • Docker: SonarQube удобно запускать в контейнере (официальные образы), упрощает изоляцию и деплой.
  • Управляемые сервисы: если не хотите поддерживать инстанс, рассмотрите SaaS‑предложения для анализа кода.
  • Использование другого СУБД (MySQL, MSSQL) — возможна, но PostgreSQL чаще всего рекомендуется.

Совместимость и примечания по версиям

  • Пример использует SonarQube 7.9.3 (LTS на момент примера). Новые версии требуют проверки совместимости плагинов и Java.
  • Java 11 — минимально рекомендуемая для 7.x; для более новых версий SonarQube могут потребоваться Java 17 и т.п. Всегда проверяйте требования релиза.

Роли и чеклист по внедрению

Для DevOps

  • Подготовить сервер и DNS.
  • Установить Java, PostgreSQL, Nginx.
  • Настроить systemd и мониторинг.

Для администратора SonarQube

  • Создать учетные записи и разделы.
  • Настроить права проектов и Quality Gates.
  • Планировать обновления и резервное копирование.

Для разработчиков

  • Установить локальные плагины и интеграцию в CI.
  • Настроить анализ в пайплайне (Maven, Gradle, SonarScanner).

Snippets и чек‑листы (полезные команды)

Проверка логов:

tail -n 200 /opt/sonarqube/logs/sonar.log
tail -n 200 /opt/sonarqube/logs/web.log
tail -n 200 /opt/sonarqube/logs/es.log

Права и владение:

chown -R sonar:sonar /opt/sonarqube
chmod -R 750 /opt/sonarqube

Откат базы:

su - postgres
pg_restore -d sonarqube /var/backups/sonarqube_db_YYYY-MM-DD.dump

Когда этот подход не подходит

  • Если вы хотите минимизировать администрирование — лучше использовать Docker или SaaS.
  • Для масштабирования на большое количество проектов и пользователей может потребоваться более мощная инфраструктура и кластеризация (встроенный Elasticsearch имеет ограничения на масштаб).

Заключение

Поздравляем — SonarQube установлен и доступен через Nginx. В этом руководстве вы нашли пошаговые команды, проверочные шаги, рекомендации по безопасности и аварийному откату. После установки:

  • Измените пароль admin и настройте Quality Gates.
  • Интегрируйте SonarScanner в CI/CD.
  • Настройте мониторинг и регулярные бэкапы.

Если нужны примеры конфигурации CI (GitLab CI, Jenkins, GitHub Actions) или инструкция по миграции на контейнеры, напишите, и я подготовлю шаблоны.

Краткое резюме внизу.

Важно

  • Немедленно смените дефолтный пароль admin.
  • В боевой среде используйте доступ по HTTPS и надежные пароли.

Краткое резюме

  • SonarQube запрашивает Java 11 и PostgreSQL.
  • Скачайте SonarQube, создайте системного пользователя, отредактируйте sonar.properties, создайте systemd‑сервис и настройте Nginx.
  • Проверьте логи и порт 9000, затем войдите в веб‑интерфейс и смените пароль.
Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро