First version
This commit is contained in:
		
						commit
						723f59a024
					
				
							
								
								
									
										4
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								Dockerfile
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
			
		||||
FROM custom/backup:0.0.1
 | 
			
		||||
ADD entrypoint.sh /
 | 
			
		||||
Add backup.sh /
 | 
			
		||||
ENTRYPOINT ["/entrypoint.sh"]
 | 
			
		||||
							
								
								
									
										93
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								README.md
									
									
									
									
									
										Normal file
									
								
							@ -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
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										59
									
								
								backup.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										59
									
								
								backup.sh
									
									
									
									
									
										Executable file
									
								
							@ -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."
 | 
			
		||||
							
								
								
									
										2
									
								
								baseimage/Dockerfile
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								baseimage/Dockerfile
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
			
		||||
FROM alpine:latest
 | 
			
		||||
RUN apk add samba-dc tzdata
 | 
			
		||||
							
								
								
									
										3
									
								
								baseimage/mkbaseimage.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								baseimage/mkbaseimage.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
cd $(dirname ${0})
 | 
			
		||||
docker build -t custom/backup:0.0.1 -f $PWD/Dockerfile .
 | 
			
		||||
							
								
								
									
										6
									
								
								do-backup.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										6
									
								
								do-backup.sh
									
									
									
									
									
										Executable file
									
								
							@ -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
 | 
			
		||||
							
								
								
									
										57
									
								
								docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								docker-compose.yml
									
									
									
									
									
										Normal file
									
								
							@ -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
 | 
			
		||||
							
								
								
									
										23
									
								
								entrypoint.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										23
									
								
								entrypoint.sh
									
									
									
									
									
										Executable file
									
								
							@ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user