С помощью этого руководства вы развернете платформу статического анализа кода SonarQube в облаке Cloud.ru для автоматической проверки качества и безопасности кода.
Вы создадите инфраструктуру, подключите SonarQube к управляемой базе данных Managed PostgreSQL®, опубликуете сервис через Nginx с автоматическим выпуском сертификатов Let’s Encrypt и обеспечите безопасный доступ по HTTPS. Также вы подключите репозиторий из GitVerse и настроите пайплайн CI/CD, запускающий анализ кода в SonarQube при каждом commit и pull request. Дополнительно вы интегрируете SonarQube с IDE VS Code для локального статического анализа кода во время разработки.
В результате вы получите готовый сервис анализа качества кода, изолированный в собственной VPC, доступный из интернета и встроенный в рабочий процесс разработки.
Вы будете использовать следующие сервисы:
Виртуальные машины — сервис, в рамках которого предоставляется виртуальная машина для размещения приложения.
Публичный IP-адрес для доступа к сервису через интернет.
Managed PostgreSQL — управляемая база данных PostgreSQL.
VPC-сеть — изолированная виртуальная сеть для создания безопасной инфраструктуры.
Бесплатный сервис nip.io для получения публичного доменного имени и сертификата. Вы также можете использовать собственное зарегистрированное доменное имя и SSL-сертификат для организации доступа.
Nginx — веб-сервер для проксирования запросов и организации защищeнного HTTPS-доступа к приложению.
Let’s Encrypt — сервис для автоматического получения бесплатного SSL-сертификата.
GitVerse — платформа для работы с исходным кодом.
(Опционально) SonarQube for IDE — расширение для подключения SonarQube к редактору Visual Studio Code.
Шаги:
(Опционально) Подключите SonarQube к Visual Studio Code.
Перед началом работы
-
Если вы уже зарегистрированы, войдите под своей учетной записью.
Сгенерируйте ключевую пару и загрузите публичный ключ в Cloud.ru Evolution.
Создайте учетную запись в GitVerse, если не сделали этого ранее. Примеры кода в практическом руководстве размещаются в GitVerse.
(Опционально) Скачайте и установите Visual Studio Code для выполнения шага 8.
1. Определите необходимую инфраструктуру для вашего проекта
Определите необходимые конфигурации виртуальной машины и кластера Managed PostgreSQL®, исходя из минимально рекомендованных значений.
Размер команды | Виртуальная машина | Кластер Managed PostgreSQL® |
---|---|---|
Небольшая команда разработки или тестовая среда:
|
|
|
Средняя команда или промышленная среда:
|
|
|
Большая команда — корпоративное решение:
|
|
|
2. Разверните ресурсы в облаке
На этом шаге вы подготовите сеть, группу безопасности, виртуальную машину и кластер Managed PostgreSQL®. Все ресурсы будут расположены в одной VPC, что обеспечит сетевую изоляцию.
Создайте виртуальную сеть с названием sonarqube-VPC.
Создайте подсеть со следующими параметрами:
Название: sonarqube-subnet.
VPC: sonarqube-VPC.
Адрес: 10.10.1.0/24.
DNS-серверы: 8.8.8.8.
Создайте группу безопасности с названием sonarqube и добавьте в нее правила:
Правило входящего трафика:
Протокол: TCP;
Порт: 443;
Тип источника: IP-адрес;
Источник: 0.0.0.0/0.
Правило входящего трафика:
Протокол: TCP;
Порт: 80;
Тип источника: IP-адрес;
Источник: 0.0.0.0/0.
Правило исходящего трафика:
Протокол: Любой;
Тип адресата: IP-адрес;
Адресат: 0.0.0.0/0.
Создайте виртуальную машину со следующими параметрами:
Название: sonarqube.
Образ: публичный образ Ubuntu 22.04.
Сетевой интерфейс: выберите тип Подсеть с публичным IP.
VPC: sonarqube-VPC.
Подсеть: sonarqube-subnet.
Публичный IP: оставьте Арендовать новый или выберите IP-адрес из списка арендованных.
Группы безопасности: SSH-access_ru.AZ-1 и sonarqube.
Логин: sonarqube.
Метод аутентификации: Публичный ключ и Пароль.
Публичный ключ: укажите ключ, созданный ранее.
Пароль: задайте пароль.
Имя хоста: sonarqube.
Остальные параметры оставьте по умолчанию или выберите на свое усмотрение.
Создайте кластер Managed PostgreSQL со следующими параметрами:
Имя кластера: sonarqube.
Название базы данных: sonarqube_db.
Версия PostgreSQL: 16.
Подсеть: sonarqube-subnet.
Остальные параметры оставьте по умолчанию или выберите на свое усмотрение.
Убедитесь, что ресурсы созданы и отображаются в личном кабинете:
На странице Сети → VPC отображается сеть sonarqube-VPC, а в списке ее подсетей — sonarqube-subnet.
На странице Сети → Группы безопасности отображается группа безопасности sonarqube со статусом «Создана».
На странице Инфраструктура → Виртуальные машины отображается виртуальная машина sonarqube со статусом «Запущена».
На странице Базы данных → Managed PostgreSQL® отображается кластер sonarqube со статусом «Доступен».
3. Настройте окружение виртуальной машины
На этом шаге вы установите необходимые пакеты и подготовите среду для SonarQube.
Обновите систему и установите утилиты:
sudo apt update && sudo apt upgrade -ysudo apt install curl wget unzip software-properties-common -yУстановите и запустите Nginx:
sudo apt install nginx -ysudo systemctl enable nginxsudo systemctl start nginxУстановите Let’s Encrypt и плагин для Nginx:
sudo apt install certbot python3-certbot-nginx -yУстановите Docker и Docker Compose:
curl -fsSL https://get.docker.com -o get-docker.shsudo sh get-docker.shsudo apt install docker compose -yДобавьте текущего пользователя виртуальной машины в группу Docker:
sudo usermod -aG docker $USERnewgrp dockerНастройте системные параметры для SonarQube.
Для стабильной работы SonarQube требуются повышенные значения параметров ядра vm.max_map_count, fs.file-max и пользовательских лимитов на количество открытых файлов (open files) и потоков (threads). В противном случае компонент Elasticsearch, используемый в SonarQube, не сможет создать необходимое количество отображений памяти (memory mappings) и файловых дескрипторов, что приведет к ошибкам при запуске и аварийному завершению анализа.
Настройка этих параметров с помощью sysctl и limits.conf обеспечивает их сохранение на уровне ядра и пользовательских лимитов. Это гарантирует, что при каждой загрузке операционной системы SonarQube будет автоматически получать требуемые ресурсы.
Настройте параметры ядра:
sudo sysctl -w vm.max_map_count=262144sudo sysctl -w fs.file-max=65536Задайте постоянное применение этих параметров:
echo 'vm.max_map_count=262144' | sudo tee -a /etc/sysctl.confecho 'fs.file-max=65536' | sudo tee -a /etc/sysctl.confУкажите лимиты:
echo 'sonarqube - nofile 65536' | sudo tee -a /etc/security/limits.confecho 'sonarqube - nproc 4096' | sudo tee -a /etc/security/limits.confulimit -n 65536ulimit -u 4096
4. Настройте защищенный доступ через Nginx
На этом шаге вы зарегистрируете доменное имя, настроите Nginx в качестве защищенного прокси, получите SSL-сертификат и ограничите доступ через межсетевой экран.
Создайте конфигурационный файл Nginx:
sudo nano /etc/nginx/sites-available/sonarqube.confВставьте код, заменив <ip-address> на значение публичного IP-адреса виртуальной машины:
server {listen 80;server_name sonar.<ip-address>.nip.io www.sonar.<ip-address>.nip.io;location / {proxy_pass http://127.0.0.1:9000;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-Proto $scheme;}}Сконфигурируйте межсетевой экран:
sudo ufw allow OpenSSHsudo ufw allow 'Nginx Full'sudo ufw enableАктивируйте конфигурацию и перезапустите Nginx:
sudo ln -sf /etc/nginx/sites-available/sonarqube.conf /etc/nginx/sites-enabled/sonarqube.confsudo rm -f /etc/nginx/sites-enabled/defaultsudo nginx -tsudo systemctl reload nginxВыпустите SSL-сертификат:
sudo certbot --nginx -d sonar.<ip-address>.nip.io --redirect --agree-tos -m <email>Где:
<ip-address> — публичный IP-адрес виртуальной машины.
<email> — email для регистрации сертификата.
Перейдите по адресу https://sonar.<ip-address>.nip.io и убедитесь, что браузер отмечает соединение как безопасное.
5. Установите и запустите SonarQube
На этом шаге вы установите SonarQube, настроите подключение к базе данных и запустите сервис через Docker Compose.
Создайте директорию проекта:
mkdir sonarqube-deploymentcd sonarqube-deploymentСоздайте файл docker-compose.yml:
nano docker-compose.ymlДобавьте следующую конфигурацию:
services:sonarqube:image: sonarqube:25.8.0.112029-communitycontainer_name: sonarquberestart: unless-stoppedports:- "9000:9000"environment:- SONAR_JDBC_URL=jdbc:postgresql://<postgres_ip>:5432/sonarqube_db- SONAR_JDBC_USERNAME=<postgres_admin_user>- SONAR_JDBC_PASSWORD=<postgres_admin_password>- SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=truevolumes:- sonarqube_data:/opt/sonarqube/data- sonarqube_extensions:/opt/sonarqube/extensions- sonarqube_logs:/opt/sonarqube/logsulimits:nproc: 131072nofile:soft: 8192hard: 131072volumes:sonarqube_data:sonarqube_extensions:sonarqube_logs:Где:
<postgres_admin_user> — имя пользователя кластера Managed PostgreSQL®.
<postgres_admin_password> — пароль указанного пользователя.
<postgres_ip> — приватный IP-адрес кластера.
Запустите контейнеры:
docker compose up -dПроверьте статус контейнеров:
docker compose psdocker compose logs -f sonarqubeПерейдите по адресу https://sonar.<ip-address>.nip.io и войдите в панель администратора, используя временные учетные данные admin/admin.
Смените пароль администратора.
6. Отключите SSH-доступ
Когда вы развернули и настроили сервис, закройте доступ по SSH для повышения безопасности.
В личном кабинете на верхней панели слева нажмите
и выберите Инфраструктура → Виртуальные машины.
В списке виртуальных машин выберите sonarqube.
Перейдите на вкладку Сетевые параметры.
В блоке сетевого интерфейса нажмите
и выберите Изменить группы безопасности.
Удалите группу SSH-access_ru и сохраните изменения.
Убедитесь, что доступа нет — попробуйте подключиться к виртуальной машине по SSH. После отключения доступа по SSH, администрирование сервиса будет доступно через серийную консоль виртуальной машины.
7. Подключите SonarQube к репозиторию в GitVerse
На этом шаге вы подключите SonarQube к проекту, размещенному в GitVerse, через CI/CD процесс.
Склонируйте репозиторий с приложением в GitVerse.
Перейдите в SonarQube по адресу https://sonar.<ip-address>.nip.io/projects.
Нажмите Create Project → Local.
Создайте проект со следующими значениями:
Project display name: evo-virtual-machine-sonarqube-lab.
Project key: evo-virtual-machine-sonarqube-lab.
Main branch name: master.
Нажмите Next.
Выберите значение Use the global setting.
Нажмите Create project.
В параметре Analysis Method выберите With GitHub Actions.
Нажмите Generate a token и скопируйте сгенерированный токен.
Добавьте секреты в GitVerse репозиторий:
SONAR_TOKEN;
SONAR_HOST_URL.
Убедитесь, что сборка CI/CD прошла успешно. Если сборка неуспешная, нажмите Перезапустить все джобы.
Перейдите в SonarQube по адресу https://sonar.<ip-address>.nip.io/projects и откройте проект evo-virtual-machine-sonar-qube-lab.
Посмотрите на отчет, проанализируйте найденные проблемы.
8. Подключите SonarQube к Visual Studio Code
На этом шаге вы подключите сервер SonarQube к проекту в IDE Visual Studio Code для получения подсказок в коде.
Откройте Visual Studio Code.
Склонируйте репозиторий с примером в GitVerse.
Откройте репозиторий с кодом примера evo-virtual-machine-sonarqube-lab в Visual Studio Code.
Установите расширение SonarQube for IDE для подключения SonarQube к редактору Visual Studio Code.
В левом меню Visual Studio Code нажмите на расширение SonarQube Setup.
Нажмите Connect to SonarQube Server.
В параметре Server URL введите значение https://sonar.<ip-address>.nip.io.
Нажмите Generate Token.
В открывшемся окне браузера подтвердите соединение и скопируйте токен.
Вставьте скопированное значение в User Token.
Нажмите Save connection.
Нажмите кнопку + в меню SonarQube Setup.
Выберите проект evo-virtual-machine-sonarqube-lab в выпадающем меню.
Откройте файл health-check.service.ts в Visual Studio Code и проверьте, что в строке 23 подсвечена ошибка. Такая же ошибка отображается в результатах анализа проекта в SonarQube.
Результат
В ходе лабораторной работы вы развернули изолированную облачную инфраструктуру с SonarQube, подключенной к управляемой базе Managed PostgreSQL®, опубликовали сервис через Nginx с автоматическим выпуском TLS-сертификатов Let’s Encrypt и обеспечили доступ по HTTPS. Вы подключили репозиторий из Git, настроили CI/CD-пайплайн для автоматического анализа кода при каждом commit и интегрировали SonarQube с VS Code для локального статического анализа.
Таким образом, вы освоили ключевые практики DevSecOps и получили защищенный, полностью автоматизированный сервис контроля качества и безопасности кода.
- Перед началом работы
- 1. Определите необходимую инфраструктуру для вашего проекта
- 2. Разверните ресурсы в облаке
- 3. Настройте окружение виртуальной машины
- 4. Настройте защищенный доступ через Nginx
- 5. Установите и запустите SonarQube
- 6. Отключите SSH-доступ
- 7. Подключите SonarQube к репозиторию в GitVerse
- 8. Подключите SonarQube к Visual Studio Code
- Результат