Thank you for reading this post, don't forget to subscribe!
SonarQube® – это инструмент автоматической проверки кода для обнаружения ошибок, уязвимостей и качества кода в вашем проекте.
Он может интегрироваться с вашим существующим рабочим процессом, таким как Jenkins, для обеспечения непрерывной проверки кода в ветках проекта и пулл реквестах.
Это поможет оптимизировать ваши приложения, а также повысить их безопасность за счет обнаружения устаревшего используемого программного обеспечения и оперативного предоставления рекомендаций.
Предварительные условия
- SonarQube собран на Java, поэтому мы должны убедиться, что Java 11 установлена.
- Другой пользователь, кроме root, следовательно, SonarQube
- PostgreSQL
Чтобы установить этот инструмент в вашем CentOS 7, выполните следующие действия:
Шаг 1. Обновите и установите необходимые инструменты и выполните системные настройки.
На этом этапе убедитесь, что ваш серве обновлен, а также установите все инструменты, которые потребуются в процессе установки.
Мы также настроим системные настройки, такие как SELinux, max_map_count и fs.file-max.
Выполните приведенные ниже команды, чтобы обновить свой сервер.
|
sudo yum update sudo yum install vim wget curl -y |
Настройте SELinux как Permissive
Это можно сделать, выполнив следующие команды:
|
sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config |
Настройка max_map_count и fs.file-max
Из документации ядра Linux этот файл содержит максимальное количество областей карты памяти, которые может иметь процесс.
Области карты памяти используются как побочный эффект вызова malloc, непосредственно через mmap, mprotect и madvise, а также при загрузке разделяемых библиотек.
Чтобы настроить параметры в соответствии с требованиями SonarQube, откройте файл «/etc/sysctl.conf» и добавьте параметры, как показано ниже:
|
$ sudo vim /etc/sysctl.conf vm.max_map_count=262144 fs.file-max=65536 |
Создадим пользователя для сонара
Рекомендуется создать отдельного пользователя для запуска SonarQube.
Создадим его следующим образом:
Затем установите пароль для пользователя
Шаг 2. Установите Java 11 на CentOS 7
Как уже упоминалось во вводном разделе, SonarQube написан на Java, и для него требуется установленная Java (11, особенно в этой настройке).
Шаг 3: Установите и настройте PostgreSQL
В этом примере руководства мы собираемся установить сервер PostgreSQL 11 на том же сервере, на котором будет находиться SonarQube.
Вы можете разместить его на другом сервере в зависимости от ваших потребностей.
Чтобы установить PostgreSQL 11 на свой сервер CentOS 7, выполните следующие действия, чтобы быстро настроить и запустить его.
Добавить репозиторий PostgreSQL Yum
Добавьте репозиторий PostgreSQL Yum в вашу систему CentOS 7, выполнив общую команду, показанную ниже.
|
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm |
Установим пакеты PostgreSQL Server и Client
После добавления PostgreSQL Yum Repository установите PostgreSQL Server / Client пакеты:
|
sudo yum -y install postgresql11-server postgresql11 |
После установки инициализируйте базу данных и включите автоматический запуск
Теперь, когда пакеты базы данных установлены, инициализируйте базу данных, выполнив следующую команду
|
sudo /usr/pgsql-11/bin/postgresql-11-setup initdb |
Затем запустите и разрешите запуск службы при загрузке
|
sudo systemctl start postgresql-11 sudo systemctl enable postgresql-11 |
После того, как вы установили сервер PostgreSQL, приступайте к его настройке следующим образом.
Откройте файл pg_hba.conf и измените «peer» на «trust», а «idnet» на «md5».
|
vim /var/lib/pgsql/11/data/pg_hba.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
##Измените это: local all all peer # IPv4 local connections: host all all 127.0.0.1/32 ident # IPv6 local connections: host all all ::1/128 ident # Allow replication connections from localhost, by a user with the # replication privilege. local replication all peer host replication all 127.0.0.1/32 ident host replication all ::1/128 ident ##На это: local all all trust # IPv4 local connections: host all all 127.0.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5 # Allow replication connections from localhost, by a user with the # replication privilege. local replication all peer host replication all 127.0.0.1/32 md5 host replication all ::1/128 md5 |
Включите удаленный доступ к PostgreSQL
Если ваше приложение находится в удаленном месте, вам нужно будет разрешить ему доступ к вашей базе данных следующим образом:
Отредактируйте файл /var/lib/pgsql/11/data/postgresql.conf и установите для параметра Listen address IP-адрес вашего сервера или «*» для всех интерфейсов.
|
$ sudo vim /var/lib/pgsql/11/data/postgresql.conf listen_addresses = '10.38.87.160' |
Затем добавьте следующее в файл «pg_hba.conf»
|
$ sudo vim /var/lib/pgsql/11/data/pg_hba.conf # Accept from anywhere host all all 0.0.0.0/0 md5 # Or accept from trusted subnet host all all 10.38.87.0/24 md5 |
Перезапустите службу PostgreSQL.
|
sudo systemctl restart postgresql-11 |
Установите пользователя с правами администратора PostgreSQL
Нам нужно будет изменить пароль пользователя admin postgres, как показано ниже:
|
$ sudo su - postgres -bash-4.2$ -bash-4.2$: psql postgres=# alter user postgres with password 'StrongPassword'; ALTER ROLE postgres=# |
Создание пользователя и базы данных SonarQube
Далее мы собираемся создать пользователя для SonarQube.
Перед выходом из базы данных действуйте, как показано ниже.
|
postgres=# createuser sonar; postgres=# createdb sonar_db owner sonar; postgres=# grant all privileges on database sonar_db to sonar; |
Установим пароль для пользователя sonar
|
postgres=# ALTER USER sonar WITH ENCRYPTED password 'StrongPassword'; |
Шаг 4: Скачайте и установите SonarQube
Теперь мы находимся на шаге, который долго ждали.
Мы загрузим долгосрочный выпуск SonarQube, а затем установим его на наш сервер.
Чтобы установить SonarQube, выполните следующие действия.
Узнаем версию SonarQube LTS !
Вы можете посетить страницу скачивания SonarQube
https://www.sonarqube.org/downloads/
чтобы просмотреть их различные предложения.
Мы скачаем LTS
|
cd /opt/ sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-7.9.5.zip |
Затем разархивируйте файл
|
sudo unzip sonarqube-7.9.5.zip |
После этого переименуйте папку в sonarqube
|
sudo mv sonarqube-7.9.5 sonarqube |
Шаг 5: Настройка SonarQube
После того, как файлы были извлечены в каталог /opt/, пора настроить приложение.
Откройте файл «/opt/sonarqube/conf/sonar.properties» и добавьте детали базы данных, как показано ниже.
Вдобавок найдите общие строки и раскомментируйте их.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
$ sudo vim /opt/sonarqube/conf/sonar.properties \##Детали БД sonar.jdbc.username=sonar sonar.jdbc.password=StrongPassword sonar.jdbc.url=jdbc:postgresql://localhost/sonar_db \##</code><span class="VIiyi" lang="ru"><span class="JLqJ4b ChMk0b" data-language-for-alternatives="ru" data-language-to-translate-into="en" data-phrase-index="0">Как вы получите доступ к веб-интерфейсу SonarQube</span></span> <code> sonar.web.host=10.38.87.160 sonar.web.port=9000 \##Java sonar.web.javaOpts=-server -Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError sonar.search.javaOpts=-server -Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError \##</code><span class="VIiyi" lang="ru"><span class="JLqJ4b ChMk0b" data-language-for-alternatives="ru" data-language-to-translate-into="en" data-phrase-index="0">Также добавьте следующие пути хранения Elasticsearch</span></span> <code> sonar.path.data=/var/sonarqube/data sonar.path.temp=/var/sonarqube/temp |
Передайте права собственности на файлы SonarQube пользователю sonar, которого мы создали на шаге 1.
|
sudo chown -R sonar:sonar /opt/sonarqube |
В случае, если Java не может быть найден в расположении по умолчанию, вам нужно будет указать бинарники, которые SonarQube сможет найти.
Вы можете указать расположение java в файле «/opt/sonarqube/conf/wrapper.conf».
Найдите строку «wrapper.java.command» и разместите рядом в ней местоположение Java.
|
$ sudo vim /opt/sonarqube/conf/wrapper.conf wrapper.java.command=/usr/local/jdk-11.0.2/bin/java |
Добавим файл службы SonarQube SystemD
Наконец, мы должны убедиться, что сможем управлять нашим приложением SonarQube через Systemd, чтобы мы могли запускать и останавливать его, как и другие службы на вашем сервере.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
$ sudo vim /etc/systemd/system/sonarqube.service [Unit] Description=SonarQube service After=syslog.target network.target [Service] Type=forking ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start ExecStop=/opt/sonarqube/bin/linux-x86-64/sonar.sh stop LimitNOFILE=65536 LimitNPROC=4096 User=sonar Group=sonar Restart=on-failure [Install] WantedBy=multi-user.target |
После редактирования файлов systemd мы должны перезагрузить их, чтобы их можно было читать и загружать.
|
sudo systemctl daemon-reload |
Затем запустите и включите службу
|
sudo systemctl start sonarqube.service sudo systemctl enable sonarqube.service |
Проверьте его статус, что sonarqube успешно запущен и работает.
|
sudo systemctl status sonarqube.service |
Шаг 6. Измените правила брандмауэра, чтобы разрешить доступ к SonarQube.
На этом этапе сервис sonarqube должен быть запущен.
Если вы не можете получить доступ к веб-интерфейсу, посетите файлы журнала, расположенные в «/opt/sonarqube/logs», где вы найдете
- elasticsearch логи (es.log)
- Sonar логи (sonar.log)
- web логи (web.log)
- Логи доступа (access.log)
- и другие
Мы включили SonarQube web на порту 9000, и мы должны разрешить это дело на брандмауэре.
Сделайте это, как описано ниже.
|
sudo firewall-cmd --permanent --add-port=9000/tcp && sudo firewall-cmd --reload |
Шаг 7: доступ к веб-интерфейсу
То, чего мы так долго ждали, наконец-то пришло.
Теперь мы готовы получить доступ к интерфейсу SonarQube и начать оценку нашего кода на предмет безопасности.
Чтобы получить доступ к интерфейсу, откройте свой любимый браузер и укажите в нем http://ip-сервера:9000.
Вы должны увидеть поле входа, похожий на показанный ниже:
Используйте имя пользователя «admin» и пароль «admin».
Теперь у нас есть инструмент автоматической проверки кода, который вы можете использовать для сканирования различных приложений, прежде чем они будут утверждены в прод.