commit
723f59a024
|
@ -0,0 +1,4 @@
|
||||||
|
FROM custom/backup:0.0.1
|
||||||
|
ADD entrypoint.sh /
|
||||||
|
Add backup.sh /
|
||||||
|
ENTRYPOINT ["/entrypoint.sh"]
|
|
@ -0,0 +1,93 @@
|
||||||
|
# hogedomain backup
|
||||||
|
|
||||||
|
## 概要
|
||||||
|
|
||||||
|
ホームラボのサーバーで稼働している3システムのボリュームをバックアップする。
|
||||||
|
操作ミスでボリュームが削除されないよう、バックアップ用のコンテナを削除しない。
|
||||||
|
|
||||||
|
ホームラボのサーバーをバックアップすることを目的としており、汎用的にできていない。
|
||||||
|
雑なバックアップをする際のテンプレート&やり方メモ。
|
||||||
|
(名前のhdは、HOGEDOMAINの略称)
|
||||||
|
|
||||||
|
## 構築方法
|
||||||
|
|
||||||
|
### ダウンロード
|
||||||
|
|
||||||
|
このリポジトリからダウンロードする。
|
||||||
|
|
||||||
|
```
|
||||||
|
git clone https://gitea.rohhie.net/rohhie/hd-backup.git
|
||||||
|
cd hd-backup
|
||||||
|
```
|
||||||
|
|
||||||
|
### ベースとなるイメージを作成
|
||||||
|
|
||||||
|
バックアップコンテナのベースとなるイメージを作成する。
|
||||||
|
スクリプトの修正等でコンテナを作り直す際に、最低限のダウンロードで済ませるため。
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo baseimage/mkbaseimage.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
なお、ベースイメージにはSambaをインストールしている。
|
||||||
|
sysvolディレクトリの拡張属性をバックアップするためなので、不要な場合はapk addのところから削除する。
|
||||||
|
|
||||||
|
### バックアップ対象のボリュームを設定
|
||||||
|
|
||||||
|
docker-compose.ymlを編集し、バックアップ対象のボリュームを設定する。
|
||||||
|
|
||||||
|
コンテナ内の/tmp配下にマウントしているが、このディレクトリは存在しなければ作られる。
|
||||||
|
ただし、バックアップでsambaの機能(拡張属性の取得)を使うため、/etc/sambaと/var/lib/sambaは所定の場所にマウントしている。
|
||||||
|
|
||||||
|
バックアップ先は、ホストの/var/backupsにしている。
|
||||||
|
|
||||||
|
### バックアップスクリプトを修正
|
||||||
|
|
||||||
|
ホームラボでバックアップしたいボリュームを固める処理を書いている。
|
||||||
|
sysvolについては、拡張属性を取り出して、復元用のスクリプトを作成している。
|
||||||
|
|
||||||
|
バックアップ対象のボリュームにあわせて、バックアップスクリプトを修正する。
|
||||||
|
|
||||||
|
### バックアップ実行スクリプトを修正
|
||||||
|
|
||||||
|
バックアップ対象のコンテナを停止し、バックアップを実行し、コンテナを起動する。
|
||||||
|
3システム(5コンテナ)を停止・起動しているが、必要に応じて修正する。
|
||||||
|
|
||||||
|
## 使い方
|
||||||
|
|
||||||
|
バックアップ実行スクリプトを実行する。
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo ./do-backup.sh
|
||||||
|
```
|
||||||
|
|
||||||
|
環境によっては、クーロンに登録しても良いと思われる。
|
||||||
|
ホームラボでは、サーバーが常時動いていないので、手動で実行することにしている。
|
||||||
|
|
||||||
|
## リストア
|
||||||
|
|
||||||
|
リストアする際には、バックアップスクリプトが動作しないように docker-compose.yml を変更する。
|
||||||
|
|
||||||
|
```
|
||||||
|
DO_BACKUP: "false"
|
||||||
|
```
|
||||||
|
|
||||||
|
設定変更後、コンテナを起動し、コンテナの中でリストア操作をする。
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo docker compose up -d
|
||||||
|
sudo docker exec -it backup ash --login
|
||||||
|
```
|
||||||
|
|
||||||
|
Samba ad dcについては拡張属性設定スクリプトを用意しているので、復元後に実行しておく。
|
||||||
|
var/lib/samba/NTACL
|
||||||
|
|
||||||
|
## その他
|
||||||
|
|
||||||
|
詳細はメインサイト参照。
|
||||||
|
https://rohhie.net/back-up-the-docker-volume/
|
||||||
|
|
||||||
|
## ライセンス
|
||||||
|
|
||||||
|
MIT
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
#!/bin/ash
|
||||||
|
echo "Start backup."
|
||||||
|
|
||||||
|
# Create backup file name.
|
||||||
|
TMP_TARGET=/mnt/backups/backup-$(hostname)-$(date +'%Y-%m-%d-%H-%M-%S').tar
|
||||||
|
echo $TMP_TARGET
|
||||||
|
|
||||||
|
#
|
||||||
|
# Samba
|
||||||
|
#
|
||||||
|
echo "Samba"
|
||||||
|
echo "Create NTACL file."
|
||||||
|
cd /var/lib/samba
|
||||||
|
find ./sysvol -exec ash -c 'TMP=$(samba-tool ntacl get "{}" --as-sddl); echo "samba-tool ntacl set \"$TMP\" \"{}\""' \; > NTACL
|
||||||
|
|
||||||
|
echo "Create tarball."
|
||||||
|
cd /
|
||||||
|
tar -cf $TMP_TARGET.1 \
|
||||||
|
etc/samba etc/bind \
|
||||||
|
var/lib/samba/private var/lib/samba/sysvol var/lib/samba/NTACL var/lib/samba/bind-dns \
|
||||||
|
var/lib/bind \
|
||||||
|
var/lib/ldap-account-manager
|
||||||
|
rm var/lib/samba/NTACL
|
||||||
|
|
||||||
|
#
|
||||||
|
# Kopano
|
||||||
|
#
|
||||||
|
echo "Kopano"
|
||||||
|
echo "Create tarball"
|
||||||
|
cd /tmp
|
||||||
|
tar -cf $TMP_TARGET.2 \
|
||||||
|
kopano/var/lib/kopano/attachments \
|
||||||
|
kopano/var/lib/mysql
|
||||||
|
|
||||||
|
#
|
||||||
|
# Gitea
|
||||||
|
#
|
||||||
|
echo "Gitea"
|
||||||
|
echo "Create tarball"
|
||||||
|
cd /tmp
|
||||||
|
tar -cf $TMP_TARGET.3 \
|
||||||
|
gitea/data \
|
||||||
|
gitea/var/lib/mysql
|
||||||
|
|
||||||
|
#
|
||||||
|
# merge tarball.
|
||||||
|
#
|
||||||
|
echo -n "Merging "
|
||||||
|
echo -n "."; head -c -$((512*2)) $TMP_TARGET.1 > $TMP_TARGET
|
||||||
|
echo -n "."; head -c -$((512*2)) $TMP_TARGET.2 >> $TMP_TARGET
|
||||||
|
echo -n "."; head -c -$((512*2)) $TMP_TARGET.3 >> $TMP_TARGET
|
||||||
|
rm $TMP_TARGET.1 $TMP_TARGET.2 $TMP_TARGET.3
|
||||||
|
echo "Done."
|
||||||
|
|
||||||
|
echo "Archiving."
|
||||||
|
gzip $TMP_TARGET
|
||||||
|
|
||||||
|
# Finish.
|
||||||
|
echo "Backup completed."
|
|
@ -0,0 +1,2 @@
|
||||||
|
FROM alpine:latest
|
||||||
|
RUN apk add samba-dc tzdata
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/bash
|
||||||
|
cd $(dirname ${0})
|
||||||
|
docker build -t custom/backup:0.0.1 -f $PWD/Dockerfile .
|
|
@ -0,0 +1,6 @@
|
||||||
|
#!/bin/bash
|
||||||
|
cd $(dirname ${0})
|
||||||
|
docker container stop gitea gitea_db kopano kopano_db samba
|
||||||
|
docker compose up --build
|
||||||
|
#docker compose down
|
||||||
|
docker container start samba kopano_db kopano gitea_db gitea
|
|
@ -0,0 +1,57 @@
|
||||||
|
version: "3.9"
|
||||||
|
services:
|
||||||
|
|
||||||
|
backup:
|
||||||
|
build: ./
|
||||||
|
image: custom/backup:1.0.0
|
||||||
|
container_name: backup
|
||||||
|
restart: "no"
|
||||||
|
environment:
|
||||||
|
TZ: Asia/Tokyo
|
||||||
|
DO_BACKUP: "true"
|
||||||
|
hostname: hogedomain
|
||||||
|
volumes:
|
||||||
|
# Samba ad dc
|
||||||
|
- samba_etc:/etc/samba
|
||||||
|
- samba_lib:/var/lib/samba
|
||||||
|
- bind_etc:/etc/bind
|
||||||
|
- bind_lib:/var/lib/bind
|
||||||
|
- lam:/var/lib/ldap-account-manager
|
||||||
|
# Kopano
|
||||||
|
- kopano:/tmp/kopano/var/lib/kopano/attachments
|
||||||
|
- kopano_db:/tmp/kopano/var/lib/mysql
|
||||||
|
# Gitea
|
||||||
|
- gitea:/tmp/gitea/data
|
||||||
|
- /home/git/.ssh:/tmp/gitea/data/git/.ssh
|
||||||
|
- gitea_db:/tmp/gitea/var/lib/mysql
|
||||||
|
# Backup directory
|
||||||
|
- /var/backups:/mnt/backups
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
bind_etc:
|
||||||
|
name: samba_bind_etc
|
||||||
|
external: true
|
||||||
|
bind_lib:
|
||||||
|
name: samba_bind_lib
|
||||||
|
external: true
|
||||||
|
lam:
|
||||||
|
name: samba_lam
|
||||||
|
external: true
|
||||||
|
samba_etc:
|
||||||
|
name: samba_samba_etc
|
||||||
|
external: true
|
||||||
|
samba_lib:
|
||||||
|
name: samba_samba_lib
|
||||||
|
external: true
|
||||||
|
kopano:
|
||||||
|
name: kopano_kopano
|
||||||
|
external: true
|
||||||
|
kopano_db:
|
||||||
|
name: kopano_kopano_db
|
||||||
|
external: true
|
||||||
|
gitea:
|
||||||
|
name: gitea_gitea
|
||||||
|
external: true
|
||||||
|
gitea_db:
|
||||||
|
name: gitea_mysql
|
||||||
|
external: true
|
|
@ -0,0 +1,23 @@
|
||||||
|
#!/bin/ash
|
||||||
|
|
||||||
|
echo "Start container with parameter : $@"
|
||||||
|
|
||||||
|
trap sig_term SIGTERM
|
||||||
|
|
||||||
|
sig_term() {
|
||||||
|
echo "CATCH SIGTERM"
|
||||||
|
wait
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Execute paramater.
|
||||||
|
exec "$@"
|
||||||
|
|
||||||
|
if [[ $DO_BACKUP == "true" ]]; then
|
||||||
|
exec /backup.sh
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Infinity roop.
|
||||||
|
while : ; do sleep 1 ; done
|
||||||
|
|
Loading…
Reference in New Issue