OpenShift上にSonarQube+PostgresqlをDeployしてみる

# はじめに
- この記事では、以下の流れを手順を追って記載します。
    - Red Hat OpenShift上にNameSpaceを作成する
    - PostgresqlをDeployする
    - SonarQube提供元が公開しているDockerfileを使って、SonarQubeをコンテナとしてDeploy、Postgresqlに接続してデータの永続化を実現する

## 記事を書いた理由
- 何気に今からやろうとしていることを一から解説してくれてた記事が無くて困ったので、これからやる人にとって役立つものとして残すため

# OpenShiftにNameSpaceを作成する
- 便宜上、`NameSpace`は`sonarqube`としていますが、お好きなものを設定してください。
- コマンドラインでやる場合は以下のコマンド。
```
oc new-project sonarqube
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/ad6f66be-0d91-3e1b-1a5f-5e62b1b104ea.png)

# PostgresqlをDeployする
- 方法はおまかせします。Postgresqlのコンテナイメージを使うでもよし
- 一応、本記事ではOpenShiftで最初から用意されているTemplateを使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/aac0f352-4ff1-a30f-b8e3-bf2edfeba4c3.png)
- Postgresqlのパラメータとして重要なのは以下3つになります。
- 便宜上、以下のようにしておりますが、なんらか任意の値を設定してください。
    - POSTGRESQL_USER: `user`
    - POSTGRESQL_PASSWORD: `password`
    - POSTGRESQL_DATABASE: `sonarqubedb`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/382dafb9-910c-0029-7ea5-c9a8f73866ff.png)
- PostgresqlコンテナがDeployできました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/834ff259-ae24-c422-1bbd-36ee4c64995b.png)

# SonarQubeの公式Dokcerfileを確認し、リポジトリをフォークする
- まず、[DcokerHubのSonarQubeページ](https://hub.docker.com/_/sonarqube)にアクセスします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/ac8ee034-2160-4487-348f-959414f2c86c.png)
- SourceはGitHubで公開されているので、[SonarSource](https://github.com/SonarSource/docker-sonarqube)にアクセスします。
- 本記事の執筆時点ではVer9とVer10が存在しているようですが、特にこだわりなければ10を選んでおきます。
- 今回はサポートなしの無料で利用するため、`Community`の中のDockerfileを使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/f23dd5ad-0433-59ac-668c-10aab2243a55.png)
- このDokcerfileをそのまま使ってSonarQubeコンテナをDeployすると、Postgresqlとの接続がされません。
- ↓こんな感じのメッセージが出てデータが永続化されない
![スクリーンショット 2023-11-29 17.49.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/cda0a559-c17c-d455-f62b-2a2535b09f5d.png)
- なので、少しいじります。リポジトリをご自身のアカウントにフォークしてください。

# Dockerfileを編集する
- Postgresqlの接続先URLを確認しましょう。
- 先程DeployしたPostgresqlの`Service`リソースの詳細画面で`ホスト名`となっている部分を確認します。
- `ホスト名`は`NameSpace`と`Service`の名称から機械的に決められ、今回の例ではURL形式は以下になります。
```
jdbc:postgresql://postgresql.sonarqube.svc.cluster.local:5432/sonarqubedb
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/21a86fcd-8a42-2c7f-4e72-e0d956b39932.png)
- フォークしてきたDockerfileに以下のようにPostgresqlの接続情報を追記します。
```
SONAR_JDBC_URL=jdbc:postgresql://postgresql.sonarqube.svc.cluster.local:5432/sonarqubedb \
SONAR_JDBC_USERNAME=user \
SONAR_JDBC_PASSWORD=password
```
![スクリーンショット 2023-11-29 17.24.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/f52a508c-f32b-04e9-d545-f73334d7c175.png)

# OpenShiftにSonarQubeコンテナをDeployする
- 再びOpenShiftの画面です。+追加 > Gitからのインポート と進みます。
- フォークしたご自身のリポジトリのClone URLをコピペしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/53656419-127a-df46-f89d-d836ff41f34b.png)
- `コンテキストディレクトリー`に、先程編集した`Dockerfile`が格納されているディレクトリのPathを指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/5144219d-d031-776d-e1f7-fcbd2cbaf4b2.png)
- すると、自動で`Dockerfile`を認識し、インポートストラテジーも`Dockerfile`になります。
- アプリ名 等はご自由にどうぞ！
- SonarQubeのDockerfileでは、コンテナの9000番PortでExposeしているようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/051625ca-2711-2f70-d115-f21a87d85dd2.png)
- 故に`Targetport`を`9000`と変更してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/572cdc74-0c36-c9a0-ba50-d1673240ac9b.png)
- 「作成」をクリック！
- DeployできたらRouteのURLをクリックしてSonarQubeのコンソールにアクセスしましょう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/3fdb9818-3e6b-9161-a4e7-ca0f702fa849.png)
- 初期の管理者ログイン情報は以下です。
    - Login: `admin`
    - Password: `admin`
- 初期パスワード変更画面に従って、パスワードを変更してください。
- おめでとうございます！ログインできました！Posgresqlに接続されてデータの永続化もされているので、下部に警告メッセージも出ていません！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627586/761605fb-060e-9152-ed86-b5e73ec13c1e.png)