GitHub是全球最大的代码托管网站,这次我们不讨论他的代码托管功能,重点使用的是Pages服务。不了解的可以先阅读:
# GitHub Pages配置自定义域名 并开启HTTPS访问
GitHub Pages允许用户将代码库中的静态文件直接发布为网站。同时支持绑定自定义域名,和开启SSL证书,而这些都是免费的!
那么可不可以用这个功能来托管网站呢?就拿WordPress来说,它是基于PHP的动态网站,显然不能直接部署到GitHub Pages。本篇岩兔站就鼓捣一下,将动态网站转换为静态文件,并自动同步到GitHub!
托管于GitHub的示例网站:
准备工作
开始之前需要有一个目标网站,这里就是基于WordPress的岩兔站为例,所有操作都在Linux命令行中进行。
- GitHub帐户
- 要迁移的网站,比如https://bak.yantuz.cn:8000
- 一台Linux计算机,也可以直接使用网站的服务器
网站静态化
在Linux命令行中,只要用wget
一条命令就能搞定:
wget \ --mirror \ --convert-links \ --adjust-extension \ --page-requisites \ --retry-connrefused \ --exclude-directories=comments \ --execute robots=off \ https://bak.yantuz.cn:8000
这条命令可以将整个网站以HTML的形式下载到本地
如果需要替换链接或者内容可以增加替换语句,将原域名https://bak.yantuz.cn:8000
替换为新域名https://static.yantuz.cn
:
find ./ -type f -exec sed -i -e 's|https://bak.yantuz.cn:8000|https://static.yantuz.cn|g' {} \;
提交到GitHub
首先在GitHub中建立一个项目,起名为StaticYantuz
,得到Git地址为git@github.com:yhf7952/staticYantuz.git
。
然后进行初始化设置,其中初始化和连接远程库的操作只需要执行一次即可。
#文件夹名称设置为docs mv yantuz.cn/* docs/. rmdir yantuz.cn #初始化本地git库 git init git add docs/* #连接远程Git库,并进行提交到master git remote add origin git@github.com:yhf7952/git-ssh.git git push -u origin master
注意:以上为部分代码,用命令行提交GitHub还需要设置可信密钥等操作,详情查看git-ssh简明教程-命令行提交代码到GitHub。
建立网站
启用Pages服务,并选择docs目录即可,之后绑定域名即可。以下是岩兔站的配置,详细设置参考GitHub Pages配置自定义域名 并开启HTTPS访问。
设置完成之后应该可以通过https://static.yantuz.cn/直接访问了。
计划任务
网站是实时更新的,所以原网站更新时,同时也需要更新GitHub。根据网站更新频率自行设置任务计划就行,完整代码为:
#!/bin/sh cd /home/staticYantuz wget \ --mirror \ --convert-links \ --adjust-extension \ --page-requisites \ --retry-connrefused \ --exclude-directories=comments \ --execute robots=off \ https://bak.yantuz.cn:8000 git rm -rf docs/* mv yantuz.cn/* docs/. rmdir yantuz.cn find ./docs/ -type f -exec sed -i -e 's|https://bak.yantuz.cn:8000|https://static.yantuz.cn|g' {} \; git add docs/* git commit -m "new snapshot" git push origin master
将代码存储为mirror.sh
,执行方法为./mirror.sh
实际应用
本方法实际的应用是CMS类的网站,可以在本地部署运行环境,之后将生成的静态文件发布到外网平台。
优点:显而易见,由于服务器不进行动态运算,所以响应速度是最快的!而且不运行动态内容的话,杜绝了挂马的风险。
缺点:由于不能运行动态内容,所以数据库读写也不行,一些实时交互如留言等功能无法实现。
这个方法可以有!!不过感觉如果是拿GitHub Pages托管博客的话不如直接用像Hugo这样的静态博客。
原本就是静态页会更方便,蹭服务器妥妥的