Ghost 블로그 데이터 자동백업

다음과 같은 절차로 설정

  1. 블로그 서버 root 계정과 타켓 백업 서버에 패스워드 없이 접속 가능하게 설정
  2. tar 수동 백업 스크립트 작성
  3. root 유저의 crontab에 bash 스크립트 실행 설정

docker로 구동하는 ghost 데이터는 다음과 같이 root 권한으로 데이터가 생성되어 있음을 알수 있다.

ubuntu@hibuz:~/nginx-certbot/data$ ll
total 20
drwxrwxr-x 5 ubuntu ubuntu 4096 Feb 22 07:50 ./
drwxrwxr-x 4 ubuntu ubuntu 4096 Mar 29 07:32 ../
drwxrwxr-x 4 ubuntu ubuntu 4096 Feb 22 05:18 certbot/
drwxr-xr-x 3 root   root   4096 Feb 22 07:50 ghost/
drwxrwxr-x 2 ubuntu ubuntu 4096 Apr 18 06:20 nginx/

root 로 로그인후 ssh-key 생성

ubuntu@hibuz:~/nginx-certbot/data$ sudo -i

root@hibuz:~# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:vY1JA2P4nBsJw1m84DuOuqineNH+2eOR7e1pa1cZr8Y root@hibuz
The key's randomart image is:
+---[RSA 2048]----+
|       ..        |
|     ..+.        |
|     .*.+.       |
|      .*.*     . |
|   .   .S +     +|
|  . . o  * *   .o|
|   o o .+ = .. o |
|..o o .o.o .o.E  |
|*+oo .o.o..+=+   |
+----[SHA256]-----+

root@hibuz:~# cd .ssh/

root@hibuz:~/.ssh# ll
total 20
drwx------ 2 root root 4096 May  1 20:09 ./
drwx------ 4 root root 4096 Jan 17 02:55 ../
-rw------- 1 root root  558 Jan 17 02:55 authorized_keys
-rw------- 1 root root 1679 May  1 20:09 id_rsa
-rw-r--r-- 1 root root  392 May  1 20:09 id_rsa.pub

id_rsa.pub 파일내용을 복사후 타겟 백업 서버에 접속하여 authorized_keys에 등록후 재 접속 하면 패스워드 없이 접속 되는것을 확인(만약 authorized_keys 가 없다면 생성후 chmod 400 authorized_keys로 권한설정) 하고 백업을 위한 폴더도 생성한다.

# root@hibuz:~# ssh ubuntu@nas.hibuz.com
ubuntu@nas-srv:~$ vi ~/.ssh/authorized_keys
ubuntu@nas-srv:~$ exit
logout
Connection to nas.hibuz.com closed.

# ssh ubuntu@nas.hibuz.com
Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-28-generic x86_64)

ubuntu@nas-srv:~$ mkdir hibuz.com.blog.backup

백업 스크립트를 작성하고 먼저 root 권한으로 수동 백업 쉘이 잘 되는지 확인한다.

ubuntu@hibuz:~/nginx-certbot$ vi remote_backup.sh
#!/bin/bash
BACKUP_DATE=`date "+%Y-%m-%d"`
tar czf $BACKUP_DATE.tgz /home/ubuntu/nginx-certbot/data
scp $BACKUP_DATE.tgz ubuntu@nas.hibuz.com:~/hibuz.com.blog.backup/
rm -f $BACKUP_DATE.tgz

ubuntu@hibuz:~/nginx-certbot$ sudo bash ./remote_backup.sh
tar: Removing leading `/' from member names
2020-05-01.tgz                                 100%   21MB   6.6MB/s   00:03

ubuntu@hibuz:~/nginx-certbot$ ssh ubuntu@nas.hibuz.com

ubuntu@nas-srv:~$ ll hibuz.com.blog.backup/
total 21968
drwxrwxr-x  2 ubuntu ubuntu     4096  5월  2 05:55 ./
drwxr-xr-x 22 ubuntu ubuntu     4096  5월  2 05:00 ../
-rw-r--r--  1 ubuntu ubuntu 22486652  5월  2 05:55 2020-05-01.tgz
ubuntu@nas-srv:~$ exit

매일 새벽 5시에 root 권한으로 스크립트가 실행되도록 crontab에 등록

$ sudo crontab -e
SHELL=/bin/bash
0 5 * * * /home/ubuntu/nginx-certbot/remote_backup.sh > /dev/null 2>&1