На прошлом проекте мы внедряли SonarQube. Подняли в Docker, настроили, интегрировали в пайплайн. Первые две недели команда была в восторге — столько багов находится! А через месяц все привыкли к 500+ issues в техдолге и перестали смотреть на отчёты.
Знакомая история?
Если вы ищете, как запустить SonarQube через Docker — статья для вас. Расскажу честно: что работает, что бесит, и когда есть смысл искать альтернативы.
Что такое SonarQube и зачем он в Docker
SonarQube — статический анализатор кода с веб-интерфейсом. Находит баги, уязвимости, code smells, считает техдолг. Показывает покрытия тестами, дубликаты кода, сложность. Красиво выглядит, строит графики.
Почему Docker? Потому что ставить SonarQube на bare metal — боль. Java, PostgreSQL, Elasticsearch, куча настроек. С Docker и docker compose это дело пяти минут. Ну, в теории.
На практике — зависит от железа. SonarQube хочет минимум 2 ГБ RAM для Elasticsearch, иначе падает. На слабых VPS не взлетит. Проверено.
Поднимаем SonarQube через docker compose
Самый простой вариант — один контейнер с встроенной базой H2. Для тестов пойдёт, для продакшена — нет.
# docker-compose.yml для тестов
version: "3.8"
services:
sonarqube:
image: sonarqube:community
ports:
- "9000:9000"
environment:
- SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_logs:/opt/sonarqube/logs
- sonarqube_extensions:/opt/sonarqube/extensions
volumes:
sonarqube_data:
sonarqube_logs:
sonarqube_extensions:
Запускаем: docker compose up -d. Ждём минуту. Открываем http://localhost:9000. Логин-пароль: admin/admin.
Для продакшена нужна внешняя PostgreSQL. И настройки sysctl, иначе Elasticsearch не стартует:
sysctl -w vm.max_map_count=262144
Без этого получите ошибку в логах. Потыкаетесь, погуглите, найдёте. Я так и сделал.
Полный docker compose для продакшена:
version: "3.8"
services:
sonarqube:
image: sonarqube:community
depends_on:
- db
environment:
- SONAR_JDBC_URL=jdbc:postgresql://db:5432/sonar
- SONAR_JDBC_USERNAME=sonar
- SONAR_JDBC_PASSWORD=sonar123
- SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true
ports:
- "9000:9000"
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_logs:/opt/sonarqube/logs
- sonarqube_extensions:/opt/sonarqube/extensions
db:
image: postgres:15
environment:
- POSTGRES_USER=sonar
- POSTGRES_PASSWORD=sonar123
- POSTGRES_DB=sonar
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
sonarqube_data:
sonarqube_logs:
sonarqube_extensions:
postgres_data:
Теперь серьёзно. Это работает. Но сколько ресурсов жрёт? На моём сервере — 3.5 ГБ RAM в простое. С активным анализом — до 5 ГБ. Для маленькой команды — дорого.
Что умеет SonarQube
После поднятия сервера нужно запустить анализ. Для этого есть SonarScanner или плагины для Maven/Gradle.
Пример для GitLab CI:
# .gitlab-ci.yml
sonarqube-check:
image: maven:3-openjdk-17
script:
- mvn sonar:sonar
-Dsonar.projectKey=myproject
-Dsonar.host.url=http://sonarqube:9000
-Dsonar.token=$SONAR_TOKEN
only:
- merge_requests
- main
Что получаете на выходе:
- Баги — потенциальные ошибки, null pointer, ресурсы не закрыты
- Уязвимости — SQL-инъекции, XSS, hardcoded passwords
- Code smells — нарушения стиля, длинные методы, дубликаты
- Technical debt — время на исправление, в часах
- Coverage — покрытие тестами, если передать отчёт jacoco/cobertura
Есть плагины для 30+ языков. Python, Java, JavaScript, TypeScript, Go, PHP — из коробки. Для редких языков нужно ставить плагины вручную.
Качество анализа? Хорошее для типовых проблем. Находит то, что пропускают ревьюеры. Но? Много false positives. Очень много. Приходится разметить как "Won't fix" или отключать правила.
Плюсы и минусы SonarQube
Сведу в таблицу, чтобы было честно:
| Плюсы | Минусы |
|---|---|
| Бесплатно (Community edition) | Тяжёлый — минимум 2 ГБ RAM |
| Поддержка 30+ языков | Много false positives |
| Красивый UI с дашбордами | Техдолг копится, никто не чистит |
| Интеграция с CI/CD | Настройка плагинов — боль |
| Quality Gates — блокируем плохой код | Нет AI — только правила |
| История анализов | Сервер нужно поддерживать |
Главный плюс — он работает. Десять лет на рынке, тысячи компаний используют. Документация нормальная, комьюнити большое.
Главный минус — он пассивный. Запустили анализ, получили отчёт, пошли дальше. AI-анализа нет, контекста нет. Все правила написаны людьми, адаптировать под свой проект сложно.
Для каких проектов подходит SonarQube
Идеально:
- Средние и крупные команды (10+ разработчиков)
- Java/Kotlin проекты — интеграция с Maven/Gradle из коробки
- Регулируемые отрасли — отчёты для аудитов
- Когда нужен красивый дашборд для менеджмента
Плохо подходит:
- Стартапы с маленькой командой — овчинка выделки не стоит
- Микросервисы на разных языках — много настройки
- Когда нужен быстрый фидбек в MR — лучше инлайн-комментарии
- Проекты без выделенного DevOps — кто будет поддерживать сервер?
На стартапе из 5 человек мы пробовали внедрить. Потратили неделю на настройку. Через месяц сервер упал, никто не заметил. Подняли через месяц — 2000 issues. Закрыли, пошли работать дальше.
Альтернативы SonarQube
SonarQube — не единственный вариант. Что ещё есть на рынке?
SonarCloud — SaaS-версия от тех же разработчиков. Не нужно поднимать сервер, платите за строки кода. Минимум $15/мес для маленьких команд. Работает с GitHub, GitLab, Bitbucket. Удобно, но данные уходят в облако — для российских компаний это проблема.
ESLint/Pylint/Semgrep — линтеры для конкретных языков. Легковесные, fast feedback, интегрируются в pre-commit hooks. Но нет единого интерфейса, нет истории, нет техдолга. Каждый линтер настраивается отдельно.
CodeClimate — SaaS, фокус на maintainability. Красивые отчёты, но дорого ($15/мес за разработчика) и снова данные за рубежом.
GitHub Copilot/CodeRabbit — AI-инструменты. Анализируют контекст, дают конкретные советы. Fast feedback прямо в PR. Но это зарубежные сервисы, не все могут использовать.
Distiq — российский AI-бот для code review. Работает с GitLab, GitHub, GitVerse. Анализирует каждый MR, оставляет инлайн-комментарии. Находит баги, уязвимости, проблемы с производительностью. Серверы в РФ, данные не уходят.
Когда выбрать Distiq вместо SonarQube
Если у вас:
- Маленькая команда — нет ресурса на поддержание SonarQube
- Нужен быстрый фидбек в MR — инлайн-комментарии работают лучше
- Важна российская юрисдикция — данные не покидают страну
- Хотите AI-анализ, а не просто набор правил
Distiq интегрируется за 2 минуты. Добавляете webhook, всё. Никаких серверов, баз данных, sysctl. Платформа поддерживает Python, JavaScript, TypeScript, Java, Go, PHP и другие языки.
SonarQube остаётся хорошим выбором для крупных команд с выделенным DevOps. Но если вам нужен code review, который реально помогает разработчикам, а не просто копит техдолг — посмотрите в сторону AI-инструментов.
