Установка 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=sonarSystemd‑сервис для 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 запущен и активен в systemd.
- Порт 9000 слушается локально и доступен через Nginx.
- Веб‑интерфейс открывается, вход в систему под admin выполнен.
- Анализ проекта выполняется и отображает результаты (см. лог CE).
Тестовые шаги (acceptance):
- Проверить статус сервиса: systemctl status sonar.
- Подключиться к порту: ss -antpl | grep 9000.
- Открыть веб UI и залогиниться.
- Запустить анализ простого проекта (пример: 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Если перезапуск не помогает — см. раздел «План отката» ниже.
План отката и аварийного восстановления
- Если обновление SonarQube вызвало проблему, остановите сервис: systemctl stop sonar.
- Восстановите директорию /opt/sonarqube из резервной копии (сохраняйте /opt/sonarqube и /opt/sonarqube/conf).
- Восстановите базу данных из дампа PostgreSQL: pg_restore или psql.
- Запустите сервис и проверьте логи.
Рекомендуемая команда для резервного копирования БД:
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, затем войдите в веб‑интерфейс и смените пароль.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента