gitbucket-dockerを動かす(3)外部データベースとしてPostgreSQLを使う

1 はじめに

この記事は、3つのシリーズの最後になります。
gitbucket-dockerを動かす(1)gitbucket-dockerをビルドする
gitbucket-dockerを動かす(2)gitbucketを使用する
gitbucket-dockerを動かす(3)外部データベースとしてPostgreSQLを使う

GitBucketではデータベースを使うのですが、標準では内蔵のH2という組み込みのデータベースを使っています。この点について作者の takezoeさんのブログでは、「4.0 からはH2の代わりに外部データベースとしてPostgreSQLやMySQLを使うことができるようになっています。H2はデータの保全性に問題がありますので業務等の重要な用途にGitBucketを使われるのであればなるべくPostgreSQLもしくはMySQLを利用することが望ましいです(パフォーマンス面でもメリットがあります)」として説明されています。ここでは、実際に外部データベースとしてPostgreSQLを使うように構成していきたいと思います。

2 クリーンインストールの場合

アカウントやリポジトリを作成していない、これからGitBucketを使う場合の方法です。

2.1 GitBucketを起動して終了する

まずdocker-composeでGitBucketを起動して、起動したらそのまま終了します。

$ docker-compose up -d

1 GitBucketの初期画面

GitBucketの初期画面が表示されますが、そのまま終了しておきます。

$ docker-compose down

2.2 database.confファイルの修正

takezoeさんのブログにあるようにdatabase.confファイルを修正します。

$ cd ./gitbucket/data
$ sudo vi database.conf
db {
url = "jdbc:postgresql://postgres/gitbucket"
user = "sa"
password = "sa"
}

2.3 docker-compose.ymlファイルの修正

先に、「gitbucket-dockerを動かす(1)gitbucket-dockerをビルドする」で使用していたdocker-compose.ymlファイルを修正して以下の内容にします。

$ vi docker-compose.yml
version "3.1"

services:

gitbucket:
image: gitbucket
restart: always
ports:
- 8080:8080
- 20418:20418
volumes:
- ./gitbucket/data:/gitbucket
depends_on:
- postgres

postgres:
image: postgres: 12.1-alpine
restart: always
ports:
- 5432:5432
environment:
- POSTGES_DB=gitbucket
- POSTGERS_USER=sa
- POSTGRES_PASSWORD=sa
- TZ=Asia/Tokyo
- LANG=ja_JP.UTF-8
volumes:
- ./gitvacket/var/lib/postgresql/data:/var/lib/postgresql/data

2.4 GitBucketを起動する

これで起動すれば外部データベースとしてPostgreSQLを使用してGitBucketを使うことができます。

この場合は、初期状態ですからGitBucketには既定値の管理ユーザーであるrootでパスワードもrootでログインします。

3 アップグレードの場合

既にGitBucket Ver.4系以前を使っている場合には、takezoeさんのブログにある注意点を参照してください。ここではVer.4系を使っていてアップグレードする場合とします。

3.1 データのエクスポート

管理者権限のあるユーザーでログインしている状態で、右上のプルダウンメニューから「System administration」を選択します。

2 System administration画面

左側ペインにある「Data export/import」メニューからエクスポート画面右下の「Export」ボタンをクリックしてH2データベースの内容をエクスポートします。

3 DBエクスポート画面

エクスポートしたファイルは、Raspberry PiまたはUbuntuにログインしているユーザーのDownloadsフォルダーに書き出されます。

$ ls ~/Downloads
gitbucket-export-9527185560477011195.sql

データベースのエクスポートに成功したら、GitBucketを終了します。

$ docker-compose down

3.2 database.confファイルの修正

ここで2.2 database.confファイルの修正と同様に、PostgreSQL用にdatabase.confファイルを修正します。

$ cd ./gitbucket/data
$ sudo vi database.conf
db {
url = "jdbc:postgresql://postgres/gitbucket"
user = "sa"
password = "sa"
}

3.3 docker-compose.ymlファイルの修正

やはり2.3 docker-compose.ymlファイルの修正と同様に、docker-compose.ymlファイルを修正します。

3.4 GitBucketを起動

docker-composeでGitBucketを起動します。

$ docker-compose up -d

この状態では、GitBucketが初期状態で起動しますから既定値の管理ユーザーであるroot、パスワードもrootでログインします。

4 既定値の管理ユーザーでサインイン

3.5 データのインポート

管理ユーザーでサインインしたら、「System administration」メニューから「Data export/import」画面を開いて「import」の画面にある「Choose File」ボタンをクリックして先にエクスポートしておいたファイルを選択してから、「Import」ボタンをクリックしてインポートします。

5 インポート画面でファイルを選択

「Import」ボタンをクリックすると、確認画面が表示されますので「OK」ボタンをクリックします。

データのインポートに成功して、「System administration」画面に戻ると先に作成されていたユーザーが表示されているのが見えます。

6 データインポート後のSystem administration画面

3.6 PostgreSQLの追加操作

takezoeさんのブログで説明されているように外部データベースとしてPostgreSQLを使う場合には、以下の用にしてSQLを追加で実行する必要があります。

$ docker exec -it gitbucket-docker_postgres_1 sh
# psql gitbucket sa
gitbucket=# 
SELECT setval('label_label_id_seq', (select max(label_id) +1 from label));
SELECT setval('activity_activity_id_seq', (select max(activity_id) + 1 from activity));
SELECT setval('access_token_access_token_id_seq', (select max(access_token_id) + 1 from access_token));
SELECT setval('commit_comment_comment_id_seq', (select max(comment_id) + 1 from commit_comment));
SELECT setval('commit_status_commit_status_id_seq', (select max(commit_status_id) + 1 from commit_status));
SELECT setval('milestone_milestone_id_seq', (select max(milestone_id) + 1 from milestone));
SELECT setval('issue_comment_comment_id_seq', (select max(comment_id) + 1 from issue_comment));
SELECT setval('ssh_key_ssh_key_id_seq', (select max(ssh_key_id) + 1 from ssh_key));
gitbucket=# exit
# exit

上記のSELECT文を実行した際に、「ERROR: relation “activity” does not exist」となっていましたが、これは無視できる内容でしょう。

3.7 データインポート後の実行画面

データインポート後に一旦サインアウトして、以前のユーザーでサインインすればそのままリポジトリーを参照することができます。

7 データインポートされたリポジトリの表示

4 おわりに

ここではGitBucketの外部データベースとしてPostgreSQLを選択しましたが、これで問題のある場合があるとされる組み込みのH2データベースではなく外部データベースを使うことができるようになりましたので、安心してGitBucketを使用することができます。また、H2データベースよりもパフォーマンスにも優れているとされていますのでGitBucketを使う場合には、是非とも外部データベースで利用していきたいものです。

参考:2016/07/16 GitBucketをPostgreSQLやMySQLで動かす たけぞう瀕死ブログ
   External database configuration gitbucket/gitbucket

この記事をシェアする
目次
閉じる