Встановлення на Linux (Docker)¶
Інструкція описує повний цикл розгортання SonarQube Server Enterprise Edition у Docker-контейнерах на чистій Linux VM.
Розділи 1 і 2 відрізняються залежно від дистрибутива, розділ 3 і далі — спільні.
1. Debian / Ubuntu¶
Перевірено на Ubuntu 22.04 LTS.
1.1 Оновлення системи¶
1.2 Встановлення залежностей¶
1.3 Додавання GPG-ключа Docker¶
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
1.4 Додавання репозиторію Docker¶
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
1.5 Встановлення Docker Engine¶
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
1.6 Перевірка встановлення¶
1.7 (Опційно) Запуск docker без sudo¶
Після виконання вийдіть і зайдіть у сесію заново (або sudo newgrp docker), щоб зміна набула чинності.
Далі перейдіть до розділу Ядрові налаштування.
2. RHEL / CentOS / Rocky / AlmaLinux¶
2.1 Оновлення системи¶
2.2 Встановлення Docker Engine¶
sudo dnf install -y dnf-plugins-core
sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
sudo docker run hello-world
2.3 (Опційно) Запуск docker без sudo¶
2.4 SELinux¶
Якщо SELinux у режимі enforcing, для volume-мапінгу контейнерів потрібен суфікс :z або :Z у шляхах монтування, інакше SonarQube не матиме доступу до директорій даних.
Перевірка режиму:
Тимчасове послаблення для тестового POC:
Важливо
setenforce 0 не рекомендовано для production. Для постійного розгортання використовуйте суфікси :z / :Z у параметрах -v.
2.5 Firewalld¶
На відміну від Ubuntu, RHEL-родина зазвичай має активний firewalld — відкрийте порт 9000:
3. Ядрові налаштування¶
SonarQube Server використовує вбудований Elasticsearch, який вимагає підвищених лімітів на рівні хоста.
Обов'язковий крок
Без цього кроку контейнер SonarQube запуститься, але Elasticsearch впаде одразу після старту.
3.1 vm.max_map_count та fs.file-max¶
sudo tee /etc/sysctl.d/99-sonarqube.conf <<EOF
vm.max_map_count=524288
fs.file-max=131072
EOF
sudo sysctl --system
3.2 Ліміти файлових дескрипторів та потоків¶
4. Розгортання контейнерів¶
4.1 Створення Docker-мережі¶
4.2 Створення volumes¶
sudo docker volume create sonarqube_data
sudo docker volume create sonarqube_logs
sudo docker volume create sonarqube_extensions
sudo docker volume create sonarqube_postgres
4.3 Запуск PostgreSQL¶
sudo docker run -d --name sonarqube-db \
--network=sonarnet \
--restart unless-stopped \
-e POSTGRES_USER=sonar \
-e POSTGRES_PASSWORD=sonar \
-e POSTGRES_DB=sonarqube \
-v sonarqube_postgres:/var/lib/postgresql/data \
postgres:15
4.4 Перевірка, що БД піднялась¶
Контейнер sonarqube-db має бути у статусі Up.
4.5 Запуск SonarQube Server (Enterprise Edition)¶
sudo docker run -d --name sonarqube \
--network=sonarnet \
--restart unless-stopped \
-p 9000:9000 \
-e SONAR_JDBC_URL=jdbc:postgresql://sonarqube-db:5432/sonarqube \
-e SONAR_JDBC_USERNAME=sonar \
-e SONAR_JDBC_PASSWORD=sonar \
-v sonarqube_data:/opt/sonarqube/data \
-v sonarqube_logs:/opt/sonarqube/logs \
-v sonarqube_extensions:/opt/sonarqube/extensions \
sonarqube:enterprise
4.6 Спостереження за логами запуску¶
Дочекайтесь рядка SonarQube is operational (зазвичай 1–3 хвилини).
Примітка
Ctrl+C виходить з перегляду логів і не зупиняє контейнер.
4.7 Перевірка в браузері¶
Відкрийте http://<IP_машини>:9000. Логін/пароль за замовчуванням: admin / admin — система одразу попросить змінити пароль.
5. Наступні кроки¶
- Отримати Server ID і активувати ліцензію
- Встановити SonarScanner CLI та запустити перше сканування
- Для регулярних POC — розглянути автоматизацію розгортання через bash-скрипт або готовий VM-темплейт/снапшот