はじめに
新しいSynology NASのOSであるDSM7から、Gitlabパッケージがサポートされなくなったので、かなりのプロジェクトが登録されているGitlabインスタンスのバックアップを取得して、Ubuntu上のDockerイメージに引っ越しをした時のメモです。
Gitlabさえ必要なくなれば、そのままDSM 7にバージョンアップする予定です。
環境
DS916+上のGitlabから、一般的なUbuntu環境に移行しました。
引越し元 (Synology NAS)
- ホスト名: ds916p
- 利用者ID: yasu
- Synology NAS: DS916+
- DSM Version: DSM 6.2.4-25556 Update 2
- Gitlabパッケージ: 13.12.2
- /home/git/data領域の保存先: /volume1/docker/gitlab/gitlab/
引越し先
- Ubuntu 20.04 LTS (x86_64版)
- Docker CE
参考資料
- Synology GitLab Backup and Restore
- Back up and restore GitLab (all-tiers self-managed)
- GitHub - sameersbn/docker-gitlab
事前調査
作業のため、あらかじめ DS916+ でSSH経由でのログインを許可しておき、別システムからSSH経由でログインします。
個人的に利用している環境なので、管理用と一般ユーザーでIDは分けておらず、IDは1つだけ(yasu)しか利用していません。
$ ssh -x -o PreferredAuthentications=password yasu@ds916p
yasu@ds916p:/$ sudo id
Password:
uid=0(root) gid=0(root) groups=0(root),2(daemon),19(log)
sudo を利用して、root権限でコマンドを実行することができることを確認して、Gitlabの状況を確認します。
Synology上のGitlabが稼動するDocker環境の確認
まずコンテナの名前などを確認していきます。
yasu@ds916p:/$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
697bd20839fb sameersbn/gitlab:13.12.2 "/sbin/entrypoint.sh…" 2 months ago Up 5 days 443/tcp, 0.0.0.0:30001->22/tcp, 0.0.0.0:30000->80/tcp synology_gitlab
870bc9e286f6 sameersbn/postgresql:12-20200524 "/sbin/entrypoint.sh" 2 months ago Up 5 days 5432/tcp synology_gitlab_postgresql
919eacf16efe sameersbn/redis:4.0.9-1 "/sbin/entrypoint.sh" 2 months ago Up 5 days 6379/tcp synology_gitlab_redis
次にsynology_gitlabインスタンスの設定などを確認します。
yasu@ds916p:/$ sudo docker exec -it synology_gitlab bash
root@synology_gitlab:/home/git/gitlab#
ここからはdocker内部で設定状況などを確認しつつ、バックアップファイルの取得を目指します。
まず、バックアップ関連の設定を抜粋すると次のようになっています。
## Backup settings
backup:
path: "/home/git/data/backups" # Relative paths are relative to Rails.root (default: tmp/backups/)
archive_permissions: 0600 # Permissions for the resulting backup.tar file (default: 0600)
keep_time: 0 # default: 0 (forever) (in seconds)
pg_schema: # default: nil, it means that all schemas will be backed up
upload:
# Fog storage connection settings, see http://fog.io/storage/ .
現時点では、/home/git/data/backups
にはまだファイルは存在していません。
とりあえず公式ガイドに従って、gitlab-backup
コマンドを実行してみます。
root@synology_gitlab:/home/git/gitlab# type gitlab-backup
bash: type: gitlab-backup: not found
PATH環境変数から検索できる場所にはgitlab-backupコマンドは存在していないようでした。
直接rakeコマンドを実行するために設定ファイルを確認しておきます。
root@synology_gitlab:/home/git/gitlab# more lib/tasks/gitlab/backup.rake
リストアもある程度は自動的に対応してくれそうな雰囲気でした。
次にdfコマンドで/home/git/dataの領域がどこに存在するのか確認しておきます。
root@synology_gitlab:/home/git/gitlab# df -m /home/git/data/backups
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/vg1000/lv 21963334 11123090 10840244 51% /home/git/data
どうもマウントしているボリュームはNASで共有している書き込み可能な領域全体を指しているようです。
実際のデータ使用量を確認しておきます。
root@synology_gitlab:/home/git/gitlab# du -ms /home/git/data/
1508 /home/git/data/
この程度だと様々な制限にひっかかる可能性はなさそうなので、時間はかからずに作業が進められそうです。
作業の開始
だいたい状況が分かったので公式ガイドを参考にしながら作業を進めていきます。
バックアップの取得
まずdockerコンテナ上でバックアップを取得します。公式ガイドのソースコードから導入した場合の手順を参考にします。
root@synology_gitlab:/home/git/gitlab# sudo -u git -H bundle exec rake gitlab:backup:create RAILS_ENV=production
2021-09-15 04:13:27 +0000 -- Dumping database ...
Dumping PostgreSQL database gitlab ... [DONE]
2021-09-15 04:13:41 +0000 -- done
2021-09-15 04:13:41 +0000 -- Dumping repositories ...
* yasu/ansible-setup-opm001 (@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b) ...
* yasu/ansible-setup-opm001 (@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b) ... [DONE]
* yasu/ansible-setup-opm001.wiki (@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.wiki) ...
* yasu/ansible-setup-opm001.wiki (@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.wiki) ... [EMPTY] [SKIPPED]
* yasu/ansible-setup-opm001.design (@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.design) ...
* yasu/ansible-setup-opm001.design (@hashed/6b/86/6b86b273ff34fce19d6b804eff5a3f5747ada4eaa22f1d49c01e52ddb7875b4b.design) ... [EMPTY] [SKIPPED]
2021-09-15 04:15:02 +0000 -- done
2021-09-15 04:15:02 +0000 -- Dumping uploads ...
2021-09-15 04:15:02 +0000 -- done
2021-09-15 04:15:02 +0000 -- Dumping builds ...
2021-09-15 04:15:02 +0000 -- done
2021-09-15 04:15:02 +0000 -- Dumping artifacts ...
2021-09-15 04:15:02 +0000 -- done
2021-09-15 04:15:02 +0000 -- Dumping pages ...
2021-09-15 04:15:02 +0000 -- done
2021-09-15 04:15:02 +0000 -- Dumping lfs objects ...
2021-09-15 04:15:02 +0000 -- done
2021-09-15 04:15:02 +0000 -- Dumping container registry images ...
2021-09-15 04:15:02 +0000 -- [DISABLED]
Creating backup archive: 1631679302_2021_09_15_13.12.2_gitlab_backup.tar ... done
Uploading backup archive to remote storage ... skipped
Deleting tmp directories ... done
done
done
done
done
done
done
done
Deleting old backups ... skipping
Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data
and are not included in this backup. You will need these files to restore a backup.
Please back them up manually.
Backup task is done.
最後の部分で、gitlab.rb と gitlab-secrets.json ファイルの2つがバックアップに含まれていないと警告されていますが、公式ガイドでは実際には /home/git/gitlab/config/ 以下に異なる名前で配置されていることが分かります。
今回はこの領域はdockerコンテナに含まれるため起動のたびに初期化されるため、ここには依存しない形(主に環境変数)でシステムが稼動しています。
そのため、ここでのバックアップは、tarファイルだけを取り扱います。
バックアップファイルの転送
使用している環境では、gitlabコンテナでマウントしている/ home/git/data は /volume1/docker/gitlab/gitlab/ にマッピングされています。転送先のシステムから、sftpコマンドで必要なファイルをバックアップします。
sftpで接続すると、/voluem1/ を / とする環境に入りますので、必要なファイルを取得します。
$ sftp yasu@ds916p
...
sftp> pwd
Remote working directory: /
sftp> get docker/gitlab/gitlab/backups/*
Fetching /docker/gitlab/gitlab/backups/1631679302_2021_09_15_13.12.2_gitlab_backup.tar to 1631679302_2021_09_15_13.12.2_gitlab_backup.tar
/docker/gitlab/gitlab/backups/1631679302_2021_09_15_13.12.2_gitlab_backup.tar 100% 1493MB 49.0MB/s 00:30
ここまでで、とりあえず必要なファイルの取得には成功しました。
sameersbn/gitlab の作者によるバックアップの取得方法について
参考情報にも挙げている作者のページには、バックアップとリストアについて掲載されています。
この中で作者はバックアップの取得についてrunning状態では取得しないように警告しています。
とはいえ、synologyの環境ではGitlabを停止するとPostgreSQLやRedisを含めて停止するため、そのまま実行できそうにはありません。
まずは先の方法で取得したバックアップからリストア可能か確認することにします。
引越し先のマシンでの設定作業
ここから先の作業は、先ほどsftpコマンドを実行した引越し先のホストで行なっていきます。
Gitlabの起動
引越し先のホストではdocker-composeを利用して、待ち受け用のgitlabインスタンスを実行します。
## 適当なディレクトリへ移動
$ mkdir -p ~/sameersbn-gitlab
$ cd ~/sameersbn-gitlab
## docker-compose.yml ファイルの取得
$ wget https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml
## gitlabのバージョンをSynologyと合わせる。(14.2.3 → 13.12.2)
$ sed -i.bak -e 's!sameersbn/gitlab:.*$!sameersbn/gitlab:13.12.2!' docker-compose.yml
## firefox, chromiumなどでは10080ポートに接続ができないので変更する
$ sed -i.bak -e 's!10080:80!80:80!' docker-compose.yml
## 合わせてGITLAB_HOST, GITLAB_PORTを変更します。
$ sed -i.bak -e 's!GITLAB_HOST=.*$!GITLAB_HOST=example.com!' docker-compose.yml
$ sed -i.bak -e 's!GITLAB_PORT=.*$!GITLAB_PORT=80!' docker-compose.yml
## DB接続時のパスワードを適当な乱数に変更します。
$ sed -i.bak -e "s/DB_PASS=.*$/DB_PASS=$(openssl rand -hex 8)/" docker-compose.yml
## Gitlabの起動
$ sudo docker-compose up
dockerコマンドで起動したコンテナの名前などを確認しておきます。
yasu@desktop:~/docker/gitlab$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
NAMES
6bc66ea4cb36 sameersbn/gitlab:13.12.2 "/sbin/entrypoint.sh…" About a minute ago Up About a minute (health: starting) 0.0.0.0:80->80/tcp, :::80->80/tcp, 443/tcp, 0.0.0.0:10022->22/tcp, :::10022->22/tcp gitlab_gitlab_1
410d21e8d667 redis:6.2 "docker-entrypoint.s…" About a minute ago Up About a minute 6379/tcp gitlab_redis_1
e83e71e09977 sameersbn/postgresql:12-20200524 "/sbin/entrypoint.sh" About a minute ago Up About a minute 5432/tcp gitlab_postgresql_1
素の状態でdocker-composeを実行すると、コンテナ内で/home/git/dataにマウントされているディレクトリが分かりにくくなります。
まずはバックアップファイルを配置するためのディレクトリを確認します。
$ sudo docker inspect gitlab_gitlab_1 | grep _data
"Source": "/var/lib/docker/volumes/gitlab_gitlab-data/_data",
/var/lib/docker/volumes/gitlab_gitlab-data/_data に必要なファイルをコピーします。
$ sudo cp *.tar /var/lib/docker/volumes/gitlab_gitlab-data/_data/backups/
$ sudo ls -l /var/lib/docker/volumes/gitlab_gitlab-data/_data/backups/
-rw------- 1 root root 1565429760 Sep 15 15:20 1631679302_2021_09_15_13.12.2_gitlab_backup.tar
## コンテナ内部ではgitユーザーでコマンドを実行するため、パーミッションを出しておきます。
$ sudo chmod 0644 /var/lib/docker/volumes/gitlab_gitlab-data/_data/backups/1631679302_2021_09_15_13.12.2_gitlab_backup.tar
リストアコマンドを実行します。
## あらかじめgitlabを停止させます。必要に応じて別のターミナルから実行します
$ cd ~/sameersbn-gitlab
$ sudo docker-compose down
$ sudo docker-compose run --rm gitlab app:rake gitlab:backup:restore
Starting gitlab_postgresql_1 ... done
Starting gitlab_redis_1 ... done
...
gitlab_extensions:sshd: stopped
gitlab_extensions:cron: stopped
gitlab:gitlab-workhorse: stopped
gitlab:puma: stopped
‣ 1631679302_2021_09_15_13.12.2_gitlab_backup.tar (created at 15 Sep, 2021 - 09:45:02 IST)
Select a backup to restore: 1631679302_2021_09_15_13.12.2_gitlab_backup.tar
Running raketask gitlab:backup:restore...
Unpacking backup ... done
Be sure to stop Puma, Sidekiq, and any other process that
connects to the database before proceeding. For Omnibus
installs, see the following link for more information:
https://docs.gitlab.com/ee/raketasks/backup_restore.html#restore-for-omnibus-gitlab-installations
Before restoring the database, we will remove all existing
tables to avoid future upgrade problems. Be aware that if you have
custom tables in the GitLab database these tables and all data will be
removed.
Do you want to continue (yes/no)? yes
...
2021-09-15 12:01:10 +0530 -- Restoring lfs objects ...
2021-09-15 12:01:10 +0530 -- done
This task will now rebuild the authorized_keys file.
You will lose any data stored in the authorized_keys file.
Do you want to continue (yes/no)? yes
Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data
and are not included in this backup. You will need to restore these files manually.
Restore task is done.
私の環境では、およそ2分ほどで作業が終わりました。
"Restore task is done."のメッセージを確認し、この状態でdockerを起動し、動作を確認します。
$ sudo docker-compose up
最新バージョンへの変更
おおよそ正しく動いたことが確認できたタイミングで、13.12.2に書き換えたコンテナのタグ(バージョン)を、最新版(14.2.3)に変更しておきます。
ただし、いきなり14.2.3に上げた時には次のようなメッセージが出力され、正常に稼動しませんでした。
Missing Rails.application.secrets.openid_connect_signing_key for production environment. The secret will be generated and stored in config/secrets.yml.
gitlab_1 | rake aborted!
gitlab_1 | StandardError: An error has occurred, all later migrations canceled:
gitlab_1 |
gitlab_1 | Expected batched background migration for the given configuration to be marked as 'finished', but it is 'active': {:job_class_name=>"CopyColumnUsingBackgroundMigrationJob", :table_name=>"ci_stages", :column_name=>"id", :job_arguments=>[["id"], ["id_convert_to_bigint"]]}
gitlab_1 |
gitlab_1 | Finalize it manualy by running
gitlab_1 |
gitlab_1 | sudo gitlab-rake gitlab:background_migrations:finalize[CopyColumnUsingBackgroundMigrationJob,ci_stages,id,'[["id"]\, ["id_convert_to_bigint"]]']
gitlab_1 |
gitlab_1 | For more information, check the documentation
gitlab_1 |
gitlab_1 | https://docs.gitlab.com/ee/user/admin_area/monitoring/background_migrations.html#database-migrations-failing-because-of-batched-background-migration-not-finished
【2024/2/16追記】GitLabの公式ドキュメントを参照すると、13.12.2から14系列の最新にするアップグレードパスは、14.0.12 > 14.3.6 > 14.9.5 > 14.10.5 となっています。以下では14.1.0を経由していますが、v13の最新版を経由してこの公式サイトに掲載されている順番でアップグレードしてください。
このメッセージに含まれるWebページを確認すると、14.1.xにして該当のジョブが終了するまで待つか、コマンドを入力してステータスを変更しろとあるので次のように、一度14.1.0を経由して、最新版の14.2.3に更新しました。
## コンテナの停止
$ sudo docker-compose down
## docker-compose.ymlファイルの編集
$ sed -i.bak -e 's!sameersbn/gitlab:.*$!sameersbn/gitlab:14.1.0!' docker-compose.yml
## コンテナの起動
$ sudo docker-compose up
## Webブラウザから、rootユーザーでログインし、Admin → Monitoring → Background Migrations に進み、ジョブの完了を待つ (約20分)
## バージョンを14.2.x以降に変更し、再度停止、起動する。
$ sed -i.bak -e 's!sameersbn/gitlab:.*$!sameersbn/gitlab:14.2.3!' docker-compose.yml
$ sudo docker-compose down
$ sudo docker-compose up -d
最後の'-d'オプションで、バックグラウンドで起動します。
以上で作業は完了です。
その他の設定について
Web UI接続のためのポート番号の変更
SSHサーバーへの接続をSynologyでのGitlabと同様に 30001 に変更したいという場合には、ports設定の他に、GITLAB_SSH_PORTのような環境変数も合わせて変更する必要があります。
タイムゾーンの変更
デフォルトの docker-compose.yml ファイルでは、Asia/Kolkata (+5:30) が設定されているので、Asia/Tokyoに変更しておきます。
既存リポジトリの設定変更
Synology NASでは、SSH経由でのアクセスに30001番ポートを利用していました。
これが10022などに変更されているため、既存のリポジトリは、~/.git/config ファイルを変更し、url = 行を変更する必要があります。
既に配置している作業用リポジトリの設定変更
作業用に特定のディレクトリに、このGitLabを利用するディレクトリが存在しています。
一括して変更した際の作業ログを残しておきます。
.git/config ファイルの変更
一括で設定を変更するために次のようなワンライナーを実行しています。
"ds916p.example.com"が元のホスト名、"mygitlab.example.com"が移行先のホスト名です。
$ find . -type f -path "*/.git/config" | while read file ; do sed -i.bak.$(date +'%Y%m%d.%H%M%S') -e '/url/s/ds916p.example.com/mygitlab.example.com/' -e '/url/s/:30001/:10022/' $file ; done
バックアップの定期的な取得
Synologyの場合はシステムの機能でバックアップを取得していました。
今回利用した sameersbn/docker-gitlab は、Synologyと同じDockerイメージですが、デフォルトで日毎のバックアップ取得が設定されています。
- GITLAB_BACKUP_SCHEDULE=daily
- GITLAB_BACKUP_TIME=01:00
docker-composeが準備した領域をみると、翌日にはバックアップが午前1時に取得されていました。
$ sudo ls -ltr /var/lib/docker/volumes/gitlab_gitlab-data/_data/backups
total 3057632
-rw-r--r-- 1 root root 1565429760 Sep 15 17:59 1631679302_2021_09_15_13.12.2_gitlab_backup.tar
drwx------ 7 yasu yasu 4096 Sep 15 18:10 tmp
-rw------- 1 yasu yasu 1565573120 Sep 16 01:00 1631721635_2021_09_16_14.2.3_gitlab_backup.tar
$ sudo ls -ltr /var/lib/docker/volumes/gitlab_gitlab-data/_data/backups/tmp/
total 20
drwx------ 2 yasu yasu 4096 Sep 15 18:10 uploads.1631697033
drwx------ 2 yasu yasu 4096 Sep 15 18:10 builds.1631697033
drwx------ 2 yasu yasu 4096 Sep 15 18:10 artifacts.1631697033
drwx------ 2 yasu yasu 4096 Sep 15 18:10 pages.1631697033
drwx------ 2 yasu yasu 4096 Sep 15 18:10 lfs.1631697033
docker-compose.yml ファイルの差分
全体の差分は以下のようになっています。
--- docker-compose.yml.orig 2021-09-16 16:05:07.141632691 +0900
+++ docker-compose.yml 2021-09-15 18:33:24.244059280 +0900
@@ -16,7 +16,7 @@
- postgresql-data:/var/lib/postgresql:Z
environment:
- DB_USER=gitlab
- - DB_PASS=password
+ - DB_PASS=774bc0d5d4dd3545
- DB_NAME=gitlabhq_production
- DB_EXTENSION=pg_trgm,btree_gist
@@ -27,7 +27,7 @@
- redis
- postgresql
ports:
- - "10080:80"
+ - "80:80"
- "10022:22"
volumes:
- gitlab-data:/home/git/data:Z
@@ -44,20 +44,20 @@
- DB_HOST=postgresql
- DB_PORT=5432
- DB_USER=gitlab
- - DB_PASS=password
+ - DB_PASS=774bc0d5d4dd3545
- DB_NAME=gitlabhq_production
- REDIS_HOST=redis
- REDIS_PORT=6379
- - TZ=Asia/Kolkata
- - GITLAB_TIMEZONE=Kolkata
+ - TZ=Asia/Tokyo
+ - GITLAB_TIMEZONE=Tokyo
- GITLAB_HTTPS=false
- SSL_SELF_SIGNED=false
- - GITLAB_HOST=localhost
- - GITLAB_PORT=10080
+ - GITLAB_HOST=mygitlab.example.com
+ - GITLAB_PORT=80
- GITLAB_SSH_PORT=10022
- GITLAB_RELATIVE_URL_ROOT=
- GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string
まとめ
Synology NASのパッケージとして配布されていたGitlabであれば、事前に確認し、更新ミスなどが発生しにくいだろうと考えて利用していました。
実際にSynology NASはめったに停止しないため、この上で動作するサービスはとても便利でした。
今回は、とりあえずXubuntu Desktopとして利用している環境に引越しをしたので、以前よりは頻繁に再起動などが発生しそうです。
最終的には、Kubernetesクラスターに引越しすることを想定する必要がありそうです。
Gitlab公式のOperatorはOpenShift環境での稼動を前提としているようだったので、躊躇していました。
今回利用した sameersbn/docker-gitlab の環境はとても便利そうで、Kubernetesに対応した設定ファイルも含まれているので、docker-compose.ymlファイルを確認しても、簡単にk8s環境で動かすことができそうです。
Synology NASに入って、詳細に設定ファイルなどを確認しましたが、データベースへの接続に利用しているID,パスワードがデフォルトのままだったり、致命的ではないものの本格的に利用するためには修正した方が良い設定が発見できました。
GitLabインスタンスの引越しは、稼動確認が十分に行なえないので、できれば避けたいところです。
いくつかのサンプルを抽出し、.git/config ファイルの url = 行を変更し、問題なく動くことを確認しました。
その後 - Docker Desktop環境への移行
ユーザー環境が多様になりamd64なホストOS上でもARM版のコンテナ・イメージもbuildする必要が出てきました。このため、docker-ce-cli環境から、docker-desktop環境へ移行しました。
いままではホストOS上の/var/lib/dockerをみていれば良かったのですが、docker-desktopではdockerのホストOSがQEMUのVMへ変更されているため、docker-desktop版ではいままでのvolumesを引き継ぐことができませんし、gitlabのバックアップイメージも直接コピーすることができません。
微妙な違いを除けば、基本的には、ここに書いた手順でリストアは完了しましたが、今後はgitlabのバックアップイメージがVM上に保存されることになるため、docker cpなどで定期的に取り出して、NASなどにバックアップすることが必要になります。
ちょうど良い機会だったので、バックアップイメージを/var/lib/docker以下にcpしていた部分は、docker cpコマンドで置き換えるなどの変更を反映させたログを残しておくことにします。
docker-compose.ymlファイルは同一ホストなので、そのまま残っています。
Docker-Desktopの導入
docker-desktopの導入は公式ガイドに従って実施する必要があります。またdocker-composeコマンドは削除する必要があります。
## kvmグループに自身を追加するなど、公式ガイドに従って手順を実行していく
$ sudo apt-get install ./Downloads/docker-desktop-4.10.1-amd64.deb
$ sudo rm /usr/local/bin/docker-compose
$ sudo apt install docker-compose-plugin
systemctl管理下にあるdocker.serviceなどはmaskされ、起動することはできなくなりますが、/var/lib/dockerが消えるわけではないので心配するほどではないかなと思います。
それでも、いろいろdockerコマンドが動かなくなるなど、問題が発生して、一度は、docker-ce-cilパッケージをdocker-desktopは残したまま再インストールしたり、いつの間にかuninstallされていた、docker-desktopを再導入したりと、問題は発生しています。
リストアの実行
docker-desktopではcompose-pluginを利用しているので、docker-composeコマンドの代りに、docker composeを使用しています。
$ ls
docker-compose.yml
$ docker compose up
...
起動したら、/var/lib/以下のファイルをcpします。
## コンテナ名(NAME)を指定して/home/git/data/backupsにファイルをコピーする
$ docker cp /var/lib/docker/volumes/gitlab_gitlab-data/_data/backups/1658678452_2022_07_25_14.2.3_gitlab_backup.tar gitlab-gitlab-1:/home/git/data/backups/
↑で指定するtarファイルは存在するものに変更してください。
ここからリストアするコマンドは、ほぼ同一です。
$ docker compose down
$ docker compose run --rm gitlab app:rake gitlab:backup:restore
リストアタスクの中では、どのtarファイルから復元するか、間違いを避けるためにtarファイルを削除して良いか、などの質問がありますが、基本的にファイル名や'yes'を回答して進めていきます。
バックアップファイルの扱い
新しくdocker-desktop環境内でgitlabが動作するようになると、次に問題になるのは、バックアップファイルの保存です。また似たような状況になった時のために、gitlabのバックアップは定期的に取得するだけでなく、安全な場所に保存することが必要です。
実際には次のようなスクリプトで最新の2つだけを取得するようにしています。
#!/bin/bash
DOCKER_GITLAB_NAME="gitlab-gitlab-1"
DOCKER_GITLAB_BACKUP_DIRPATH="/home/git/data/backups"
BACKUP_DEST_DIR="/backup/gitlab"
docker exec -it "${DOCKER_GITLAB_NAME}" ls ${DOCKER_GITLAB_BACKUP_DIRPATH} | grep _gitlab_backup.tar | sort -n | tail -2 | sed
-e 's/\r//g' | while read backup
do
docker cp "${DOCKER_GITLAB_NAME}:${DOCKER_GITLAB_BACKUP_DIRPATH}/${backup}" "${BACKUP_DEST_DIR}"
done
バックアップファイルの数は、また別のスクリプトで定期的に削除しています。
以上