소나큐브 구축하기
SonarQube(소나큐브)는 개발한 프로그램 코드상에서 보안 취약점, 버그, 중복 코드, 주석 등을 발견할 목적으로 사용하는 정적 코드 분석 오픈 소스 플랫폼이다.
물론 더 많은 언어와 기능 등을 사용하려면 상용으로 구매하여 사용을 해야 하나, 이미 오픈 소스로도 충분히 많은 언어를 지원 및 기능을 지원하고 있다.
무료로 사용 가능한 Community Edition에서는 총 17개의 언어를 지원하고 있다.
지원하고 있는 17개 언어도 사용성이 많은 언어이기 때문에 무료로 사용을 해도 무방하다.
- Java, C#, JavaScript, TypeScript, CloudFormation, Terraform, Kotlin, Ruby, Go, Scala, Flex, Python, PHP, HTML, CSS, XML, VB.NET
그럼 SonarQube를 CentOS 8 시스템에 설치해보도록 하자.
1.SonarQube 설치 파일 다운로드
SonarQube 웹 페이지에서 무료로 사용 가능한 Community Edition 버전을 다운로드하여 사용할 수 있다.
2. CentOS 8 Install
설치 방법은 매우 간단하다.
다만, CentOS 8 시스템에 미리 OpenJDK(java), PostgreSQL이 설치되어 있어야 한다.
두 개의 설치 방법은 이미 작성해놓았으며, 링크로 대체하도록 하겠다.
그럼 이제 다운로드한 Community Edition을 시스템에서 zip 파일을 압축 해지하고 Config 설정하면 설치는 완료된다.
나중에 버전 업데이트 등을 위해서 가능하면 소프트 링크를 설정하여 사용하도록 하자.
- $ ln -s 설치 경로 소프트 링크될 경로
# 소프트링크 설정
$ ln -s /data/programs/sonarqube-9.3.0.51899 /data/programs/sonarqube
$ ls -alt
lrwxrwxrwx. 1 root root 21 3월 6 14:33 sonarqube -> sonarqube-9.3.0.51899
이와 같이 sonarqube-9.3.0.51899 디렉터리 및 소프트 링크 설정된 sonarqube 디렉터리가 생성됨을 확인할 수 있다.
3. SonarQube DB 설정 및 확인
SonarQube를 사용하기 위해서는 PostgreSQL을 설치하여 사용해야 한다.
그럼 SonarQube의 계정 설정 및 데이터베이스 설정을 해보자.
먼저 psql을 이용하여 PostgreSQL로 접속하고 sonarqube 계정과 데이테베이스를 생성 및 권한을 주도록 하자.
일단 기본적으로 sonarqube 계정의 패스워드는 동일하게 sonarqube로 설정하였다.
- postgres=# create user sonarqube with password 'sonarqube';
- postgres=# create database sonarqube owner sonarqube;
- postgres=# ALTER ROLE sonarqube WITH createdb;
- postgres=# GRANT ALL PRIVILEGES ON DATABASE sonarqube TO sonarqube;
# PostgreSQL DB 설정
$ psql -U postgres -W
postgres 사용자의 암호:
psql (10.14)
도움말을 보려면 "help"를 입력하십시오.
postgres=# create user sonarqube with password 'sonarqube';
CREATE ROLE
postgres=# create database sonarqube owner sonarqube;
CREATE DATABASE
postgres=# ALTER ROLE sonarqube WITH createdb;
ALTER ROLE
postgres=# GRANT ALL PRIVILEGES ON DATABASE sonarqube TO sonarqube;
GRANT
이제 진행한 내용대로 정확히 생성되었는지 확인해보도록 하자.
- postgres=# \du
- postgres=# \l
# PostgreSQL 사용자 및 데이터베이스 정보 확인
postgres=# \du
롤 목록
롤 이름 | 속성 | 소속 그룹:
-----------+------------------------------------------------+------------
postgres | 슈퍼유저, 롤 만들기, DB 만들기, 복제, RLS 통과 | {}
sonarqube | DB 만들기 | {}
postgres=# \l
데이터베이스 목록
이름 | 소유주 | 인코딩 | Collate | Ctype | 액세스 권한
-----------+-----------+--------+-------------+-------------+-------------------------
postgres | postgres | UTF8 | ko_KR.UTF-8 | ko_KR.UTF-8 |
sonarqube | sonarqube | UTF8 | ko_KR.UTF-8 | ko_KR.UTF-8 | =Tc/sonarqube +
| | | | | sonarqube=CTc/sonarqube
template0 | postgres | UTF8 | ko_KR.UTF-8 | ko_KR.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | ko_KR.UTF-8 | ko_KR.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4개 행)
4. SonarQube Config 설정
이제 구동을 위해서 DB 정보, Web 구동 설정 등 SonarQube Config를 설정하도록 하자.
SonarQube 홈 디렉터리를 보면 config 설정이 있는 conf 디렉터리와 서비스 구동을 위한 bin 디렉터리가 존재한다.
여기서 conf 디렉터리로 접근 하자.
4.1 wrapper.conf 설정
이중 먼저 conf 디렉터리에서 wrapper.conf 파일을 열어 java 위치를 설정하기 위해서 우선 java version과 java 디렉터리 위치를 확인하도록 하자.
- $ java -version
- $ which java
# Java Version 확인
$ java -version
openjdk version "11.0.14.1" 2022-02-08
OpenJDK Runtime Environment Temurin-11.0.14.1+1 (build 11.0.14.1+1)
OpenJDK 64-Bit Server VM Temurin-11.0.14.1+1 (build 11.0.14.1+1, mixed mode)
# Java 디렉토리 위치 확인
$ which java
/usr/lib/java/bin/java
이제 확인한 java 위치를 wrapper.conf 파일 내 "wrapper.java.command" 항목에 추가하도록 하자.
- wrapper.java.command : 시스템 내 java 위치
- wrapper.java.command=/usr/lib/java/bin/java
4.2 sonar.properties 설정
두 번째로 sonar.properties 파일을 열어 DB 및 Web 구동 관련하여 설정을 하도록 하자.
- sonar.jdbc.username : DB 계정
- sonar.jdbc.username=sonarqube
- sonar.jdbc.password : DB 패스워드
- sonar.jdbc.password=sonarqube
- sonar.jdbc.url : DB 연결할 경로
- sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube
- sonar.web.javaOpts : Java 구동 시 사용하는 최대 / 최소 메모리 설정
- sonar.web.javaOpts=-Xmx4096m -Xms2048m -XX:+HeapDumpOnOutOfMemoryError
- sonar.web.host : 웹 페이지 IP 오픈 설정
- sonar.web.host=0.0.0.0
- 0.0.0.0으로 설정 시 All Open(Default 설정)
- sonar.web.port : 웹 페이지 Port 설정
- sonar.web.port=9000
- 9000 Port(Default 설정)
5. SonarQube 구동
이제 설정을 완료하였다면, 구동을 해보도록 하자.
지금까지 root로 설정을 했기 때문에 바로 구동 시 정상적으로 구동이 되지 않을 수 있다.
- 같이 구동되는 Elasticsearch가 root 계정에서는 구동이 정상적으로 되지 않는다.
- $ chown -R 계정:그룹 디렉터리 위치
자 소유자도 변경 하였으니 이제 구동해보자.
SonarQube 홈 디렉터리에서 서비스 구동을 위한 bin 디렉터리로 접근 하자.
이후 본인이 설치한 OS 정보 디렉터리로 접근 하자.
여기서는 CentOS(Linux)에 설치하였으니 "linux-x84-64"로 접근 하자.
- $ ./sonar.sh start
# 서비스 구동
$ ./sonar.sh start
Starting SonarQube...
Started SonarQube.
이제 정상적으로 구동되었으니 웹 브라우저에서 접근해보도록 하자.
# Web 관리자 기본 ID Password
admin / admin
최초 로그인 이후 패스워드 변경 창이 나오고 정상적으로 변경 완료되면 이제 SonarQube에 접근된 것을 확인할 수 있다.
이제 SonarQube 설치를 완료하였다.
다음에는 SonarQube를 사용하는 방법 및 사용하면서 발생하는 내용에 대해서 정리하도록 하겠다.
🌵댓글