网站内容基本每天都会更新,放在服务器担心服务器不稳定,考虑每天将网站和数据库备份到github私有仓库,保证安全性
新建github项目
添加一个备份网站,首先需要在github新建一个仓库,注意将仓库设为私有,避免站点内容泄漏
![图片[1]-网站内容自动备份到github - 乐享小栈-乐享小栈](https://cdn.jsdelivr.net/gh/Eriky-git/files/images/2021/09/12/f7f46f438a322cdc9627554b3b8c3a97.png)
安装git并添加访问github权限
首先在站点所在服务器安装git,网上很多教程,linux中安装只需要一条命令
sudo apt install git
配置用户信息
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
然后生成ssh秘钥,作为服务器访问github的权限认证
ssh-keygen -t rsa
![图片[2]-网站内容自动备份到github - 乐享小栈-乐享小栈](https://cdn.jsdelivr.net/gh/Eriky-git/files/images/2021/09/12/83df96635d37bb729889a7d950154c8b.png)
要你输入 passphrase 的时候直接不输入回车就行,完成后会有类似这样的显示,并且你会在家目录下.ssh文件夹中得到id_rsa和id_rsa.pub这两个文件
id_rsa.pub文件内容,然后回到你的 Github页面,点右上角头像,Settings,左边“SSH and GPG keys”,右上角“New SSH key”,将刚才复制的内容粘贴到“Key”输入框中,上方的“Tittle”自己随意输入,然后“Add SSH key”
![图片[3]-网站内容自动备份到github - 乐享小栈-乐享小栈](https://cdn.jsdelivr.net/gh/Eriky-git/files/images/2021/09/12/e9c3c06db42634107448d997af884136.png)
这样事前准备就完成了,嗯,其实就是加一个 SSH 密匙到 Github,这样可以方便后续 Github 项目的同步
为什么用 SSH 方式而不用 HTTPS 方式?
HTTPS 方式是要你输入用户名密码的,虽然你可以直接将用户名密码输入到链接中,像这样https://yourname:password@github.com/name/project.git,但是在链接中明文输入用户名密码是极不安全的,容易被监听窃取
初始化站点git仓库
进入需要备份的网站根目录,初始化git仓库,并添加远端库地址,这个地址就是你新建的github仓库地址
git init
git remote add origin git@github.com:xxxx/xxx.git
同步脚本
在www目录下新建一个backup2github目录,将所有脚本放在这个目录下便于管理,实际操作当然放哪里都可以 backup_xxx.sh
#!/bin/bash
#修改:实际需要备份的网站目录
cd /www/wwwroot/xxx
#修改:备份数据库。注意数据库文件需要设置权限,避免被访问!
mysqldump --no-tablespaces -u user -ppass dbname > github_backup_site.sql
git add -A
git commit -m "backup"
#删除备份的数据库文件,更加安全
rm -f ./github_backup_site.sql
git push -u origin master
- 上面mysqldump需要使用`
--no-tablespaces
`,否则可能会报如下错误,参见:https://anothercoffee.net/how-to-fix-the-mysqldump-access-denied-process-privilege-error/
Warning: Using a password on the command line interface can be insecure.
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
- 使用腾讯云轻量服务器,可能会出现连接不上github的情况,可以通过配置host解决,参见:解决腾讯云轻量服务器国内机器无法使用Github
最后为脚本添加可执行权限
chmod +x ./backup_xxx.sh #修改:实际文件名
权限设置
在站点根目录下备份的的数据库文件,和.git目录下的文件,需要在服务器中设置权限,禁止访问,这里以Nginx为例,在配置文件中,添加
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
location ~* \.sql$ {
deny all;
}
添加完成之后,网站需要重启,使配置文件生效
添加定时执行任务
在设置脚本执行前,先手动提交一次,避免首次提交的一些问题。
定时任务的实现,可以直接在命令行使用crontab,网上很多教程,搜索crontab添加定时任务即可。
这里使用宝塔面板,为了便于管理,在宝塔面板中添加定时任务
宝塔后台,计划任务中添加
![图片[4]-网站内容自动备份到github - 乐享小栈-乐享小栈](https://cdn.jsdelivr.net/gh/Eriky-git/files/images/2021/09/12/ea0848721fbf32c381a8ab2fb4f3ccb9.png)
请登录后查看评论内容