gitlab のバックアップ・リストア+ダウングレード・失敗リカバリ
gitlab のバックアップ
sudo gitlab-ctl backup-etc sudo gitlab-backup create
gitlab のデータ
omnibus gitlab は次の場所にデータを持っている。 - /var/opt/gitlab - /var/log/gitlab - /opt/gitlab - /etc/gitlab
パス | 内容 |
---|---|
/var/opt/gitlab | gitlabのデータ |
/var/opt/gitlab/postgresql | gitlabのデータベース |
/var/opt/gitlab/git-data | gitレポジトリ |
/opt/gitlab | gitlab自体のソース |
/etc/gitlab/gitlab-secrets.json | 暗号化キー |
/etc/gitlab/gitlab.rb | 設定 |
/var/log | ログ関連 |
gitlabのデータ は、レポジトリ・PostgreSQLデータベース、redis 、バックアップ、 LFSなど、ユーザーデータが入ってる。
バックアップは暗号化、/etc/gitlab が必要
データベースなどgitlabのデータは暗号化されている。
バックアップも、暗号化された状態が取得されるので、読込には/etc/gitlab
にある暗号化キーが必要になる。
暗号化キーは重要
バックアップ:フル
専用コマンドを使う
sudo gitlab-backup create
バックアップに名前を付ける
sudo gitlab-backup create BACKUP=dump
バックアップ:自動生成
バックアップは自動生成されることがある。 バックアップの名前は、次のようになっていた。
# タイムスタンプ・日付・gitlabバージョン 1661923506_2022_08_31_15.3.1_gitlab_backup.tar 1661893331_2022_08_31_15.2.2_gitlab_backup.tar
バージョンアップ時など自動バックアップが取られることがある。 自動バックアップはデータベースについて取られる。
レポジトリなどの「git」に関するファイルはバージョンが取られてない。
自動バックアップはレポジトリがなかったりするので、過信は油断と同じ。
次の出力は、私のGitlabのバックアップのいちんだが、ファイルサイズが小さいものが、アップデートに取得されたものである。
ファイルサイズが小さいものをよく見ると、時刻がだいたい近く、同じバージョン名のものがない。 これは、自動アップデートでDBアップデート処理されたタイミングであることを如実に示している。
takuya@:~$ sudo ls -l /var/opt/gitlab/backups/ 合計 4644540 -rw------- 1 git git 1034240 2月 26 2022 1645825437_2022_02_26_14.8.0_gitlab_backup.tar -rw------- 1 git git 1034240 2月 28 2022 1645997098_2022_02_28_14.8.1_gitlab_backup.tar -rw------- 1 git git 1044480 4月 6 06:58 1649195886_2022_04_06_14.8.2_gitlab_backup.tar -rw------- 1 git git 1105920 4月 13 06:32 1649799169_2022_04_13_14.9.2_gitlab_backup.tar -rw------- 1 git git 1105920 4月 23 06:52 1650664328_2022_04_23_14.9.3_gitlab_backup.tar -rw------- 1 git git 1116160 5月 4 06:15 1651612499_2022_05_04_14.10.0_gitlab_backup.tar -rw------- 1 git git 1116160 5月 7 06:18 1651871897_2022_05_07_14.10.1_gitlab_backup.tar -rw------- 1 git git 1116160 5月 21 06:34 1653082489_2022_05_21_14.10.2_gitlab_backup.tar -rw------- 1 git git 1116160 5月 24 06:09 1653340166_2022_05_24_14.10.3_gitlab_backup.tar -rw------- 1 git git 1126400 6月 2 06:50 1654120235_2022_06_02_15.0.0_gitlab_backup.tar -rw------- 1 git git 1126400 6月 7 06:52 1654552318_2022_06_07_15.0.1_gitlab_backup.tar -rw------- 1 git git 1126400 6月 18 06:07 1655500031_2022_06_18_15.0.2_gitlab_backup.tar -rw------- 1 git git 2364784640 6月 23 01:59 1655916823_2022_06_23_15.0.3_gitlab_backup.tar -rw------- 1 git git 1126400 6月 23 23:33 1655994833_2022_06_23_15.0.3_gitlab_backup.tar -rw------- 1 git git 1136640 6月 24 16:38 1656056322_2022_06_24_15.1.0_gitlab_backup.tar -rw------- 1 git git 1157120 7月 2 06:09 1656709755_2022_07_02_15.1.0_gitlab_backup.tar -rw------- 1 git git 1157120 7月 7 06:12 1657141951_2022_07_07_15.1.1_gitlab_backup.tar -rw------- 1 git git 1167360 7月 20 15:55 1658300112_2022_07_20_15.1.2_gitlab_backup.tar -rw------- 1 git git 1177600 7月 23 06:39 1658525990_2022_07_23_15.1.3_gitlab_backup.tar -rw------- 1 git git 1198080 7月 30 06:55 1659131714_2022_07_30_15.2.0_gitlab_backup.tar -rw------- 1 git git 1198080 8月 2 06:50 1659390611_2022_08_02_15.2.1_gitlab_backup.tar -rw------- 1 git git 1239040 8月 24 06:34 1661290448_2022_08_24_15.2.2_gitlab_backup.tar -rw------- 1 git git 1239040 8月 31 06:02 1661893331_2022_08_31_15.2.2_gitlab_backup.tar -rw------- 1 git git 1239040 8月 31 14:25 1661923506_2022_08_31_15.3.1_gitlab_backup.tar -rw------- 1 git git 2364989440 9月 2 14:45 1662097438_2022_09_02_15.3.2_gitlab_backup.tar
リストア
バックアップを指定の位置に配置して、リストアコマンド
sudo gitlab-backup restore BACKUP=$NAME
$NAME
のところには、バックアップの名前を付ける。
バックアップは次の箇所にある。
sudo ls -l /var/opt/gitlab/backups/
バックアップの名前は、次のようになっていた。
# タイムスタンプ・日付・gitlabバージョン 1661923506_2022_08_31_15.3.1_gitlab_backup.tar 1661893331_2022_08_31_15.2.2_gitlab_backup.tar
ただし、バージョンが合わないと、だめ。 バージョンを合わせるためにため、ダウングレードが必要
15.2.2 が必要な例
1661893331_2022_08_31_15.2.2_gitlab_backup.tar
ダウングレード
apt でやる。
sudo apt remove gitlab sudo apt install gitlab-ce=15.2.2-ce.0 sudo gitlab-ctl reconfigure
https://docs.gitlab.com/ee/update/package/downgrade.html
うっかりpurgeしてしまうと、暗号化キーやレポジトリも消えちゃうかもしれないので注意
ダウングレードの失敗リストアの失敗は、データベースが新しくなってて戻らないことが原因だと思う。
ダウングレード+リストア
データベースを削除するのが確実
DBだけのバックアップがあれば、DBだけ戻せる。
sudo ls -l /var/opt/gitlab/postgoresql/ sudo mv /var/opt/gitlab/postgoresql{,.bak} sudo gitlab-ctl reconfigure sudo gitlab-ctl restore BACKUP=DB_BACKUP
DBバックアップは、バージョンアップ時に、自動バックアップで生成されてる。
リストアの失敗
リストアが失敗した場合
ダウングレード+リストアを行う。
データベースを削除して新規インストール、暗号化キー(/etc/gitlab
)を配置して reconfigure
gitのレポジトリ自体も暗号化されているが、データ自体は、リストアにはあまり関係がないので、そのまま。
レポジトリ全体をバックアップ
/var/opt/gitlab/git-data
にレポジトリはある。
でも、暗号化されたデータをバックアップしても使えない。暗号化キーとセットでコマンドを使う。
gitaly-backupを設定しておけば、レポジトリをバックアップを取っておける。
マニュアルでバックアップしたい
データを取得して、バージョンをあわせてリストア。これでいちおうは問題なさそうですよね。実際試してみたが、それで動いたわ。 ただ、Gitlabの仕様変更で今後もこの手段で行けるとは限らない。
バックアップ
sudo rsync -av /var/log/gitlab/ my_gitlab-var-log/ sudo rsync -av /var/opt/gitlab/ my_gitlab-var-opt/ sudo rsync -av /etc/gitlab/ my_gitlab-etc/ sudo rsync -av /opt/gitlab/ my_gitlab-opt/
初回インストール / gitlab の初回インストール
multipass launch sample01 -d 20G
sudo apt update && sudo apt upgrade -y sudo apt-get install -y curl openssh-server ca-certificates tzdata perl
sudo locale-gen --purge "ja_JP.UTF-8" sudo dpkg-reconfigure --frontend noninteractive locales
sudo apt-get install -y curl openssh-server ca-certificates tzdata perl && \ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash && \ sudo apt-get install gitlab-ce
書き戻し
## 同じバージョンのgitlabを入れる sudo apt install gitlab-ce=15.2.2-ce.0 ## データ戻し sudo rsync -av my_gitlab-var-log/ /var/log/gitlab/ sudo rsync -av my_gitlab-var-opt/ /var/opt/gitlab/ sudo rsync -av my_gitlab-etc/ /etc/gitlab/ sudo rsync -av my_gitlab-opt/ /opt/gitlab/ sudo gitlab-ctl reconfigure
書き戻し二失敗した場合は、いったん別ホストでRestoreを試す。
容量に注意
バックアップは、けっこうな量になる。
個人的な見解
github は強すぎるので、競合はもっと頑張ってほしいと思う。
バックアップが壊れたとき、ユーザーやIssueは諦めてるとしても、ソースコードだけは、バックアップ取ってきたいと思う。暗号化されているので、その点だけには注意したいと思います。
ソースコードのバックアップのためにGitlabを使っている場合、Gitlabは多機能すぎるので、他のソフトウェア(gogs / gitea ) を使ってもいいかもしれないし、ベアレポジトリを選択してもいいと思う。そのgithub/gitlab 本当に必要ですか。バックアップのためのGitlabで、さらにバックアップが煩雑になるのはちょっと違う気がするのです。
小規模事業者なら、mattermost やOAuthプロバイダとして動作するので、Gitlabは特に優秀。ただソースコードを保管したい閲覧したい目的だとGitlabはヘビィすぎる気もする。Gogsでいいんじゃないかと思ってきた。