之前看到这篇将网站自动备份到 Github的博文,才察觉用github备份网站既方便快速,还可以查看每次提交的修改情况以及任意回档,于是我也参考这篇文章实现了网站的自动备份,这里记录一下具体操作。

 

配置github

首先,当然需要先注册一个Github 账户,其次在服务器上安装git。

git的安装和基础使用可以参考之前写过的使用git管理github一文。

 

配置SSH登录方式

安装完git后,在服务器上选择一个安全好记的目录,例如/root/GithubKey

注意,这个目录要用于放置密钥,因此不能放在网站源码所在目录或者其他公有目录中,避免被别人获取 。

使用以下命令创建一个 RSA 密匙

cd /root/GithubKey
ssh-keygen -t rsa

然后根据提示输入生成密匙的文件名,此处举例输入github,需要输入 passphrase 的时候直接不输入回车即可。

完成后会有类似这样的显示,并且会在当前目录下生成githubgithub.pub这两个文件。

然后使用vi命令查看github.pub文件的内容,并复制下来。

vi github.pub

接下来到登录后的的 Github 页面,依次点右上角头像-“Settings”-左边”SSH and GPG keys”-右上角”New SSH key”。

然后将刚才复制的内容粘贴到”Key”输入框中,上方的”Tittle”可随意输入,然后点击”Add SSH key”按钮。

这样,github网站的SSH登录就配置完了,其实就是加一个 SSH 密匙到 Github,这样后续 Github 项目的同步可以使用SSH方式无需输入github帐号密码了。

 

创建私有Github项目

点击gihub网页右上角的+号,选择”New repository”新建项目,注意类型一定要选择”Private”,否则其他人就可以直接盗走网站了。

github这边就配置完成了。

 

服务器配置Github项目

初始化github项目

进入服务器的网站源码所在的目录,例如/root/www,然后运行下列命令。

cd /root/www
git init
git remote add origin git@github.com:yumefx/WordPressBake.git

第三行代码的目的就是设定当前项目的同步方式为SSH,github仓库地址为yumefx/WordPressBake。

 

数据库备份

除了网站源码外,网站所使用的数据库也应该备份,可以备份到网站源码目录下,方便一起同步到github。

首先在网站源码目录下创建一个文件夹。

cd /root/www
mkdir DatabaseBake

我现在在用的数据库是mariadb,备份方式与mysql相同,代码如下。

mysqldump -u数据库用户 -p数据库密码 WordPressDB > /root/www/DatabaseBake/WordPressDB.sql

上面代码中的WordPressDB为数据库中的网站数据库名,如果忘记了数据库名称或者密码,使用WordPress建站的可以到网站源码根目录下的wp-config.php中查看。

运行完成后,在DatabaseBake目录下就会生成WordPressDB.sql这个备份文件。

这里需要注意这个备份文件的大小,github限制单个文件不能超过50MB,因此如果数据库文件如果特别大就不能使用这种方式备份。

不过我的数据库备份文件目前也只有5MB+,暂时不必担心这个。

 

尝试进行首次同步

按顺序执行以下参考代码。

cd /root/www
git add -A
git commit -m "first commit"
ssh-agent bash
ssh-add /root/GithubKey/github
git push -u origin main

命令解释:

  1. 进入网站目录
  2. 把目录下所有文件变化(增、删、改)提交到暂存区
    如果你想只增、改而不删,那么可以用git add .命令代替
  3. 提交所有更改,这个"first commit"可以随意填写,这是提交改动的时候的说明,可以简略写一下每次的更改,方便以后回滚。
  4. 启动 SSH 密钥管理器
  5. 将之前创建的github密钥文件添加到密匙管理器中
  6. 推送所有更改到 Github 项目

执行最后一条后应该能看到上传的进度显示,等执行完毕后,再到github的项目网页上刷新一下,查看上传上去的文件是否正确。

这里同样需要注意文件的50MB大小限制,有时候可能会向网站上传一些文件给别人提供下载,尽量不要用这种方式上传太大的文件。

如果有这样的大文件导致上传github失败,可以通过在网站根目录新建.gitignore文件,里面填写想要被忽略提交上传的目录或者文件。

cd /root/www
vi .gitignore

.gitignore文件中每一行为一个路径,例如/root/www/wp-content/uploads/意思为忽略uploads文件夹下所有的文件,/root/www/readme.html意思为忽略readme.html这个文件。

 

设定每天自动同步

到上面为止,只是完成了初次手动备份,通过crontab定时任务可以让备份任务每天自动执行一次,省去人工操作。

首先需要安装crontab。

然后创建一个脚本,将每天需要执行的备份命令写入。

cd /root
vi wordpress_autobakeup.sh
#!/bin/bash
cd /root/www
mysqldump -u数据库用户 -p数据库密码 WordPressDB > DatabaseBake/WordPressDB.sql
git add -A
git commit -m "backup"
ssh-add /root/GithubKey
git push -u origin main

然后编辑crontab的配置文件,一般是/var/spool/cron/crontabs/root,在最下面加入下面这行,然后保存退出。

30 3 * * * ssh-agent bash /root/wordpress_autobakeup.sh

这条 crontab 命令代表每天凌晨3:30分执行ssh-agent bash /root/wordpress_autobakeup.sh命令。

接着重启一下 crontab 使新配置文件生效。

systemctl restart crond.service

 

 

这样每天凌晨3:30的时候就会自动备份网站到 Github 了。

 


这些年什么都没变,

就年龄变了。

——《半山文集》