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
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」を選択します。
左側ペインにある「Data export/import」メニューからエクスポート画面右下の「Export」ボタンをクリックしてH2データベースの内容をエクスポートします。
エクスポートしたファイルは、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でログインします。
3.5 データのインポート
管理ユーザーでサインインしたら、「System administration」メニューから「Data export/import」画面を開いて「import」の画面にある「Choose File」ボタンをクリックして先にエクスポートしておいたファイルを選択してから、「Import」ボタンをクリックしてインポートします。
「Import」ボタンをクリックすると、確認画面が表示されますので「OK」ボタンをクリックします。
データのインポートに成功して、「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 データインポート後の実行画面
データインポート後に一旦サインアウトして、以前のユーザーでサインインすればそのままリポジトリーを参照することができます。
4 おわりに
ここではGitBucketの外部データベースとしてPostgreSQLを選択しましたが、これで問題のある場合があるとされる組み込みのH2データベースではなく外部データベースを使うことができるようになりましたので、安心してGitBucketを使用することができます。また、H2データベースよりもパフォーマンスにも優れているとされていますのでGitBucketを使う場合には、是非とも外部データベースで利用していきたいものです。
参考:2016/07/16 GitBucketをPostgreSQLやMySQLで動かす たけぞう瀕死ブログ
External database configuration gitbucket/gitbucket