如何在 Ubuntu 18.04 LTS 上安装 SonarQube
本教程适用于这些操作系统版本
- Ubuntu 16.04(Xenial Xerus)
在此页
- 要求
- 开始
- 安装Java
- 安装和配置 PostgreSQL
- 安装和配置 SonarQube
- 为 SonarQube 创建 Systemd 服务文件
- 为 SonarQube 配置 Apache
- 访问 SonarQube
SonarQube 是一个开源平台,可以持续检查应用程序的代码质量。它是用Java语言编写的,支持多种数据库。您可以检查 20 多种编程语言的代码并检查应用程序的运行状况,包括 Java、C、C++、C#、PHP 以及 JavaScript、HTML 和 CSS 等 Web 语言。 SonarQube 可以分析源代码、查找安全漏洞、检测错误并在基于 Web 的仪表板上显示结果。您可以轻松地将 SonarQube 与 Maven、Ant、Gradle、MSBuild、LDAP、Active Directory 和 GitHub 集成。
在本教程中,我们将学习如何在 Ubuntu 18.04 LTS (Bionic Beaver) 服务器上安装 SonarQube。
要求
- 一台运行 Ubuntu 18.04 的服务器。
- 具有 sudo 权限的非根用户。
入门
在开始之前,您需要使用最新版本更新您的系统。您可以通过运行以下命令来执行此操作:
sudo apt-get update -y
sudo apt-get upgrade -y
更新系统后,重新启动系统以应用更改。
安装Java
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
默认情况下,Ubuntu 18.04 默认存储库中不提供最新版本的 PostgreSQL。因此,您需要将 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 shell:
psql
接下来,为声纳用户设置密码并使用以下命令创建声纳数据库:
ALTER USER sonar WITH ENCRYPTED password 'password';
CREATE DATABASE sonar OWNER sonar;
接下来,退出 PostgreSQL shell:
\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 服务文件
接下来,您需要创建一个 systemd 服务文件来管理 SonarQube 服务。您可以使用以下命令执行此操作:
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。因此,您需要安装并配置 Apache 作为反向代理才能使用端口 80 访问 SonarQube。
为此,请使用以下命令安装 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 现已安装和配置。是时候通过网络浏览器访问它了。
打开 Web 浏览器并输入 URL http://example.com。您将被重定向到以下页面:

在这里,单击“登录”按钮。您应该会看到以下页面:

提供默认管理员帐户用户名和密码为 admin/admin,然后单击“登录”按钮。您应该在以下页面中看到 SonarQube 默认仪表板:

恭喜!您已经在 Ubuntu 18.04 服务器上成功安装了 SonarQube。您现在可以使用 SonarQube 轻松执行自动审查并检查应用程序的运行状况。