4
4

More than 3 years have passed since last update.

GitBucketのデータベースを postgreSQLに移行する

Last updated at Posted at 2021-01-02

想定する読者

これまで 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となっていることを確認する。

image.png

データのインポート

最後にデータのインポート。 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

一通り動かして問題がないことを確かめる。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4