之前看到这篇将网站自动备份到 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 了。
这些年什么都没变,
就年龄变了。
——《半山文集》
评论
731981 632118The Case For HIIT Cardio – Why You need to Concider it By the way you may want to check out this cool website I found 443024
483396 999670I truly appreciated this wonderful weblog. Make confident you maintain up the good function. All the greatest !!!! 704841
602747 680389Your blog is among the greater blogs Ive came across in months. Thank you for your posts and all the greatest together with your function and weblog. Looking forward to reading new entries! 179787