やりたいこと
- sonarqubeをローカルで立ち上げて、かつデータは永続化したい
- sonarqubeにDB設定をしないとH2データベースを使ってしまうのでdocker-composeで合わせて設定する
前提
ローカル環境にdocker-composeが入っていること
手順
公式からサンプルファイルを取得し任意のフォルダに配置
- 執筆時点では以下の記載
docker-compose.yml
version: "3"
services:
sonarqube:
image: sonarqube:community
hostname: sonarqube
container_name: sonarqube
depends_on:
- db
environment:
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
ports:
- "9000:9000"
db:
image: postgres:13
hostname: postgresql
container_name: postgresql
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
POSTGRES_DB: sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
volumes:
sonarqube_data:
sonarqube_extensions:
sonarqube_logs:
postgresql:
postgresql_data:
docker-compose up -d --build
で立ち上げ
- サンプルファイルはデフォルトポートをそのまま使っているので、被ってないことを確認した上で立ち上げてください
無事立ち上がればOK!
sonaqubeアクセス
無事アクセスできればOK!
あとは、id/pwをadmin/adminでログインして設定するだけ
トラブルシューティング
ここからは立ち上がらなかったときの対処法のメモ
Postgresqlのバージョンが違うよエラーがでてPostgreSQLが立ち上がらない
以下のようなエラー(バージョンは人によって違うと思います)
The data directory was initialized by PostgreSQL version 10, which is not compatible with this version 13.10 docker
- 原因
- ボリュームに保存されているバージョンと、今起動しようとしているバージョンが違うため
- 対処法
- 以下のコマンドで一度ボリューム含めて全削除する
docker-compose down --rmi all --volumes --remove-orphans
- ※注記)docker-composeの設定がすべて消えます
- 以下のコマンドで一度ボリューム含めて全削除する
ElasticSearchでエラー
You must address the points described in the following [1] lines before starting Elasticsearch.
- 対処法
- こちらを参考https://stackoverflow.com/questions/57070176/sonarqube-7-9-1-community-troubleshooting
- Elasticsearch は MMap FS ディレクトリを使用してインデックスを保存します。OSのデフォルトのmmapカウントの制限値が低すぎる可能性があり、メモリ不足の例外が発生する可能性があります。以下のコマンドを入力し、sudo権限で仮想メモリの値を増やしてください、
- デフォルトだと
vm.max_map_count
の値が低く設定されているためとのこと - 以下コマンドを実行して、再度立ち上げ
sudo sysctl -w vm.max_map_count=262144
- デフォルトだと
postgresqlのデフォルトポートを変更したい場合
docker-compose内で定義したsonarqubeは5432ポートを見に行くので、
ローカル環境で競合を避けたい場合は以下の★を変更するだけ
version: "3"
services:
sonarqube:
image: sonarqube:community
hostname: sonarqube
container_name: sonarqube
depends_on:
- db
environment:
# sonaqube is connecting to db on 5432port. ★この接続先はそのまま5432ポート
SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
SONAR_JDBC_USERNAME: sonar
SONAR_JDBC_PASSWORD: sonar
volumes:
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_logs:/opt/sonarqube/logs
ports:
- "9000:9000"
db:
image: postgres:13
ports:
- "25432:5432" # avoid conflict local pgsql port ★
hostname: postgresql
container_name: postgresql
environment:
POSTGRES_USER: sonar
POSTGRES_PASSWORD: sonar
POSTGRES_DB: sonar
volumes:
- postgresql:/var/lib/postgresql
- postgresql_data:/var/lib/postgresql/data
volumes:
sonarqube_data:
sonarqube_extensions:
sonarqube_logs:
postgresql:
postgresql_data:
- 参考
最後に
こちらの記事が参考になったら幸いです。