网站一些服务在 docker 运行,而且又是海外服务器,不知道什么时候可能会宕机,因此要及时备份数据。

目前的方案是:docker 和网站目录定时打包上传到存储桶;同时 docker 的主要存储目录提交到 GitHub,每日一次,保证频繁更新的内容能得到备份。

生成服务器密钥

连接到服务器。

# 进入目录
cd ~/.ssh
# 生成证书
ssh-keygen -f id_rsa -C "usermail"

以上注意两点:

  1. GitHub 如果开启了隐私邮箱,需要填入隐私邮箱。可以在这里看到自己的隐私邮箱详细文档
  2. 在输入密码时直接略过,不要输入密码。
# 列出目录
ls
# 查看密钥内容
cat id_rsa.pub

密钥生成后,可以先列出目录,查看是否成功生成,应该会有两个文件id_rsa id_rsa.pub 然后使用cat查看密钥内容,将密钥内容复制到 GitHub SSH Keys

之后可以验证下是否生效。

# 显示 'Hi xxx(your username)!' 即是生效
ssh -T [email protected]
Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.

上传代码到仓库

创建一个仓库,既然是备份数据,一般设置为 private。

转到服务器希望备份的目录,以/www/data为例。

# 定位到目录
cd /www/data

# 建立git
git init

# 配置邮箱和用户名,开启了隐私邮箱则为隐私邮箱
git config --global user.email "usermail"
git config --global user.name "username"

# 关联到远程仓库
git remote add origin [email protected]:username/repositoryname.git

# 添加文件
git add .

# 提交文件
git commit -m "first backup"

# 主分支为 main 并上传
git branch -M main
git push -u origin main

现在,文件会上传到 GitHub 仓库。

配置自动化脚本

以下提供一个 shell 脚本的示例:

#!/bin/bash

# 定位到目录
cd /www/data/

# 建立一个 README.md 并写入日期,确保每次都有更新
echo -e "\n Backup time: `date` \n" >> ./README.md

# 添加文件到仓库
git add .
git commit -m  "Backup `date`"
git push -u origin main

根据需要设定为自动化运行即可。