Panel | ||||||
---|---|---|---|---|---|---|
| ||||||
|
데이터베이스 설치하기
SonarQube는 다양한 종류의 데이터베이스 엔진을 지원합니다. 사용하고자 하는 데이터베이스에 따라 다음 요구사항(필수)을 확인합니다.
빈데이터베이스스키마하나와 sonarqube 사용자하나를생성합니다. sonarqube 사용자는이스키마의오브젝트 (create), 업데이트(update) 및삭제(delete) 권한을가져야합니다. 데이터베이스의문자셋은 "UTF-8", 언어(데이터베이스및사용자)는 "English"로설정해야합니다.
Microsoft SQL Server
Collation은반드시대소문자구분(CS) 및액센트구분(AS)로설정되어야합니다.
통합된보안정책을사용하고자 하는 경우, http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=11774에서 Microsoft SQL JDBC Driver 4.2 패키지를다운로드한뒤, `sqljdbc_auth.dll`을원하는경로에복사합니다. 사용하는서버머신에따라 x86 혹은 x64 버전의 dll을복사해야합니다.
SoanrQube를윈도우서비스로운영하면서통합된보안정책을사용하고자 하는 경우, 서비스를 실행하는 윈도우 계정이 SQL Server에대한접근권한을가지고있는지확인합니다. 해당 계정은 db_owner 데이터베이스권한을가지고있어야합니다.
커맨드 라인 명령어로 SonarQube를 실행하면서 통합된 보안 정책을 사용하고자 하는 경우, 해당 계정 역시 db_owner 데이터베이스 권한을 가지고 있어야 합니다. 이와 함께 "sonar.jdbc.username" 혹은 "sonar.jdbc.password" 속성이 주석 처리가 되어 있는지 확인합니다(sonar.properties). 주석 처리를 하지 않은 경우, SonarQube는 SQL authentication을 사용합니다.
Code Block | ||
---|---|---|
| ||
sonar.jdbc.url=jdbc:sqlserver://localhost;databaseName=sonar;integratedSecurity=true |
SQL authentication을사용하고자하는경우, 아래의컨넥션스트링을사용합니다. "sonar.jdbc.username", "sonar.jdbc.password"가올바르게설정되어있는지확인합니다.
Code Block | ||
---|---|---|
| ||
sonar.jdbc.url=jdbc:sqlserver://localhost;databaseName=sonar sonar.jdbc.username=sonarqube sonar.jdbc.password=mypassword |
MySQL
MySQL은 MyISAM, InnoDB의두가지엔진을사용하도록설정할수있습니다. MyISAM은 InnoDB에 비해 오래된 엔진으로, 점차 InnoDB로 변경되는 추세입니다. SonarQube에서 분석하는 프로젝트의 수가 증가하는 경우에도 InnoDB는 MyISAM에 빠른 속도과 더 나은 스케일링을 제공합니다. 만약 SonarQube를초기부터사용한 경우 MyISAM 엔진을 사용하는 테이블들이 존재할 수 있습니다. InnoDB 엔진으로 해당 테이블들을 변경해서 SonarQube의 성능을 한층 개선할 수 있습니다.
SonarQube가사용하는모든테이블들을 InnoDB 엔진에 맞게 변경한 후, 가장 먼저 "innodb_buffer_pool_size" 파라미터를 변경합니다. MySQL이최대한의 RAM을할당하도록 "query_cache_size" 파라미터 값으로 15MB를 설정합니다. 보다자세한내용은InnoDB 성능 최적화하기(영문)를참조합니다.
Oracle
Oracle 인스턴스 하나에 두개의 SonarQube 스키마를 생성한 경우--특히,두스키마가 서로 다른 버전인 경우--SonarQube는가장먼저탐색된스키마를선택합니다. 아래의 방법으로 이 문제를 해결할 수 있습니다:
- SonarQube Oracle 사용자에게할당된 priviledges를제거하거나
Oracle이자동으로새로운컨텍션을만들경우 SonarQube Oracle 사용자를변경하도록합니다.
Code Block language bash ALTER SESSION SET current_schema="MY_SONARQUBE_SCHEMA"
Warning | ||
---|---|---|
| ||
Oracle 드라이버 12.1.0.1 및 12.1.0.2 버전은 주요한 오류를 포함하고 있어 SaonrQube 및 에코시스템과의 사용을 권장하지 않습니다(참조 링크). |
PostgreSQL
"public" 스키마가 아닌 커스텀스키마를사용하고자하는경우, PostgreSQL의 "search_path"속성을 다음과 같이 설정해야 합니다:
Code Block | ||
---|---|---|
| ||
ALTER USER mySonarUser SET search_path to mySonarQubeSchema |
웹서버설치하기
먼저, 요구사항을확인합니다.
다음으로, 배포 패키지를다운로드 받은 후 압축을 풉니다(숫자로시작하는디렉토리명을사용하지마십시오). 리눅스 용의 네이티브 패키지도 배포됩니다.
<install_directory>는 SonarQube 배포패키지의압축이풀린디렉토리를의미합니다.
데이터베이스접근권한설정하기
<install_directory>/conf.sonar.properties 파일에서 데이터베이스를 설정합니다. 해당 파일에는 SonarQube가 지원하는 모든 데이터베이스에 대한 설정 템플릿이 포함되어 있습니다. 사용하고자하는데이터베이스와관련된설정템플릿의주석을해제하고 H2 데이터베이스와관련된설정내용을주석처리합니다:
Code Block | ||||
---|---|---|---|---|
| ||||
sonar.jdbc.username=sonarqube sonar.jdbc.password=mypassword sonar.jdbc.url=jdbc:postgresql://localhost/sonarqube |
JDBC 드라이버추가하기
지원하는데이터베이스(Oracle 제외)와관련된드라이버는 SonarQube 패키지에 포함되어 있습니다. 함께 제공하는 드라이버만 정상 동작하므로 해당 드라이버를 변경하지 않습니다.
Oracle을 사용하는 경우 을사용할경우 <install_directory>/extensions/jdbc-driver/oracle 에 oracle jdbc 드라이버를 복사합니다.
웹 서버시작하기
기본포트는 "9000"이고, 기본 context 경로는 "/"입니다. <install_directory>/conf/sonar.properties 파일에서 이 값을 변경할 수 있습니다:
Code Block | ||||
---|---|---|---|---|
| ||||
sonar.web.host=192.0.0.1 sonar.web.port=80 sonar.web.context=/sonar |
다음스크립트를실행새서버를시작합니다:
- Linux/Mac OS: bin/\<YOUR OS>\/sonar.sh start
- Windows: bin/windows-x86-XX/StartSonar.bat
웹브라우저에서 http://localhost:9000으로 SonarQube에접속할수있습니다(기본 System administrator 계정/비밀번호 = admin/admin).
웹서버튜닝하기
SonarQube는 기본적으로 하나의 Java JRE가설치된컴퓨터에서실행되도록설정되어있습니다.
성능을 개선하고자 하는 경우, 가장 먼저 Java JDK를 사용하고 <install_directory>/conf/sonar.properties 파일을 수정해 서버 모드를 활성화합니다:
Code Block | ||
---|---|---|
| ||
sonar.web.javaOpts=-server |
SonarQube가사용하는 Java JVM을 변경할 경우, <install_directory>/conf/wrapper.conf 파일에서 다음 라인을 변경합니다:
Code Block | ||
---|---|---|
| ||
wrapper.java.command=/path/to/my/jdk/bin/java |
설치관련고급기능
다음 단계
서버설치를 정상적으로 완료했다면, 원하는플러그인을 설치할수있습니다. 플러그인을 설치한 후에는 언제든지 소스 코드를 분석할 수 있습니다.
트러블슈팅 / 자주하는질문
웹서버 / 연산엔진 / 엘라스틱서치에더욱많은메모리할당 (Grant more memory to the web server / compute engine / elastic search)
서버사이드프로세스에더많은메모리를 할당하고자 하는 경우, $SONARQUBE_HOME/conf/sonar.properties 파일에서관련된`javaOpts`속성을편집합니다:
- sonar.web.javaOpts (최소값: -server -Xmx768m)
- sonar.ce.javaOpts
- sonar.search.javaOpts
MySQL 데이터베이스에접속불가 (Cannot connect to MySQL database)
MySQL 데이터베이스서버에 대한 원격접속은 보안상의이유로 기본적으로 비활성화되어 있습니다. 데이터베이스서버에원격으로접속하고자하는경우, MySQL 가이드(영문)를참조합니다.
Windows Vista에서구동실패 (Failed to start on Windows Vista)
SonarQube가 Windows Vista의 Program Files 디렉토리아래설치된경우, 정상 시작되지 않을 수 있습니다. 해당디렉토리를사용하지 않도록 합니다.
잘못된 USERS 테이블구조로인해 SonarQube가 Oracle 데이터베이스사용시구동실패 (Failed to start SonarQube with Oracle due to bad USERS table structure)
다른 USERS 테이블이 Oracle 데이터베이스에존재하고, sonarqube 사용자가다른 USERS 테이블에읽기권한을가지고있는경우 SonarQube 웹서버는다음과같인예외를발생하며구동하지않습니다:
Code Block | ||
---|---|---|
| ||
ActiveRecord::ActiveRecordError: ORA-00904: "TOTO": invalid identifier : INSERT INTO users (login, name, email, crypted_password, salt, created_at, updated_at, remember_token, remember_token_expires_at, toto, id) VALUES('admin', 'Administrator', '', 'bba4c8a0f808f9798cf8b1c153a4bb4f9178cf59', '2519754f77ea67e5d7211cd1414698f465aacebb', TIMESTAMP'2011-06-24 22:09:14', TIMESTAMP'2011-06-24 22:09:14', null, null, null, ?) ActiveRecord::ActiveRecordError: ORA-00904: "TOTO": invalid identifier : INSERT INTO users (login, name, email, crypted_password, salt, created_at, updated_at, remember_token, remember_token_expires_at, toto, id) VALUES('admin', 'Administrator', '', 'bba4c8a0f808f9798cf8b1c153a4bb4f9178cf59', '2519754f77ea67e5d7211cd1414698f465aacebb', TIMESTAMP'2011-06-24 22:09:14', TIMESTAMP'2011-06-24 22:09:14', null, null, null, ?) |
sonarqube Oracle 사용자가다른 USERS 테이블을읽을수있는권한을제거해서, 이 문제를 해결할 수 있습니다.
프록시를통해 Update Cetner 접근실패 (Failed to connect to the Update Center via proxy)
SONARQUBE_HOME/conf/sonar.properties 파일의프록시설정을 확인합니다.
프록시의 username에 "\"(백슬래시) 문자가포함된경우, 특수문자처리가 필요합니다. 예를들어 username이 "domain\user"인경우, 아래와같이설정합니다:
Code Block | ||
---|---|---|
| ||
http.proxyUser=domain\\user |
일부프록시의경우, 잘못된 username 혹은 password 설정의원인으로"java.met.ProtocolException: Server redirected too many times" exception이발생할수있습니다.