出租窝装修记
背景
刚来北京的时候把自己的博客定义成出租窝,想想和那时候的情景还是很贴合的。现实中有了自己的固定的窝了,但网上的这个窝确荒废了很久了。特别是技术的这个屋子,好久没有收拾了。
平时搜索技术文章的时候,还是能看到一些有毅力的人把自己平时的点点滴滴整理成文章,而自己每年都想重拾的出租窝。一直也没有时间和精力搞,这次的突发事件才发现,如果再不整理的话,就可能什么也没留下。
还记得10多年前一个feed聚合网站搞的一个比赛,每个星期都要写一篇命题博客,真的好痛苦。但是坚持下来又可以收获很多。这么多的益处还是多写写吧。
既然重拾,先定几个大原则:
- 更新频率:每周更新一篇;
- 遇到一天没搞定纠结的选择就先选一个;
- 初期内容为主、表现为辅;
- 逐步迭代;
总体还是出租窝的title,分为生活屋和技术屋,本次折腾的为技术屋。
技术选型
生活屋依旧用WordPress,技术屋转移到github上,为了保险有空的话会在国内也做个镜像。
github上有三个大的阵营:
网上有很多比较 一开始用jekyll 后来用hexo 如今用hugo,理由如下:
- 一开始生成静态的初期好像只有jekyll,当时hexo还没有太成熟,就选择了jekyll。
- 后来大家说hexo还可以了,模板还多,比jekyll先进,加上自己并没有几个文章,迁移成本低,就到了hexo。
- 本以为可以能多写一篇文章了,没想到写了5+文章后就再也没有了下文。
- 等又反应过来之后,大家开始高举在微服务、k8s上golang的hugo了,而且hexo的生成速度被大家诟病。好吧开始折腾hugo
真是人算不如天算,技术的更新从ruby nodejs 再到golang 还是那句话,工具其实不重要,重要的是内容。虽然工具可能有这样或那样的不适合。但现实情况是有时候还没到不改工具就无法进行下去的节奏。但是,既然大势所趋,迁移成本还是不那么高,那就转成hugo吧。
搜索了下相关文章,这两年在这方面还是有很多变化的:
- 生成上:写blog也开始用上CI/CD了。
- 评论上:多说没了 disqus依旧 而github的issues也可以变成评论。
- 图片上:有一些在线压缩的工具可以继承到CI中,七牛云 微博图床这些不知道是否还好。
- CDN上:七牛云好像也变了很多、其它云的对象存储+CDN好像大家也开始有所涉及。
- 主题上:好像大家对于主题没有了以前的热情,唠的涝死旱的旱死,两极分化。
- 其它:唯一不变的还是用git管理markdown写的文章。
Git
基础操作这里就略过不讲了三部曲
- git add
- git commit
- git push
重点讲一下下面两项
Git LFS
无论是github还是gitlab目前比较新的版本都支持了LFS,当然也需要git的客户端的版本在1.8.5+
这样在上传一些图片或者二进制包的时候不至于记录到git的历史记录里,防止git仓库过大。
git lfs也是三部曲:
- git lfs install
- git lfs track “*.png”
- git add .gitattributes
Git remote
说实话,这个还没有用上。原打算在本地生成之后一个push,然后推送到github和coding上的。
不过用了CI,只能在CI的过程中生成好静态页,再推送到两个Git仓库中。还可能牵涉到配置文件域名的修改。尚未实践。
CI
在DevOps当道的今天,个人博客也不例外。其实本意应该是减少以前hexo的缓慢编译,以及减少击键次数。目前网上的教程大多是用travis做的,目前github自家的CI也出来了,可以尝试。
下面是我的yaml,总结了几点改进建议和优化的地方,供参考:
- 吐槽下每次都要重新编译hugo,下载一堆的依赖,可以用docker去抹平这个过程提高速度。
- 用pushover将部署之后的git message通知到终端,了解目前的编译部署情况。
- 不足之处无法在pages上看到历史记录,不过将blog和pages分开。blog的仓库中还是有相关修改记录的。
sudo: false
language: go
git:
depth: 1
install: go get -v github.com/spf13/hugo
script:
- hugo
deploy:
provider: pages
skip_cleanup: true
# token is set in travis-ci.org dashboard
github_token: $GITHUB_API_KEY
on:
branch: master
local_dir: public
repo: yimeng/yimeng.github.com
target_branch: master
email: [email protected]
name: deployment-bot
after_deploy:
- curl -s --form-string "token=$APP_TOKEN" --form-string "user=$USER_KEY" --form-string "message=$(git --no-pager log -n 1 --oneline)" https://api.pushover.net/1/messages.json
图片
管理方案
先说下管理方案,网上大多是让你放到主题的static目录下。出于职业习惯,感觉这么搞似乎有些不妥。换个主题之后就凉凉了,虽说可以人肉移动,但也不利于后期的维护。而且最大的问题是无法在markdown编辑器中预览,相关的文件路径需要修改。
参考了下往上的方案,发现hugo是可以将文章打包成文件夹的,在文件夹里放md文章和图片是一个比较不错的方案。至于是按照年份还是文章分类,这个因人而定吧。
举个例子:
.
├── about.md
└── post
├── 2019
│ ├── ammeter
│ │ ├── ammeter.png
│ │ └── index.md
│ ├── hugo
│ │ └── index.md
│ └── marslander.md
├── hello.md
└── vagrant-alpine.md
about.md 是关于页面
post目录下按照年份分类
其它随时修改的或者记不起年份的可以单分出来,或者放到other目录里。
压缩工具
ImgBot 定期扫描git仓库把可以处理的图片进行处理之后,合并到相应分支。
tinning 免费的好像只能处理5M以下的图片,有相应的api可以调用。
相应的图片压缩工具应该还有很多,但一般还是希望能够有原图,展现的时候使用压缩过的图。好比元数据存在一个地方,其它都是衍生的各种视图。
所以,可能原始图片用LFS上传,然后经过处理用CI把处理好的放到相应的目录中这种模式比较好?但是LFS是否支持这种用git当自己的图片库的操作呢?或许上个CDN才是更好的做法?放到阿里云上的对象存储上好像可以自动处理大小以及压缩率。终于知道为什么程序员喜欢PaaS服务了。把你需要考虑的都考虑到了。
优化
除了上面介绍的图片优化,还有一些开启http2 压缩js css字体等等,但我个人感觉,http2倒是有一定的意义,比起图片其它的可能都是小虾米(除非上M的js文件)。所以下一步优化还是在图片方面,先昧着良心用LFS吧。
主题
以前会花费一周的时间找一个好看的主题,现在感觉不是那么的重要了。好看的皮囊太多了,hugo没几个。本着实用主义的原则,先把内容写起来再说。
参考