이 문서는 SonarQube 최신 버전 설치 가이드를 공유하기 위해 작성되었다.
제품명 | SonarQube |
---|---|
버전 | 10.6 |
OS | Rocky Linux 8 |
DB | PostgreSQL 14 |
Java | OpenJDK17 |
설치형태 | Zip파일 |
1. 사전 준비
SonarQube 계정 생성
SonarQube를 설치할 계정을 생성한다.
adduser --system --no-create-home sonarqube
Elasticsearch를 위한 호스트 구성
SonarQube는 내장된 Elasticsearch를 사용하기 때문에 그에 맞는 호스트 구성이 필요하다.
최대 열린 파일 개수 및 기타 제한 확인
- 프로세스가 가질 수 있는 최대 메모리 맵 영역 수(vm.max_map_count)는 524288보다 크거나 같아야 한다.
- 열린 파일 기술자의 최대 수(fs.file-max)는 131072보다 크거나 같아야 한다.
- SonarQube를 실행하는 사용자는 적어도 131072 개의 파일 설명자를 열 수 있어야 한다.
- SonarQube를 실행하는 사용자는 최소 8192 개의 스레드를 열 수 있어야 한다.
systemd 사용 안하는 경우
#max_map_count, file-max 설정 sudo vi /etc/sysctl.d/99-sonarqube.conf #추가 vm.max_map_count=524288 fs.file-max=131072 #사용자 제한 vi /etc/security/limits.d/99-sonarqube.conf #추가 sonarqube - nofile 131072 //nofile (number of open files) : 파일 열기 최대 개수 sonarqube - nproc 8192 //nproc (number of processes) : 프로세스 최대 개수 # 설정 리로드 sudo sysctl --system
systemd 사용하는 경우
[Service] ... LimitNOFILE=131072 LimitNPROC=8192 ...
Linux 커널에서 seccomp 활성화
기본값으로 Elasticsearch는 seccomp 필터를 사용한다. seccomp이 활성화된 커널을 사용하는지 확인해야 한다.
#seccomp 활성화 확인 $ grep SECCOMP /boot/config-$(uname -r)
2. SonarQube 설치
DB계정 생성
CREATE ROLE sonar WITH LOGIN PASSWORD 'sonar' VALID UNTIL 'infinity'; CREATE DATABASE sonarqube WITH OWNER=sonaradmin ENCODING 'UTF8' LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8' TEMPLATE template0 CONNECTION LIMIT=-1; GRANT ALL PRIVILEGES ON DATABASE sonarqube TO sonaradmin;
홈 디렉토리 생성
mkdir /app/sonarqube
zip파일 다운로드
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-10.6.0.92116.zip
압축해제
unzip sonarqube-10.6.0.92116.zip
데이터베이스에 대한 액세스 설정
DB 설정 구성을 위해 <sonarqubeHome>/conf/sonar.properties를 수정한다.
<sonarqubeHome>/conf/sonar.properties
#하위 PostgreSQL 관련 부분 주석 해제 후 설정 # User credentials. # Permissions to create tables, indices and triggers must be granted to JDBC user. # The schema must be created first. sonar.jdbc.username=sonar sonar.jdbc.password=sonar #----- PostgreSQL 11 or greater # By default the schema named "public" is used. It can be overridden with the parameter "currentSchema". sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube
Elasticsearch 스토리지 경로 구성
기본적으로 Elasticsearch의 데이터는 <sonarqubeHome>/data에 저장되지만, 운영 인스턴스에서는 권장하지 않는다.
빠른 I/O가 있는 전용 볼륨에 저장하는 것이 좋다. 성능 유지와 SonarQube의 쉬운 업그레이드가 가능해진다.
<sonarqubeHome>/conf/sonar.properties에서 설정을 구성한다.
sonar.path.data=/var/sonarqube/data sonar.path.temp=/var/sonarqube/temp
(옵션) 메모리 설정
다음과 같은 경우 메모리를 증설하는 설정을 해야할 수도 있다.
- 모니터링 도구가 SonarQube 프로세스가 메모리 제한에 도달했음을 나타낼 때
- SonarQube 프로세스가 충돌나거나 sonar.log file에 out-of-memory 에러가 발생할 때
- SonarQube 백그라운드 작업이 백그라운드 작업 로그에서 out-of-memory에러가 나면서 실패할 때
- Elasticsearch 인스턴스의 이슈 인덱스의 저장소 크기가 Elasticsearch Java 프로세스에 할당된 메모리보다 크거나 같을 때
<sonarqubeHome>/conf/sonar.properties 에서 -Xmx 메모리 설정을 늘려 할당된 최대 메모리를 늘릴 수 있다.
Java 프로세스 | SonarQube 속성 | 비고 |
---|---|---|
Compute Engine | sonar.ce.javaOpts | |
Elasticsearch | sonar.search.javaOpts | 런타임 시 Heap 크기가 조정되지 않도록 최소 및 최대 메모리를 동일한 값으로 설정하여 JVM 리소스를 전환하고 진행 중인 요청의 응답 시간을 크게 늘릴 수 있다. |
Web | sonar.web.javaOpts |
예시
#sonar.web.javaOpts=-Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError #sonar.ce.javaOpts=-Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError #sonar.search.javaOpts=-Xmx512m -Xms512m -XX:MaxDirectMemorySize=256m -XX:+HeapDumpOnOutOfMemoryError
Java 실행 파일 경로 설정
/etc/environment
#SONAR_JAVA_PATH 변수 추가 export SONAR_JAVA_PATH="path/to/java_home/bin/java"
3.SonarQube 실행
서비스로 실행
#service 생성 vi /etc/systemd/system/sonarqube.service # 내용 추가 [Unit] Description=SonarQube service After=syslog.target network.target [Service] Type=simple User=sonarqube Group=sonarqube PermissionsStartOnly=true ExecStart=/bin/nohup /opt/java/bin/java -Xms32m -Xmx32m -Djava.net.preferIPv4Stack=true -jar /home/sonarqube/sonarqube-10.6.0.92116/lib/sonar-shutdowner-10.6.0.92116.jar StandardOutput=journal LimitNOFILE=131072 LimitNPROC=8192 TimeoutStartSec=5 Restart=always SuccessExitStatus=143 [Install] WantedBy=multi-user.target # 활성화 sudo systemctl enable sonarqube.service # 서비스 시작 sudo systemctl start sonarqube.service # 서비스 중지 sudo systemctl stop sonarqube.service # 서비스 상태 sudo systemctl status sonarqube.service
수동 실행
# 실행 <sonarqubeHome>/bin/linux-x86-64/sonar.sh start # 중지 <sonarqubeHome>/bin/linux-x86-64/sonar.sh stop # 강제 중지 <sonarqubeHome>/bin/linux-x86-64/sonar.sh force-stop
4. 웹 로그인
최초 접속 시, 계정은 admin/admin 이다.
새로운 비밀번호로 업데이트한다.
최초 접속 후 화면