之前看到这篇将网站自动备份到 Github的博文,才察觉用github备份网站既方便快速,还可以查看每次提交的修改情况以及任意回档,于是我也参考这篇文章实现了网站的自动备份,这里记录一下具体操作。
配置github
首先,当然需要先注册一个Github 账户,其次在服务器上安装git。
git的安装和基础使用可以参考之前写过的使用git管理github一文。
配置SSH登录方式
安装完git后,在服务器上选择一个安全好记的目录,例如/root/GithubKey
注意,这个目录要用于放置密钥,因此不能放在网站源码所在目录或者其他公有目录中,避免被别人获取 。
使用以下命令创建一个 RSA 密匙
cd /root/GithubKey ssh-keygen -t rsa
然后根据提示输入生成密匙的文件名,此处举例输入github
,需要输入 passphrase 的时候直接不输入回车即可。
完成后会有类似这样的显示,并且会在当前目录下生成github
和github.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
命令解释:
- 进入网站目录
- 把目录下所有文件变化(增、删、改)提交到暂存区
如果你想只增、改而不删,那么可以用git add .
命令代替 - 提交所有更改,这个
"first commit"
可以随意填写,这是提交改动的时候的说明,可以简略写一下每次的更改,方便以后回滚。 - 启动 SSH 密钥管理器
- 将之前创建的
github
密钥文件添加到密匙管理器中 - 推送所有更改到 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 了。
这些年什么都没变,
就年龄变了。
——《半山文集》
评论
105448 790063Thanks for the excellent post against your weblog, it genuinely provides me with a appear about this topic.??;~.?? 72091