이 문서는 SonarQube를 Linux에 설치하기 위한 가이드를 공유하기 위해 작성되었다.
도구명 | SonarQube Community |
---|---|
버전 | 9.4 |
OS | Rocky Linux 8.5 |
비고 |
사전 환경 구성
1. Linux 환경 설정
Linux에서 root 권한으로 SonarQube 실행이 불가능하여, OS계정이 필요하다.
# OS계정 생성 adduser --system --no-create-home sonarqube sonarqube
Linux에서 SonarQube를 설치하기 위해서는 다음 사항이 충족되어야 한다.
- vm.max_map_count 값 >= 524288
- fs.file-max 값 >= 131072
- SonarQube 실행 유저는 최소 131072 이상의 File descriptors를 열 수 있어야함
- SonarQube 실행 유저는 최소 8192 이상의 Threads를 열 수 있어야함
다음 명령어를 통해 현재 설정된 값 확인이 가능하다.
sysctl vm.max_map_count sysctl fs.file-max ulimit -n ulimit -u
다음 명령어를 수행하여 SonarQube를 실행할 OS계정에 위 사항들을 영구적으로 설정할 수 있다.
# vm.max_map_count / fs.file-max 값 설정 # 다음과 같이 에디터로 파일 생성 sudo vim /etc/sysctl.d/99-OS계정.conf vm.max_map_count=524288 fs.file-max=131072 # 설정 리로드 sudo sysctl --system # 변경된 값 확인 sysctl vm.max_map_count sysctl fs.file-max # Open File descriptors / Threads 값 설정 # 다음과 같이 에디터로 파일 생성 sudo vim /etc/security/limits.d/99-OS계정.conf OS계정 - nofile 131072 OS계정 - nproc 8192 # 변경된 값 확인 ulimit -n ulimit -u
(옵션) SonarQube 설치 후 SystemD 서비스로 등록하여 실행하는 경우, 다음과 같이 Service 항목에서 설정 할 수 있다.
[Service] ... LimitNOFILE=131072 LimitNPROC=8192 ...
2.DB 생성
다음 쿼리를 통해 SonarQube에서 사용할 DB 계정 및 DB를 생성한다.
- PostgreSQL 기준
- 참고: PostgreSQL 13 Linux 설치하기
# DB 접근 계정 생성 CREATE ROLE sonarqubeuser WITH LOGIN PASSWORD '<PASSWORD>' VALID UNTIL 'infinity'; # DB 생성 CREATE DATABASE sonarqubedb WITH OWNER=sonarqubeuser ENCODING 'UTF8' LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8' TEMPLATE template0 CONNECTION LIMIT=-1; # 생성한 DB 모든 권한을 생성한 계정에 부여 GRANT ALL PRIVILEGES ON DATABASE sonarqubedb TO sonarqubeuser; # (옵션) 만약 스키마를 기본값(public)이 아닌 SonarQube 전용으로 커스텀 스키마를 사용하고 싶을 경우 다음 명령어 사용 ALTER USER sonarqubeuser SET search_path to SonarQubeSchema
3. JDK 설치
현 LTS 기준으로 Oracle JRE 또는 OpenJDK 11 버전이 설치되어 있어야 한다.
여기서는 OpenJDK 기준으로 가이드를 진행한다.
패키지 매니저를 통해 설치
다음 명령어를 수행하여 설치 한다.
# OpenJDK 11 설치 sudo dnf install -y java-11 # 설치 후 확인 java --version
업로드하여 수동 설치
다음 URL에서 Linux용 OpenJDK 11 최신버전을 tar.gz 파일을 다운로드하여 Linux 서버에 업로드 한다.
다음 명령어를 순서대로 수행하여 압축을 풀고, JAVA_HOME을 설정 한다.
# 압축 풀기 tar xvzf openjdk-11.0.2_linux-x64_bin.tar.gz # 설치할 경로 위치 mkdir /app/java11 mv jdk-11.0.2 /app/ # (옵션) 심볼릭 링크 사용 cd /app ln -s jdk-11.0.2 java # SonarQube 실행 계정 profile에 JAVA_HOME 설정 vim ~/.bash_profile # 파일 마지막 라인에 다음 내용 입력 후 저장 JAVA_HOME=/app/java11 PATH=$PATH:$JAVA_HOME/bin export JAVA_HOME export PATH # 적용 및 확인 source ~/.bash_profile echo $JAVA_HOME java --version
4. 방화벽 허용 설정 (방법 생략)
SonarQube는 Web 기본 Port로 9000 을 사용한다.
따라서 방화벽을 사용할 경우 해당 포트를 허용해줘야 한다.
SonarQube 설치
여기서는 SonarQube Community 버전으로 가이드 하지만, 상용버전도 설치 방법은 동일하다.
1.SonarQube 다운로드
아래 URL에서 SonarQube zip파일을 다운로드하여 Linux 서버에 업로드 한다.
2.SonarQube 설치
다음 명령어를 순서대로 수행하여 zip 파일을 압축 풀고 SonarQube 디렉토리를 설치할 경로에 위치한다.
- 가이드에서는 /app/sonarqube(심볼릭 링크로 실제 디렉토리는 sonarqube-9.4.0.54424) 경로를 SONARQUBE_HOME 으로 사용한다.
# 압축 풀기 unzip sonarqube-9.4.0.54424.zip # 설치 할 경로 위치 mkdir -p /app mv sonarqube-9.4.0.54424 /app/ # (옵션) 심볼릭 링크 사용 cd /app ln -s sonarqube-9.4.0.54424 sonarqube
$SONARQUBE-HOME 소유자 권한을 실행할 OS계정으로 변경 한다.
# OS계정으로 소유자 및 그룹 권한 변경 sudo chown OS계정:OS계정그룹 -R sonarqube-9.4.0.54424 sudo chown OS계정:OS계정그룹 -R sonarqube
3. DB 및 기본 설정
sonar.properties 수정
$SONARQUBE-HOME/conf/sonar.properties 파일을 열어 다음 항목들을 수정한다.
- DB PostgreSQL 연동으로 가이드하며 PostgreSQL은 JDBC Driver 라이브러리 설치 불필요함
## DB # DB 접근 계정 암호 sonar.jdbc.username=DB계정명 sonar.jdbc.password=DB계정암호 # JDBC URL 설정 # PostgreSQL의 경우 포트를 입력 안할 경우, 기본값인 5432포트로 인식함 sonar.jdbc.url=jdbc:postgresql://IP:Port/DB명 ## (옵션) SonarQube Web Port 변경 SonarQube는 기본값으로 9000 포트를 사용하며, 아래 값 주석해제하여 변경할 수 있음 sonar.web.port=9000 ## (옵션) JVM Heap 메모리 설정 Web / CE(분석기) / 번들 Elasticsearch 의 JVM Heap 메모리를 각각 아래 값 주석해제하여 변경할 수 있음 #sonar.web.javaOpts=-Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError #sonar.ce.javaOpts=-Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError #sonar.search.javaOpts=-Xmx512m -Xms512m -XX:MaxDirectMemorySize=256m -XX:+HeapDumpOnOutOfMemoryError
wrapper.conf 수정
(옵션) Java 실행 경로를 특별히 설정해야 할 경우, 다음 $SONARQUBE-HOME/conf/wrapper.conf 파일을 열어 다음 항목을 수정한다.
# Java 전체 실행 경로 입력 ex) /app/java11/bin/java wrapper.java.command=java
sonar.sh 수정
$SONARQUBE-HOME/bin/linux-x86-64/sonar.sh 파일을 열어 다음 항목을 수정한다.
# 다음 항목을 주석 해제 후 SonarQube을 실행할 OS계정명 입력 RUN_AS_USER=OS계정명
4. SonarQube 실행
다음 명령어를 사용하여 SonarQube를 실행한다.
# SonarQube 실행 $SONARQUBE-HOME/bin/linux-x86-64/sonar.sh start # SonarQube 중지 $SONARQUBE-HOME/bin/linux-x86-64/sonar.sh stop # (참고) 다음처럼 파라미터 없이 실행 할 경우 명령어를 보여줌$SONARQUBE-HOME/bin/linux-x86-64/sonar.shUsage: ./sonar.sh { console | start | stop | force-stop | restart | status | dump }
5. (옵션) Linux SystemD 서비스로 등록하여 사용
다음 명령어를 통해 SonarQube를 Linux SystemD 서비스로 등록하여 사용 할 수 있다.
# 서비스 파일 생성 sudo vim /etc/systemd/system/sonarqube.service # sonarqube.service 파일에 다음 내용 입력 ----------------------------------------------------- [Unit] Description=SonarQube service After=syslog.target network.target [Service] Type=simple User=OS계정명 Group=OS계정그룹명 PermissionsStartOnly=true ExecStart=/bin/nohup (필요시 전체 Java 경로/)java -Xms32m -Xmx32m -Djava.net.preferIPv4Stack=true -jar $SONARQUBE-HOME/lib/sonar-application-버전.jar StandardOutput=syslog LimitNOFILE=131072 LimitNPROC=8192 TimeoutStartSec=5 Restart=always SuccessExitStatus=143 [Install] WantedBy=multi-user.target ----------------------------------------------------- # SonarQube 서비스 활성화 sudo systemctl enable sonarqube.service # SystemD로 SonarQube 실행 sudo systemctl start sonarqube.service # SystemD로 SonarQube 중지 sudo systemctl stop sonarqube.service
SonarQube 동작 확인
브라우저 접속
SonarQube 실행 후 구동이 완료되면 브라우저를 통해 접속할 수 있다.
- URL: http://IP:9000
최초 로그인
초기 관리자 계정은 admin / admin 으로, 로그인 할 경우, 암호를 변경할 수 있다.
SonarQube 프로젝트 SetupWizard가 표시되면 SonarQube가 정상적으로 설치된 것을 확인할 수 있다.
참조
- Prerequisites and Overview | SonarQube Docs
- Install the Server | SonarQube Docs
- Operating the Server | SonarQube Docs
- Environment Variables | SonarQube Docs