DockerコンテナでCloudBeaverをセットアップする

## cloudbeaverとは？

SQLクエリの実行やデータのインポート/エクスポート、ER図の作成など、DBeaverは便利ですよね。DBeaverチームが開発したブラウザベースのデータベース管理ツールであるCloudBeaverを使うと、これらの機能をブラウザからどこでも利用できます。リアルタイムでデータを更新したり複数のユーザーが同時にアクセスできたりとかなり便利なのですが、CloudBeaverに関する記事がほとんどなかったので使い方を書いてみます。

## dockerコンテナを用いてCloudBeaverを利用する

dockerを用いてCloudBeaverに接続してみましょう。

``` docker-compose.yml
    cloudbeaver:
    image: dbeaver/cloudbeaver:latest
    container_name: CLOUDBEAVER
    ports:
      - "8080:8978"
    depends_on:
      - postgres
    networks:
      - TNet
    logging:
      driver: "none"
```
#### CloudBeaverの起動
```
docker-compose up -d
```
#### 初期画面の確認

localhost:8080で接続すると無事初期画面が表示されました！
![スクリーンショット 2025-02-21 22.54.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755437/b109d5ae-8157-4b93-8236-464866af0ad0.png)

その後、管理者ユーザーの設定などを行い、
![スクリーンショット 2025-02-21 22.55.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755437/e6222b52-b387-4146-a498-6b4d4dcd5ef6.png)

設定した管理者ユーザーでログインすると、新しくデータベースを接続することができます。
![スクリーンショット 2025-02-21 22.56.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755437/2dd446af-846a-406a-9930-19c3b725936a.png)
![スクリーンショット 2025-02-21 22.57.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755437/f29159c6-e7c2-4d0c-a7a1-258622829bfd.png)
## 設定ファイルで自動設定する
上記のように手動で設定せずに設定ファイルを用いることもできます。
### 管理者ユーザーの設定
.cloudbeaver.auto.confファイルを用いて管理者ユーザーの設定を行うことができます。(保存場所は/opt/cloudbeaver/conf/.cloudbeaver.auto.conf)
```.cloudbeaver.auto.conf
CB_ADMIN_NAME=cbadmin
CB_ADMIN_PASSWORD=CBadmin123
CB_PUBLIC_URL=http://localhost:8080
CB_SERVER_NAME=testServer
```
### データベース設定
data-sources.jsonファイルを用いてデータベースとの接続設定を行うことができます。(/opt/cloudbeaver/workspace/GlobalConfiguration/.dbeaver/data-sources.json)
```data-sources.json
{
	"folders": {},
	"connections": {
		"trascenPostgresDBL": {
			"provider": "postgresql",
			"driver": "postgres-jdbc",
			"name": "MY PostgreSQL Database",
			"configuration": {
				"host": "postgres",
				"port": "5432",
				"database": "my_db",
				"url": "jdbc:postgresql://postgres:5432/my_db",
				"configurationType": "MANUAL",
				"type": "dev",
				"closeIdleConnection": true,
				"auth-model": "native",
				"bootstrap": {
					"autocommit": true
				}
			}
		}
	},
	"connection-types": {
		"dev": {
			"name": "Development",
			"color": "255,255,255",
			"description": "Regular development database",
			"auto-commit": true,
			"confirm-execute": false,
			"confirm-data-change": false,
			"smart-commit": false,
			"smart-commit-recover": true,
			"auto-close-transactions": true,
			"close-transactions-period": 1800,
			"auto-close-connections": true,
			"close-connections-period": 14400
		}
	}
}
```

これらのファイルをDockerfileを用いてコンテナ内にコピーします。
```Dockerfile
COPY data-sources.json /opt/cloudbeaver/workspace/GlobalConfiguration/.dbeaver/data-sources.json
COPY .cloudbeaver.auto.conf /opt/cloudbeaver/conf/.cloudbeaver.auto.conf
```

localhost:8080に接続し、.cloudbeaver.auto.confファイルで設定した管理者ユーザーでloginすると、すでにデータベースが接続されていることがわかります！
![cloudbeavergif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3755437/9a27253e-ec42-4d1c-a86b-eefbd3a4621a.gif)

## 余談
設定ファイルについては、公式ドキュメントにもあまり記載がなく、調べてもあまり出てきませんでした。特にdata-sources.json内の
```
"provider": "postgresql",
"driver": "postgres-jdbc",
```
の設定ミスでのエラーに悩まされ、結局手動で設定した後、設定ファイルがどう変更されたかを確認することで正しい設定方法がわかりました。もしpostgres以外のデータベースのproviderやdriverの設定で困っているなら一度手動で設定してからコンテナ内のdata-sources.jsonファイルを確認してみるといいかもしれません。