以前的博客都是记录在简书,偶尔有些零散的文章会往掘金和CSDN发一发,虽然这些平台写做体验仍是挺不错的,不用考虑推广也有一些流量,可是前段时间简书整顿了一波,有几篇文章无辜被锁,以为很恼火。
再想一想这些写做平台页面千篇一概不够个性化,还不如本身搭个我的博客,一来不用担忧审查什么的带来的附带伤害,也折腾一下没搞过的东西,给人生增长点乐趣。php
仔细考虑了下我的的需求,其实比较简单,就是要逼格必定要高。
因此主题得找本身喜欢的~
因此我的域名必定是要的~
因此必定不能写完了还要敲几行命令别人才能看到~
因此评论啊,人数统计啊,字数统计啊,该有的绝对不能少~
固然还得够快。html
如今的各类公众号 vlog等自媒体形态潮的飞起,相比之下博客显得有点Old School。不过这带来的好处就是技术方案基本都比较成熟了,在网上随便找找,果真成熟的技术就是好,直接有方案能够知足大部分本身的需求
Hexo 博客终极玩法:云端写做,自动部署
总结起来就是前端
以前没搞过前端的工做,整个环境的搭建仍是费了些功夫,不过关于整个搭建工做,按照网上文章step by step的作也就差很少了,这里只记录下本身的粗枝大叶的地方,浪费了很多时间linux
这是一个比较低级的错误,不过确实卡了我有半个小时,在下载主题的时候我直接下载的zip解压,文件夹名字是带分支的,和_config.yml
中的theme名字不对应,致使生成不了正常的页面git
.travis/ssh_config
中的配置,rsa文件的路径要正确,由于我配置了多个git仓库,因此一个也不能漏Host github.com
User git
StrictHostKeyChecking no
IdentityFile ~/.ssh/id_rsa_ci
IdentitiesOnly yes
Host gitee.com
User git
StrictHostKeyChecking no
IdentityFile ~/.ssh/id_rsa_ci
IdentitiesOnly yes
Host git.dev.tencent.com
User git
StrictHostKeyChecking no
IdentityFile ~/.ssh/id_rsa_ci
IdentitiesOnly yes
复制代码
文档中说是公开库能够不用token,可是本身尝试公开库依然须要token,且token应在travis-ci中定义环境变量,更安全一些,不过依赖travis-ci进行每次调试很费时间,能够在 package.json
的yuqueConfig
中定义token,见#30程序员
博客撘完,导入几个模板测试一下,一切顺利,然而一个爱折腾的程序员怎么能就此知足呢
这个博客还有几个问题github
github.io
下面逼格不够由于贫穷,在freenom 上申请了一个免费的域名sunhapper.tk
,绑定到github也很简单web
sunhapper.github.io
,我设置的是BLOG
blog.sunhapper.tk
如今使用访问blog.sunhapper.tk
就能够定向到sunhapper.github.io
了json
网上很多文章说要设置A记录指向github的ip地址,实际没有必要,A记录的设置是在拥有本身的公共IP时将域名和ip进行绑定的,github的ip实际并非你本身维护的,这样绑定没有意义api
绑定完域名,试验下,我的感受还行,不过让其余朋友试试发现仍是有些问题
因此访问性优化第一步就是换dns服务器,申请了dnspod做为dns服务器,由于以前公司的dns用的就是dnspod,并且对这种我的博客也是免费的,切换过程比较顺畅,在dnspod设置完将freenom的dns服务器改为自定义的就完了
由于github在国内的访问也是不太稳定的,因此考虑使用cdn进行加速,可是最终没有使用,主要由于
基于以上缘由,没有使用cdn,而是使用了国内的git仓库进行页面托管
国内的提供pages功能的git仓库有coding、gitee,以前用gitee比较多,可是gitee要收费版本才有自动发布和自定义域名功能,贫穷让我使用了coding
往coding推送静态页面和github并无什么不一样
在dnspod上设置下指向coding的CNAME并设置为默认,github.io设置为国外访问
由于coding的ssl证书站点在国外,因此若是设置为github.io做为国外路线的CNAME则会对开启https有影响,因此为了https只好忍痛放弃多线路的支持,改为全部访问都定向到coding
由于同步语雀文章,生成静态页面,向托管仓库部署页面都是在travis上进行的,这致使博客源码仓库不会发生任何变化,而静态页面的托管仓库的推送都是强制的,因此也没有历史记录,这样让版本回滚很是困难,并且彻底依赖语雀平台,语雀万一挂了,博客文章的修改及更新就变得比较困难
因此在travis-ci中执行同步文章操做后会添加一个提交,并推送到github,安全起见,在gitee弄了镜像仓库,也备份一下,毕竟前段时间MYZ github也是有一些动做的
这个备份操做仍是比较顺畅的,毕竟几个仓库都配了ssh key,拥有彻底的读写权限,就是在生成新的commit_message时耽误了比较久
来看下到底被什么给block了
回过头看看Hexo 博客终极玩法 中serverless函数这一段,这个函数的功能是将语雀的webhook调用转换成travis-ci api的形式,其中带上了被修改的文件名做为message放在body的request字段里
$post_data = json_encode(array(
"request"=> array(
"message"=>$message,
"branch"=>$branch
)
));
复制代码
按照travis-ci的文档,这个message应该覆盖 TRAVIS_COMMIT_MESSAGE
环境变量,可是实际并无见github.com/travis-ci/t… ,每次 TRAVIS_COMMIT_MESSAGE
都是最新的提交的message,这样我想建立一个新的commit它的message是什么就没有依据了
查了下文档,Triggering builds with API V3 发现config的env字段能够添加环境变量,因此本身加个环境变量做为commit-message好了
$post_data = json_encode(array(
"request"=> array(
"message"=>$message,
"branch"=>$branch,
"config"=>array(
"env"=>array(
"DESC"=>preg_replace("/\t/","",$message)
)
)
)
));
复制代码
.travis.yml
中修改
- NEW_MESSAGE=${DESC:-$TRAVIS_COMMIT_MESSAGE} //有DESC环境变量就用DESC,没有就用TRAVIS_COMMIT_MESSAGE
- echo ${NEW_MESSAGE}
复制代码
这里有个问题,travis-ci在取环境变量的字符串时,若是中间有空格,会只取空格前的字符串,这个还没想到方式解决,只好生成DESC时不加空格了
坑已踩完,每次语雀更新文章都会在git上生成一个包含修改文件的commit了
干了两天,终于得到了一个自定义域名,国内外分线路访问,自动部署的我的博客了,固然有些事情还没作完,标记下备忘
如今暂时使用的是直接复制到语雀编辑页面自动生成md图片地址,可是这个地址只有在生成md时才看的到,在其余地方使用比较麻烦,好比封面等,因此须要考虑其余图床
看到网上各类博客上裂开的图片,天生对图床有种不安全感,因此图片展现能够用图床,可是在git仓库应该也须要一个备份,以便图床挂了能够及时迁移
一行代码提取markdown文件中图片
语雀生成的md文件中多了不少html标签,例如段落的换行都是使用<br>
,这在不一样md解析器中效果不一样,因此须要格式化成较为标准的格式,方便其余地方发布
使用下面命令进行文本替换
sed -E -i "s/<br \/>/ \n/g" $1 ## 删除<br \/
sed -E -i "s/<a\sname=\"\w*\"><\/a>//g" $1 ## 删除标签
sed -E -i "s/\xc2\xa0/ /g" $1 ## 删除html空格特殊字符
复制代码
html特殊字符这个东西仍是挺坑的,以前 front-matter 有问题也是由于这个,具体解决方案见
How to deal with NBSPs in a terminal
每篇文章都是本身的心血,固然想让更多的人看到,并且使用了travis自动部署,那么除了git托管,其余平台若是能够自动发布的话支持一下,是否是就能够走上人生巅峰了呢,想一想还有些小激动呢~
本博客第一篇文章终于完成了,后续会把其余平台的文章逐渐迁移过来,也会不断进行技术博客输出,敬请关注
感谢帮助我完成博客搭建所用到的开源工具以及平台
Hexo
yuque-hexo
hexo-theme-matery
语雀