웹사이트 검색

Ubuntu 18.04 LTS에 SonarQube를 설치하는 방법


이 튜토리얼은 다음 OS 버전에 대해 존재합니다.

  • 우분투 16.04(Xenial Xerus)

이 페이지에서

  1. 요구 사항\n
  2. 시작하기\n
  3. 자바 설치
  4. PostgreSQL 설치 및 구성
  5. SonarQube 설치 및 구성
  6. SonarQube용 Systemd Service 파일 생성
  7. SonarQube용 Apache 구성
  8. SonarQube 액세스

SonarQube는 애플리케이션의 코드 품질을 지속적으로 검사하는 오픈 소스 플랫폼입니다. Java 언어로 작성되었으며 여러 데이터베이스를 지원합니다. Java, C, C++, C#, PHP 및 JavaScript, HTML, CSS와 같은 웹 언어를 포함하여 20개 이상의 프로그래밍 언어에 대한 코드를 검사하고 애플리케이션의 상태를 확인할 수 있습니다. SonarQube는 소스 코드를 분석하고, 보안 취약점을 찾고, 버그를 감지하고 웹 기반 대시보드에 결과를 표시할 수 있습니다. Maven, Ant, Gradle, MSBuild, LDAP, Active Directory 및 GitHub와 SonarQube를 쉽게 통합할 수 있습니다.

이 튜토리얼에서는 Ubuntu 18.04 LTS(Bionic Beaver) 서버에 SonarQube를 설치하는 방법을 알아봅니다.

요구 사항

  • Ubuntu 18.04를 실행하는 서버.\n
  • sudo 권한이 있는 루트가 아닌 사용자.\n

시작하기

시작하기 전에 시스템을 최신 버전으로 업데이트해야 합니다. 다음 명령을 실행하여 이를 수행할 수 있습니다.

sudo apt-get update -y
sudo apt-get upgrade -y

시스템이 업데이트되면 시스템을 다시 시작하여 변경 사항을 적용하십시오.

자바 설치

SonarQube는 Java 언어로 작성되었으므로 시스템에 Java를 설치해야 합니다. 먼저 다음 명령을 사용하여 Java 리포지토리를 추가합니다.

sudo add-apt-repository ppa:webupd8team/java

다음으로 다음 명령을 사용하여 리포지토리를 업데이트하고 Java를 설치합니다.

sudo apt-get update -y
sudo apt-get install oracle-java8-installer -y

Java가 설치되면 다음 명령을 사용하여 Java 버전을 확인하십시오.

java -version

산출:

openjdk version "10.0.2" 2018-07-17
OpenJDK Runtime Environment (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.3)
OpenJDK 64-Bit Server VM (build 10.0.2+13-Ubuntu-1ubuntu0.18.04.3, mixed mode)

PostgreSQL 설치 및 구성

기본적으로 PostgreSQL의 최신 버전은 Ubuntu 18.04 기본 리포지토리에서 사용할 수 없습니다. 따라서 시스템에 PostgreSQL 리포지토리를 추가해야 합니다.

다음 명령으로 이 작업을 수행할 수 있습니다.

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
wget -q https://www.postgresql.org/media/keys/ACCC4CF8.asc -O - | sudo apt-key add -

그런 다음 리포지토리를 업데이트하고 다음 명령을 사용하여 PostgreSQL을 설치합니다.

sudo apt-get update -y
sudo apt-get install postgresql postgresql-contrib

설치가 완료되면 다음 명령을 사용하여 PostgreSQL의 상태를 확인합니다.

sudo systemctl status postgresql

산출:

? postgresql.service - PostgreSQL RDBMS
   Loaded: loaded (/lib/systemd/system/postgresql.service; enabled; vendor preset: enabled)
   Active: active (exited) since Sun 2018-12-02 08:49:29 UTC; 4h 30min ago
  Process: 1295 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
 Main PID: 1295 (code=exited, status=0/SUCCESS)

Dec 02 08:49:29 ubuntu1804 systemd[1]: Starting PostgreSQL RDBMS...
Dec 02 08:49:29 ubuntu1804 systemd[1]: Started PostgreSQL RDBMS.

그런 다음 다음 명령을 사용하여 postgres 사용자로 전환합니다.

su - postgres

다음으로 다음 명령을 사용하여 소나 사용자를 생성합니다.

createuser sonar

그런 다음 다음 명령을 사용하여 PostgreSQL 셸로 전환합니다.

psql

다음으로 다음 명령을 사용하여 소나 사용자의 비밀번호를 설정하고 소나 데이터베이스를 생성합니다.

ALTER USER sonar WITH ENCRYPTED password 'password';
CREATE DATABASE sonar OWNER sonar;

다음으로 PostgreSQL 셸에서 exti:

\q

SonarQube 설치 및 구성

먼저 다음 명령을 사용하여 SonarQube 사용자를 생성합니다.

sudo adduser sonar

다음으로, 다음 명령어를 사용하여 최신 버전의 SonarQube를 다운로드합니다.

wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-6.7.6.zip

다운로드가 완료되면 다음 명령을 사용하여 다운로드한 파일의 압축을 풉니다.

unzip sonarqube-6.7.6.zip

그런 다음 다음 명령을 사용하여 추출된 디렉터리를 /opt에 복사합니다.

sudo cp -r sonarqube-6.7.6 /opt/sonarqube

다음으로 다음 명령을 사용하여 소나 사용자에게 소유권을 부여합니다.

sudo chown -R sonar:sonar /opt/sonarqube

다음으로 소나 사용자로 실행되도록 SonarQube를 구성해야 합니다. 다음 명령으로 이 작업을 수행할 수 있습니다.

sudo nano /opt/sonarqube/bin/linux-x86-64/sonar.sh

다음과 같이 변경합니다.

RUN_AS_USER=sonar

파일을 저장하고 닫습니다. 그런 다음 SonarQube 기본 구성 파일을 열고 이전에 생성한 데이터베이스 자격 증명으로 수정합니다.

sudo nano /opt/sonarqube/conf/sonar.properties

다음과 같이 변경합니다.

sonar.jdbc.username=sonar
sonar.jdbc.password=password
sonar.jdbc.url=jdbc:postgresql://localhost/sonar
sonar.web.host=127.0.0.1
sonar.search.javaOpts=-Xms512m  -Xmx512m

완료되면 파일을 저장하고 닫습니다.

SonarQube용 Systemd Service 파일 생성

다음으로 SonarQube 서비스를 관리하기 위한 systemd 서비스 파일을 생성해야 합니다. 다음 명령으로 이 작업을 수행할 수 있습니다.

sudo nano /etc/systemd/system/sonar.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

User=sonar
Group=sonar
Restart=always

[Install]
WantedBy=multi-user.target

완료되면 파일을 저장하고 닫습니다. 그런 다음 SonarQube 서비스를 시작하고 다음 명령을 사용하여 부팅 시 시작되도록 활성화합니다.

sudo systemctl start sonar
sudo systemctl enable sonar

다음 명령어로 SonarQube 서비스의 상태를 확인할 수 있습니다.

sudo systemctl status sonar

산출:

? sonar.service - SonarQube service
   Loaded: loaded (/etc/systemd/system/sonar.service; disabled; vendor preset: enabled)
   Active: active (running) since Sun 2018-12-02 13:55:34 UTC; 2min 52s ago
  Process: 2339 ExecStart=/opt/sonarqube/bin/linux-x86-64/sonar.sh start (code=exited, status=0/SUCCESS)
 Main PID: 2396 (wrapper)
    Tasks: 133 (limit: 2323)
   CGroup: /system.slice/sonar.service
           ??2396 /opt/sonarqube/bin/linux-x86-64/./wrapper /opt/sonarqube/bin/linux-x86-64/../../conf/wrapper.conf wrapper.syslog.ident=SonarQ
           ??2399 java -Dsonar.wrapped=true -Djava.awt.headless=true -Xms8m -Xmx32m -Djava.library.path=./lib -classpath ../../lib/jsw/wrapper-
           ??2445 /usr/lib/jvm/java-8-oracle/jre/bin/java -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOc
           ??2545 /usr/lib/jvm/java-8-oracle/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/opt/sonarqube/temp -
           ??2622 /usr/lib/jvm/java-8-oracle/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/opt/sonarqube/temp -

Dec 02 13:55:33 ubuntu1804 systemd[1]: Starting SonarQube service...
Dec 02 13:55:33 ubuntu1804 sonar.sh[2339]: Starting SonarQube...
Dec 02 13:55:34 ubuntu1804 sonar.sh[2339]: Started SonarQube.
Dec 02 13:55:34 ubuntu1804 systemd[1]: Started SonarQube service.

SonarQube용 Apache 구성

기본적으로 SonarQube는 포트 9000에서 수신합니다. 따라서 포트 80을 사용하여 SonarQube에 액세스하려면 Apache를 리버스 프록시로 설치 및 구성해야 합니다.

이렇게 하려면 다음 명령을 사용하여 Apache를 설치합니다.

sudo apt-get install apache2 -y

다음으로 다음 명령을 사용하여 mod_proxy 모듈을 활성화합니다.

sudo a2enmod proxy
sudo a2enmod proxy_http

다음으로 다음 명령을 사용하여 SonarQube용 Apache 가상 호스트 파일을 생성합니다.

sudo nano /etc/apache2/sites-available/sonar.conf

다음 줄을 추가합니다.

<VirtualHost *:80>
    ServerName example.com
    ServerAdmin 
    ProxyPreserveHost On
    ProxyPass / http://127.0.0.1:9000/
    ProxyPassReverse / http://127.0.0.1:9000/
    TransferLog /var/log/apache2/sonarm_access.log
    ErrorLog /var/log/apache2/sonar_error.log
</VirtualHost>

example.com을 자신의 도메인 이름으로 바꾸십시오. 파일을 저장하고 닫습니다. 그런 다음 다음 명령을 사용하여 SonarQube 가상 호스트 파일을 활성화합니다.

sudo a2ensite sonar

마지막으로 Apache 및 SonarQube 서비스를 다시 시작하여 다음 명령으로 모든 변경 사항을 적용합니다.

sudo systemctl restart apache2
sudo systemctl restart sonar

기본적으로 SonarQube는 /opt/sonarqube/logs 디렉토리에 로그를 저장합니다. 다음 명령어로 SonarQube 로그를 확인할 수 있습니다.

sudo tail -f /opt/sonarqube/logs/sonar.log

산출:

Launching a JVM...
Wrapper (Version 3.2.3) http://wrapper.tanukisoftware.org
  Copyright 1999-2006 Tanuki Software, Inc.  All Rights Reserved.

2018.12.02 13:55:43 INFO  app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /opt/sonarqube/temp
2018.12.02 13:55:44 INFO  app[][o.s.a.es.EsSettings] Elasticsearch listening on /127.0.0.1:9001
2018.12.02 13:55:45 INFO  app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='es', ipcIndex=1, logFilenamePrefix=es]] from [/opt/sonarqube/elasticsearch]: /opt/sonarqube/elasticsearch/bin/elasticsearch -Epath.conf=/opt/sonarqube/temp/conf/es
2018.12.02 13:55:45 INFO  app[][o.s.a.SchedulerImpl] Waiting for Elasticsearch to be up and running
2018.12.02 13:55:48 INFO  app[][o.e.p.PluginsService] no modules loaded
2018.12.02 13:55:48 INFO  app[][o.e.p.PluginsService] loaded plugin [org.elasticsearch.transport.Netty4Plugin]
2018.12.02 13:56:34 INFO  app[][o.s.a.SchedulerImpl] Process[es] is up
2018.12.02 13:56:34 INFO  app[][o.s.a.p.ProcessLauncherImpl] Launch process[[key='web', ipcIndex=2, logFilenamePrefix=web]] from [/opt/sonarqube]: /usr/lib/jvm/java-8-oracle/jre/bin/java -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djava.io.tmpdir=/opt/sonarqube/temp -Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError -cp ./lib/common/*:./lib/server/*:/opt/sonarqube/lib/jdbc/postgresql/postgresql-42.2.1.jar org.sonar.server.app.WebServer /opt/sonarqube/temp/sq-process420500314195865484properties

다음 명령을 사용하여 SonarQube 웹 로그를 확인할 수도 있습니다.

sudo tail -f /opt/sonarqube/logs/web.log

산출:

2018.12.02 13:57:03 INFO  web[][o.s.s.p.ServerPluginRepository] Deploy plugin SonarJava / 4.15.0.12310 / 572454b93016ec73a53fe0e07b2ffdc356d21ba9
2018.12.02 13:57:03 INFO  web[][o.s.s.p.ServerPluginRepository] Deploy plugin SonarPHP / 2.11.0.2485 / 741861a29e5f9a26c6c99c06268facb6c4f4a882
2018.12.02 13:57:03 INFO  web[][o.s.s.p.ServerPluginRepository] Deploy plugin SonarPython / 1.8.0.1496 / 3fe3bc4d0273a5721ea2fb368dc45b1bb82fede3
2018.12.02 13:57:03 INFO  web[][o.s.s.p.ServerPluginRepository] Deploy plugin SonarQube :: Plugins :: SCM :: Git / 1.3.0.869 / 4da53e3f9e55f4f2e5796625cb0c5768ed152079
2018.12.02 13:57:03 INFO  web[][o.s.s.p.ServerPluginRepository] Deploy plugin SonarQube :: Plugins :: SCM :: SVN / 1.6.0.860 / 2111fdbd1dddda4ad6d4ed6486fd0b18c1010d3b
2018.12.02 13:57:03 INFO  web[][o.s.s.p.ServerPluginRepository] Deploy plugin SonarTS / 1.1.0.1079 / 042c9e65239a47d92d305f9767f730b3cc1e5ed3
2018.12.02 13:57:03 INFO  web[][o.s.s.p.ServerPluginRepository] Deploy plugin SonarXML / 1.4.3.1027 / 39588245cecf538bb27be4e496ff303b0143d20b
2018.12.02 13:57:07 INFO  web[][o.s.s.p.d.m.c.PostgresCharsetHandler] Verify that database charset supports UTF8
2018.12.02 13:57:09 INFO  web[][o.s.s.p.w.MasterServletFilter] Initializing servlet filter  [pattern=UrlPattern{inclusions=[/api/system/migrate_db/*, ...], exclusions=[/api/properties*, ...]}]
2018.12.02 13:57:09 INFO  web[][o.s.s.a.EmbeddedTomcat] HTTP connector enabled on port 9000
2018.12.02 13:57:16 INFO  web[][o.s.s.p.UpdateCenterClient] Update center: https://update.sonarsource.org/update-center.properties (no proxy)

SonarQube에 액세스

이제 SonarQube가 설치 및 구성되었습니다. 웹 브라우저를 통해 액세스할 때입니다.

웹 브라우저를 열고 URL http://example.com을 입력합니다. 다음 페이지로 리디렉션됩니다.

여기에서 로그인 버튼을 클릭합니다. 다음 페이지가 표시됩니다.

기본 관리자 계정 사용자 이름과 암호를 admin/admin으로 제공하고 로그인 버튼을 클릭합니다. 다음 페이지에서 SonarQube 기본 대시보드를 볼 수 있습니다.

축하합니다! Ubuntu 18.04 서버에 SonarQube를 성공적으로 설치했습니다. 이제 자동 검토를 쉽게 수행하고 SonarQube를 사용하여 애플리케이션의 상태를 확인할 수 있습니다.