Ubuntu 16.04でECSインスタンスにSonarQubeをインストールする

このチュートリアルでは、Ubuntu 16.04を使用したAlibaba Cloud **Elastic Compute Service**(ECS)インスタンスにSonarQubeをインストールして設定します。

*本ブログは英語版からの翻訳です。オリジナルは[こちら](https://www.alibabacloud.com/blog/easy-guide-to-install-sonarqube-on-ubuntu-16-04_593923)からご確認いただけます。一部機械翻訳を使用しております。翻訳の間違いがありましたら、ご指摘いただけると幸いです。*

#SonarQubeの必要性
SonarQubeは、コードを静的に解析することで、セキュリティ脆弱性の発見、バグの検出、コードを確認することができます。自動レビューを行い、アプリケーションの健全性を表示します。SonarQubeは、最近導入されたエラーをハイライトし、漏れを修正できるQuality Gateを備えています。SonarQubeにプッシュされる前に、機能ブランチに対して分析を実行するプルリクエストを分析することができます。このようにして、SonarQubeに届く前に問題を修正する機会を得ることができます。

ブランチ分析は、コードがクリーンであり、マスターへのマージが承認されていることを確認するために行われます。SonarQubeでは、コード内の問題を分析して見つけ出すことができるように、問題を掘り下げることができます。SonarQubeは、プロジェクトの履歴を可視化し、すべての実行パスを探索します。

要するに、SonarQubeは、問題点やセキュリティ上の脆弱性、コードのにおいを検知し、その結果をレポート形式で提供することで、コードのメンテナンスを支援します。SonarQubeを利用するためには、開発者のパソコンに解析エンジンアプリケーションをインストールし、レポートや記録を一元管理するサーバを設置する必要があります。これにより、サーバーアプリケーションは複数の開発者のコンピュータからアクセスされることになるため、コード品質のレポートを一元化することができます。

このチュートリアルでは、Ubuntu 16.04を使用したAlibaba Cloud [Elastic Compute Service](https://www.alibabacloud.com/product/ecs?spm=a2c65.11461447.0.0.44ec591fyZ0TTr) (ECS)インスタンスにSonarQubeをインストールして設定します。

#前提条件
1、Alibaba Cloud [Elastic Compute Service (ECS)](https://www.alibabacloud.com/product/ecs?spm=a2c65.11461447.0.0.44ec591fyZ0TTr)を有効化し、有効な支払い方法を確認する必要があります。新規ユーザーの場合は、Alibaba Cloudアカウントで[無料アカウントを取得](https://account-intl.aliyun.com/register/intl_register.htm?spm=a2c65.11461447.0.0.44ec591fyZ0TTr&biz_params=%7B%22intl%22%3A%22%7B%5C%22referralCode%5C%22%3A%5C%22ffxt3q%5C%22%7D%22%7D)することができます。ECSインスタンスのセットアップ方法がわからない場合は、[このチュートリアル](https://www.alibabacloud.com/blog/3-ways-to-set-up-a-linux-server-on-alibaba-cloud_572384?spm=a2c65.11461447.0.0.44ec591fyZ0TTr)または[クイックスタートガイド](https://www.alibabacloud.com/help/doc-detail/25422.htm?spm=a2c65.11461447.0.0.44ec591fyZ0TTr)を参照してください。ECSインスタンスは、少なくとも2GBのRAMと1コアプロセッサを搭載している必要があります。
2、Alibaba Cloudから登録された[ドメイン名](https://www.alibabacloud.com/domain?spm=a2c65.11461447.0.0.44ec591fyZ0TTr)。すでにAlibaba Cloudまたは他のホストからドメインを登録している場合は、そのドメインネームサーバーレコードを更新することができます。
3、ドメイン名は、あなたのAlibaba Cloud ECSのIPアドレスを指している必要があります。
4、Alibaba CloudのVNCコンソールまたはPCにインストールされているSSHクライアントにアクセスします。
5、サーバのホスト名を設定し、root権限を持つユーザを作成します。
6、[このチュートリアル](https://www.alibabacloud.com/getting-started/projects/how-to-install-lamp-stack?spm=a2c65.11461447.0.0.44ec591fyZ0TTr)に沿って、Apache、MySQL、PHPをインストールします。

###ECS サーバーのセットアップ
####Ubuntuのシステムを更新
パッケージのインストールを進める前に、以下のコマンドを使用してUbuntuシステムをアップデートしてください。このコマンドを実行するには、root 以外のユーザから sudo 権限でログインすることを忘れないでください。

```
# sudo apt update && sudo apt upgrade
```

###add-apt-repositoryをインストール
Oracle JDKをインストールするには、リポジトリを追加する必要があります。しかし、そのリポジトリを追加するためには、aptパッケージにリポジトリを追加するためのadd-apt-repositoryをインストールする必要があります。そのためには、以下のコマンドを実行します。

```
# sudo apt-get install -y software-properties-common
```

###Java JDK のインストール
ここで、Java JDK環境を設定する必要があります。SonarQubeにはOracle JDKが必要です。Oracle JDKをインストールするには、以下の手順に従ってください。

ステップ1: 以下のコマンドを実行して、必要なリポジトリを apt リポジトリに追加します。

```
# sudo add-apt-repository ppa:webupd8team/java
```

ステップ2: 以下のコマンドを実行してaptリポジトリを更新します。

```
# sudo apt-get update
```

ステップ3：JDKのインストールを進めます。執筆時点でSonarQubeがサポートしているのはJDK 8のみなので、忘れずにこのバージョンのみを使用してください。今のところ他のバージョンは使用しないでください。

```
# sudo apt install oracle-java8-installer
```


###unzipのインストール
SonarQube の圧縮された zip フォルダを解凍する必要があるため、unzip をインストールする必要があります。インストールするには、コマンドを実行します。

```
# sudo apt-get install unzip
```

#PostgreSQLのインストール
SonarQubeはPostgreSQL、MySQL、MSSQL、Oracleをサポートしています。このチュートリアルでは、MySQL は大規模なインスタンスにはお勧めできないので、PostgreSQL を使用します。MySQLを使用する場合は、バンドルされているmysql-connector-javaを使用するしかありません。MySQLではInnoDBエンジンは必須です。このような制約を避けるためには、PostgreSQLの利用を強くお勧めします。以下の手順でPostgreSQLをインストールします。

ステップ1：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 -
```

ステップ2: 以下のコマンドを実行して、PostgreSQLサーバをインストール

```
# sudo apt-get -y install postgresql postgresql-contrib
```

ステップ3: 以下のコマンドを実行してPostgreSQLサーバを起動し、再起動後に自動的に起動できるようにする

```
# sudo systemctl start postgresql
# sudo systemctl enable postgresql
```

###ディレクトリの作成と権限の設定
コードの品質検査を継続的に行うために SonarQube をインストールするには、以下の手順に従ってください。

ステップ1: sonar という名前のディレクトリを作成します。ディレクトリ名は任意の名前を付けても構いませんが、SonarQube のインストールの次のステップでは、ご自身のディレクトリパスに従っていただく必要があります。

```
# sudo mkdir /opt/sonar
```

ステップ2: さて、作成したディレクトリのユーザ名に権限を与えて、変更を加えることができるようにします。そのためには、以下のコマンドを実行してください。aareezを自分のユーザ名に置き換えることを忘れないようにしてください。

```
# sudo chown -R aareez:aareez /opt/sonar
```

#SonarQubeのインストール
サーバの設定と PostgreSQL データベースのインストールが完了したので、SonarQube をインストールしましょう。SonarQube をダウンロードしてインストールするには、以下の手順に従ってください。

ステップ1：SonarQube用に作成したディレクトリ/opt/sonarに移動します。

```
# cd /opt/sonar
```

ステップ2：今度はSonarQubeのコピーを公式サイトからダウンロードする必要があります。そのためには、以下のコマンドを実行します。

```
# sudo wget https://sonarsource.bintray.com/Distribution/sonarqube/sonarqube-7.2.1.zip 
```

ステップ3: コマンドを実行することで、CLIで圧縮されたzipフォルダを見ることができるようになりました。

```
# ls -li
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/fbb238e9-f759-44a4-0e1d-37052a356dd1.png)

圧縮されたフォルダを解凍してファイルを解凍します。そのためには、以下のコマンドを実行します。

```
# sudo unzip sonarqube-7.2.1.zip
```

###データベースの作成と設定
データベースの作成と設定は、以下の手順で行います。

ステップ1：postgresユーザのパスワードを変更し、postgresユーザに切り替えます。パスワードを変更するには、以下のコマンドを実行します。

```
# sudo passwd postgres
```

以下のコマンドを実行して、postgresユーザに切り替えます。

```
# su - postgres
```

ステップ2: 次のコマンドを実行して新しいユーザーを作成します。

```
# createuser sqube
```

ステップ3: 今度は、クエリを実行するためのPostgresシェルを開きます。開くには、コマンドを実行します。

```
# psql
```

ステップ4: 以下のクエリを実行します。最初のクエリでユーザのパスワードを作成し、2番目のクエリでデータベースを作成してユーザにデータベース権限を割り当て、3番目のクエリでMySQLサーバを終了します。

```
ALTER USER sqube WITH ENCRYPTED password '654321Ab'.
CREATE DATABASE sqube OWNER sqube.
\q
```

ステップ5: 以下のコマンドを実行して、sudoユーザーに戻ります。

```
# exit
```

#SonarQubeの設定
SonarQube の使用を開始するには、データベースの設定やサーバモードでの実行など、基本的な設定を行う必要があります。

sonar.properties ファイルを開いて、データベースのユーザー名とパスワードを設定し、SonarQube がデータベース接続に使用するドライバについて説明します。以下のコマンドを実行してファイルを開きます。

```
# cd /opt/sonar
# sudo nano sonarquebe-7.2.1/conf/sonar.properties
```

上記コマンドを実行すると、文書が開きます。以下のような領域が表示されます。両行の先頭から#を外し、データベース作成時に設定したMySQLのユーザ名とパスワードを書きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/215e77c0-59f2-3362-53a7-1831d7f7154e.png)


以下のsonar.jdbc.urlの部分を探し、#を削除してコメントを外します。これにより、SonarQubeはPostgreSQLを使用するようになり、Sonarはデータベース名であるsqubeで変更する必要があります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/22810afb-59a8-4365-25c3-77bc3bcdb43c.png)

ここでsonar.web.hostを見つけ、#を削除してこの行のコメントを外し、IPを127.0.0.0.1に変更します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/754876d0-3466-e625-7a6b-73229d311e2e.png)

ここでsonar.web.javaAdditionalOptsを見つけ、#を削除して行のコメントを外し、値を-serverに変更します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/91afcee4-342c-cb42-5344-f0abe053f80e.png)


変更後、Ctrl + X キーを押して Y と入力し、Enter キーを押して設定を保存します。

###SonarQube のリバースプロキシの設定
SonarQube は、デフォルトではローカルホストの 9000 番ポートをリッスンします。標準の HTTP 80 ポート経由でアクセスするには、リバースプロキシを設定する必要があります。

設定は以下の手順で行います。

ステップ 1: コマンドを実行してプロキシモードを有効にします。

```
# sudo a2enmod proxy
# sudo a2enmod proxy_http
```

ステップ2：バーチャルホストの設定に進む 以下のコマンドを実行して、バーチャルホストの作成を進めます。

```
# sudo nano /etc/apache2/sites-available/softpedia.xyz.conf
```

ステップ3：開いたファイルに以下のテキストを追加し、Ctrl + Xを押して、Yと入力してEnterキーを押してファイルを保存します。


```


ProxyRequests Off
ProxyPreserveHost On
<VirtualHost *:80>
    ServerName www.softpedia.xyz
    ServerAdmin admin@softpedia.xyz
    ProxyPreserveHost On
    ProxyPass / http://localhost:9000/
    ProxyPassReverse / http://www.softpedia.xyz/

</VirtualHost>
```

ステップ4: 新しく作成したバーチャルホストを有効にしてから、apacheサーバを起動して有効にする必要があります。これを行うには、コマンドを実行します。

```
# sudo a2ensite softpedia.xyz.conf
# sudo systemctl start apache2
# sudo systemctl enable apache2
```

ステップ5: sonarという名前の非rootユーザーを追加します。

```
# sudo adduser sonar
```

ディレクトリ /opt/sonar にソナーユーザーの権限を割り当てます。

```
# sudo chown -R sonar:sonar /opt/sonar
```

ここで、run_as_userを割り当てるためにbashファイルを開きます。

```
# sudo nano /opt/sonar/sonarquebe-7.2.1/bin/linux-x86-64/sonar.sh
```

開いたファイルの中で RUN_AS_USER を探し、#記号を削除してコメントを外し、ソナーとしての値を追加します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/3e95bf5f-829e-02f0-511c-551a4b09d8b1.png)

SonarQube を起動するには、以下のコマンドを実行します。

```
# opt/sonar/sonarqube-7.2.1/bin/linux-x86-64/sonar.sh start
```

SonarQube を起動するには、以下のコマンドを実行します。

```
# /opt/sonar/sonarqube-7.2.1/bin/linux-x86-64/sonar.sh stop
```

お待たせしました。これでSonarQubeのインストールと設定は完了です。ドメイン名を使って簡単にアクセスできます。私の場合は www.softpedia.xyz を使用しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/647921/e004fb24-b122-30f5-f1c8-943419d27710.png)

*アリババクラウドは日本に２つのデータセンターを有し、世界で60を超えるアベラビリティーゾーンを有するアジア太平洋地域No.1(2019ガートナー)のクラウドインフラ事業者です。
アリババクラウドの詳細は、こちらからご覧ください。
[アリババクラウドジャパン公式ページ](https://www.alibabacloud.com/ja)*