网站一些服务在 docker 运行,而且又是海外服务器,不知道什么时候可能会宕机,因此要及时备份数据。
目前的方案是:docker 和网站目录定时打包上传到存储桶;同时 docker 的主要存储目录提交到 GitHub,每日一次,保证频繁更新的内容能得到备份。
生成服务器密钥
连接到服务器。
# 进入目录
cd ~/.ssh
# 生成证书
ssh-keygen -f id_rsa -C "usermail"
以上注意两点:
# 列出目录
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
根据需要设定为自动化运行即可。