Установите Java 11

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

1$ sudo apt update

Установите зависимости.

1$ sudo apt install wget unzip curl gnupg2 ca-certificates lsb-release socat -y

Установите Java 11.

1$ sudo apt-get install openjdk-11-jre -y

Установите PostgreSQL

Добавьте репозиторий PostgreSQL.

1$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'

Добавьте ключ PostgreSQL.

1$ wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -

Обновите систему.

1$ sudo apt update

Установите PostgreSQL.

1$ sudo apt-get install postgresql postgresql-contrib -y

Включите запуск службы PostgreSQL при загрузке системы.

1$ sudo systemctl enable postgresql

Запустите службу PostgreSQL.

1$ sudo systemctl start postgresql

Создайте базу данных SonarQube

Измените postgresпароль пользователя по умолчанию.

1$ sudo passwd postgres

Войдите в систему с помощью пользователя postgres.

1$ su - postgres

Создайте sonarqubeпользователя.

1$ createuser sonarqube

Войдите в интерактивную оболочку PostgreSQL.

1$ psql

Установите пароль для пользователя sonarqube. Измените SecurePasswordсвой безопасный пароль.

1ALTER USER sonarqube WITH ENCRYPTED password 'SecurePassword';

Создайте базу данных с именем sonarqube.

1CREATE DATABASE sonarqube OWNER sonarqube;

Предоставьте пользователю все права доступа к sonarqubeбазе данныхsonarqube.

1GRANT ALL PRIVILEGES ON DATABASE sonarqube to sonarqube;

Что бы избежать следующей ошибки после запуска SonarQube:

 1java.lang.IllegalStateException: Failed to create table schema_migrations
 2 at org.sonar.server.platform.db.migration.history.MigrationHistoryTableImpl.start(MigrationHistoryTableImpl.java:48)
 3 at java.base/java.util.Optional.ifPresent(Optional.java:183)
 4 at org.sonar.server.platform.platformlevel.PlatformLevel2.start(PlatformLevel2.java:105)
 5 at org.sonar.server.platform.PlatformImpl.start(PlatformImpl.java:213)
 6 at org.sonar.server.platform.PlatformImpl.startLevel2Container(PlatformImpl.java:179)
 7 at org.sonar.server.platform.PlatformImpl.init(PlatformImpl.java:87)
 8 at org.sonar.server.platform.web.PlatformServletContextListener.contextInitialized(PlatformServletContextListener.java:43)
 9 at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4763)
10 at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5232)
11 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
12 at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1429)
13 at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1419)
14 at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
15 at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
16 at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
17 at java.base/java.lang.Thread.run(Thread.java:829)
18Caused by: org.postgresql.util.PSQLException: ОШИБКА: нет доступа к схеме public

Как один из вариантов можно сразу назначить путь поиска пользователю sonarqube:

1alter user sonarqube set search_path to public;

Выйдите из оболочки PostgreSQL.

1\q

Вернитесь в свою учетную запись.

1$ exit

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

Загрузите последнюю версию SonarQube. Чтобы найти последнюю версию, посетите страницу загрузки.

1$ wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.2.2.50622.zip

Извлеките загруженный архив.

1$ sudo unzip sonarqube-9.2.2.50622.zip

Создайте каталог установки /opt/sonarqube.

1$ sudo mkdir /opt/sonarqube

Переместите извлеченные файлы в каталог установки.

1$ sudo mv sonarqube-*/* /opt/sonarqube

Создайте учетную запись системного пользователя для SonarQube.

1$ sudo useradd -M -d /opt/sonarqube/ -r -s /bin/bash sonarqube

Измените владельца каталога установки.

1$ sudo chown -R sonarqube:sonarqube -R /opt/sonarqube

Отредактируйте файл свойств, чтобы обновить учетные данные базы данных.

1$ sudo nano /opt/sonarqube/conf/sonar.properties

Окончательный файл должен иметь следующие изменения. Сохраните и закройте файл.

1sonar.jdbc.username=sonarqube
2sonar.jdbc.password=SecurePassword
3sonar.jdbc.url=jdbc:postgresql://localhost:5432/sonarqube
4sonar.web.host=0.0.0.0

Добавьте службы systemd

Создайте служебный файл systemd.

1$ sudo nano /etc/systemd/system/sonarqube.service

Добавьте приведенный ниже код в файл. Сохраните и закройте файл.

 1[Unit]
 2Description=SonarQube Service
 3After=syslog.target network.target
 4[Service]
 5Type=forking
 6ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start
 7ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop
 8User=sonarqube
 9Group=sonarqube
10Restart=always
11LimitNOFILE=65536
12LimitNPROC=4096
13[Install]
14WantedBy=multi-user.target

Отредактируйте файл скрипта sonar.

1$ sudo nano /opt/sonarqube/bin/linux-x86-64/sonar.sh

Найдите эту строку. Чтобы выполнить поиск, используйте CTRL+W, введите поисковую фразу, затем нажмите ENTER.

1#RUN_AS_USER=

Теперь раскомментируйте строку и измените ее. Наконец, сохраните и выйдите из файла.

1RUN_AS_USER=sonarqube

Примените изменения.

1$ sudo systemctl daemon-reload

Включите службу SonarQube для запуска при загрузке системы.

1$ sudo systemctl enable sonarqube

Запустите службу SonarQube.

1$ sudo systemctl start sonarqube

Проверьте состояние службы.

1$ sudo systemctl status sonarqube

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

Установите и настройте Nginx в качестве обратного прокси-сервера для SonarQube.

Установите Nginx.

1$ sudo apt-get install nginx -y

Включите службу Nginx для запуска при загрузке системы.

1$ sudo systemctl enable nginx

Для настройки https сгенерируйте сертификат и ключ, например, с помощью “Автоматическая генерация сертификатов из MS CA на Linux” . Ключ скопируйте в папку /etc/ssl/private , а сертификат в папку /etc/ssl/certs

Создайте новый файл конфигурации Nginx с именем sonarqube.conf.

1$ sudo nano /etc/nginx/sites-available/sonarqube.conf

Добавьте следующий код в файл. В настройках мы так же добавили перенаправление с http на https. Сохраните и закройте файл.

 1server {
 2        listen 80 ;
 3        listen [::]:80;
 4        server_name sonarqube.0xbbeer.ru;
 5        return 302 https://sonarqube.0xbbeer.ru;
 6}
 7
 8server {
 9        listen 443 ssl;
10        listen [::]:443 ssl;
11        ssl on;
12        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
13        ssl_certificate /etc/ssl/certs/sonarqube.0xbbeer.ru.pem;
14        ssl_certificate_key /etc/ssl/private/sonarqube.0xbbeer.ru.key;
15        server_name sonarqube.0xbbeer.ru;
16
17        location / {
18                # First attempt to serve request as file, then
19                # as directory, then fall back to displaying a 404.
20                #try_files $uri $uri/ =404;
21                proxy_pass http://sonarqube.0xbbeer.ru:9000;
22                proxy_set_header Host $host;
23                proxy_set_header X-Forwarded-Proto $scheme;
24                proxy_set_header X-Real-IP $remote_addr;
25                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
26        }
27}

Включите новый файл конфигурации.

1$ sudo ln -s /etc/nginx/sites-available/sonarqube.conf /etc/nginx/sites-enabled/sonarqube.conf

Протестируйте конфигурацию Nginx.

1$ sudo service nginx configtest

Перезапустите службу Nginx.

1$ sudo systemctl restart nginx

Попробуйте зайти в SonarQube