想定する読者
これまで GitBucketを組み込みデータベースで運用していて、安定性に不安を感じ始めている管理者。
あまり想定していない読者
これから GitBucket + postgreSQLを運用していこうと考えている管理者は以下のページを参考にしたほうが良い。
→ Qiita: docker-composeでGitBucket+PostgreSQLを起動する
手順
仮のGitBucketサーバを作り、そのデータを postgreSQLに移行する手順を追っていく。
この手順は基本的に公式ガイドに従っている。
→ https://github.com/gitbucket/gitbucket/wiki/External-database-configuration#postgresql
サーバ動作環境として dockerを使っているが、実サーバ上の稼働でも Webブラウザ上や psqlの操作は変わらない。
GitBucketサーバを組み込みDBで起動
docker run -it --rm --name gitbucket -p 8080:8080 -v `pwd`/gitbucket-data:/gitbucket gitbucket/gitbucket
http://localhost:8080/
にアクセスし、root/root
で Sign in。移行するデータを作るために、ユーザーやグループ、プロジェクト, issueを適当に追加する。
データの export
Webページ右上のメニューから System Administration → Data export/import。エクスポートする項目(基本的に全部でいい)にチェックを入れて Exportボタン。 gitbucket-export-7106966519106537149.sql
といった名前でローカルに保存される。
GitBucketサーバ停止
ここで一旦 GitBucketを停止する。
PostgreSQLサーバ準備
docker run -it --rm --name postgres -p 5432:5432 -v `pwd`/postgres-data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=passwordX postgres:12-alpine
サーバが起動したら、psqlコマンドで postgreSQLサーバに接続し、データベースとユーザーを作成する。ユーザー名、パスワードは適切に設定する。 ユーザー postgresのパスワードも変更したほうがいい。
$ psql -h localhost -p 5432 -U postgres
Password for user postgres:
psql (9.2.24, server 12.5)
WARNING: psql version 9.2, server version 12.0.
Some psql features might not work.
Type "help" for help.
postgres=# create database gitbucket;
CREATE DATABASE
postgres=# create user sa password 'sa';
CREATE ROLE
postgres=#
$
設定が終わったら一旦 postgresサーバを停止する。
GitBucketのデータベース設定変更
gitbucket-data/database.confを編集する。
編集前
db {
url = "jdbc:h2:${DatabaseHome};MVCC=true"
user = "sa"
password = "sa"
}
編集後
db {
url = "jdbc:postgresql://postgres:5432/gitbucket"
user = "sa"
password = "sa"
}
//postgres:5432
の部分は実際に postgreSQLサーバが動作するホスト名とポート番号が入る。ユーザとパスワードは先程 psqlコマンドで設定したもの。
サーバの起動
postgreSQL、gitbubketサーバを順に起動する。がちょっと注意が必要。
(docker環境のみ) ネットワークブリッジの作成
これはサーバを dockerで動かしている場合のみの話だが、dockerコンテナ間で通信を行うためのブリッジを作成する必要がある (→ https://knowledge.sakura.ad.jp/16082/)。
docker network create gitbucket-network
dockerコンテナの起動時に、このネットワークを指定する
postgreSQLサーバの起動
docker run -it --rm --name postgres --network gitbucket-network -p 5432:5432 -v `pwd`/postgres-data:/var/lib/postgresql/data postgres:12-alpine
gitbucketサーバの起動
docker run -it --rm --name gitbucket --network gitbucket-network -p 8080:8080 -v `pwd`/gitbucket-data:/gitbucket gitbucket/gitbucket
gitbucketと postgreSQLが連携できていることを確認する
この時点で gitbucketは postgreSQLサーバと接続し gitbucketデータベースが空であることを認識して、初期状態で起動している。
root/root
でログイン、 System Administration → System settingsを開き、データベースが postgresqlとなっていることを確認する。
データのインポート
最後にデータのインポート。 Data export/import
を開き、画面下部の Importセクションのファイルの選択から、export時にダウンロードしたファイルを指定して緑のimportボタンを押す。
次に Data viewerを開き、以下のSQLを1行ずつ実行する。 psqlコマンドでも可。
SELECT setval('label_label_id_seq', (select max(label_id) + 1 from label));
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));
SELECT setval('priority_priority_id_seq', (select max(priority_id) + 1 from priority));
※ 開発者 takezoeさんの初期記事 ( GitBucketをPostgreSQLやMySQLで動かす )では activityに関する SQLも記載されているが、これはバージョン 4.34.0以降不要になっている。
done
一通り動かして問題がないことを確かめる。