主堆栈和进程堆栈
我知道很多人有话要说:我会尽力鼓励他们写自己的博客。 我认为每个有兴趣的开发人员都应该这样做,并尽可能减少障碍。
但是,由于我无法理解的原因,Medium已成为首选的博客平台。 让我们面对现实吧,尽管该平台可以用于非技术性职位,但不适用于涉及代码和格式的主题。
除此之外,Medium还存在很大的问题。 如果您使用Medium,则基本上是将自己的内容交还给他们。
中等很烂的编程文章https://t.co/7tnF5Y7pjk或者更积极的观点,请创建您自己的博客👍
-Nicolas Frankel(我相信@Home很长时间了)(@nicolas_frankel) 2019年8月14日
在这篇文章中,我想描述我的博客堆栈和发布过程,以使感兴趣的每个人都可以开始自己的博客之旅,或者迁移一个人的现有堆栈并保持对内容的控制。
到目前为止,以下堆栈非常适合我。 但是,这可能并不适合每种情况。 因此,我在其中一节中列出了一些可能更适应的点点滴滴。
基础
博客平台是Jekyll ,它是静态网站生成器 :从根本上讲,它读取以特定文件夹结构组织的Markdown文件,以生成HTML文件,这些HTML文件在构建时定义了最终的博客内容。 与动态网站(如WordPress)相比,它具有快速(简单HTML)和安全的优势(无需PHP或SQL注入)。
但是在某些情况下, 例如简单的布尔逻辑或编写发布日期,HTML文件是不够的。 为了管理动态内容,Jekyll集成了支持简单逻辑的Liquid标签。
Jekyll围绕插件架构构建,以自定义平台。 插件类型不同,具体取决于所需的自定义类型:
- 生成器 :生成其他内容
- 转换器 :将标记语言更改为另一种格式
- 命令 :将子命令添加到jekyll可执行文件
- 标签 :添加其他液体标签
- 过滤器 :添加自定义液体过滤器
- 挂钩 :延长构建过程
插件是用Ruby编写的。 可以将需要共享(或设计为通用)的插件作为Gem安装,而自定义插件仅需要存储在特定的_scripts
文件夹中。 例如,一个插件为站点生成sitemap.xml
。
要发布新帖子,过程如下:
- 在专用的
_posts
文件夹中创建一个新的Markdown文件 - 将其添加到版本控制系统中,然后将其推送
- 这将触发构建,其中应包括:
- HTML内容的生成
- 将上述内容部署到Web服务器上,以使全世界都可以访问
有关静态网站的主要问题是如何让读者提供反馈-评论。 为了解决这个问题,有“服务即评论”提供程序。 Jekyll在本地集成了Disqus ,即广泛使用的CaaS 。
我的细节
在这些基础上,我实现了以下定制。
Asciidoctor文件格式
我总是发现Markdown非常有限。 当达到其极限时,人们总是可以退回到原始HTML,但是随后人们倾向于编写大量HTML。
我发现Asciidoctor格式更合适。 幸运的是,有一个专用的插件可以管理这种格式。 通过适当的配置,可以以Asciidoctor格式编写帖子。
PlantUML图
UML的普及程度远不如大多数UML培训声称的那样。 但是,我仍然发现这是一种与利益相关者或读者进行交流的非常有用的方法。
主题化
Jekyll基于标准模板,带有专用的CSS类。 因此,Jekyll能够基于这些类提供主题。 大多数主题都是通过Ruby gem提供的。 更改主题只是安装gem和使用它的问题。
就我而言,我重新设计了Jekyll中可用的模板。 因此,这些主题宝石变得毫无用处了......但是我通过结合使用自定义CSS和现有CSS来打造自己的风格。
为了记录,Jekyll与Sass开箱即用地集成在一起。 这样可以减少创建自己的样式表的过程的痛苦。
版本控制系统
首先从Jekyll开始,克隆GitHub存储库并对其进行自定义。 要跟踪更改,需要使用VCS 。 由于Jekyll最初是通过Git提供的,因此合理的后续措施是继续使用它。
Jekyll托管在GitHub上,但我选择使用GitLab,因为GitLab提供了免费的无限私有存储库。 尽管我的博客内容可供所有人免费访问,但我更愿意将平台的内部运作留给我自己。
内容生成
我正在使用Jekyll撰写博客文章,还发布了我过去和将来的演讲 。 我还希望Google以结构化的方式索引和解析演讲。 为此,可以使用schema.org微格式 。 为每个演讲复制粘贴相同的标签是不可行的。
为了自动化生成过程,我创建了一个生成器插件,该插件读取YAML数据以创建页面。 即使我不了解Ruby,也可以使用可用的文档和现有示例轻松创建插件 。 开发插件是自定义Jekyll实例的好方法。
缩小
Jekyll可以轻松配置为提供缩小功能:可以缩小生成HTML内容,包括JavaScript内容(如果有)。 但是,有一个警告:保留换行符,但是换行符占可以安全删除的符号的很大一部分。 开箱即用的缩小功能仅适用于此。
要删除所有多余的字符,可以使用第三方插件:
Jekyll使用yui-compressor和htmlcompressorHTML / XML / CSS / JS Minifier
https://github.com/digitalsparky/jekyll-minifier
它提供了许多缩小选项,包括删除换行符,压缩JSON等。
建造
jekyll
命令用于生成HTML内容。 作为软件开发人员,我们应该努力实现尽可能的自动化。 由于我的Jekyll源代码托管在GitLab上,因此使用GitLab CI构建站点是合乎逻辑的。
多亏了GitLab,构建才得以集成,以便对master
分支的提交会自动触发它。
代管
生成网站后,有必要托管博客的内容。 幸运的是,GitLab提供了静态网站托管解决方案GitLab Pages 。
再次感谢GitLab,可以使用附加的发布步骤来配置构建文件。
这是我用作模板的配置:
variables:
JEKYLL_ENV:production
GIT_STRATEGY:fetch
GIT_DEPTH:"3"
before_script:
-cd /builds/nfrankel/nfrankel.gitlab.io
pages:
stage:deploy
script:bundle exec jekyll b -tV --config _config.yml,_config/_config_prod.yml -d public
artifacts:
expire_in:1 day
paths:
-public
only:
-master
其他自定义和改进
-
自定义域
-
默认情况下,该网站是
gitlab.io
的子域, 即http://<reponame>.gitlab.io
。 为了“营销”目的,最好使用自己的域名。 GitLab Pages允许在您拥有的域下( 例如https://blog.frankel.ch/
提供站点服务。 只需检查相关文档即可 。
快取
-
如上所述,静态站点比动态站点快得多。 但是,可以通过使用CDN来提高GitLab Pages的性能。 随着CDN的发展, Cloudflare可以在全球各地的边缘服务器上缓存大量内容。 这允许将内容存储在更接近每个用户的位置,并根据用户与GitLab服务器之间的距离来缩短响应时间。 锦上添花的是,Cloudflare的免费套餐提供了该功能。
可能的选择
如上所述,我所描述的内容非常适合我。 但是,可能还有其他选择。 这些只是我知道的建议,绝不是详尽的清单。
科技类 | 备择方案 | 评论 |
---|---|---|
Jekyll | Based on Go | |
Based on Python | ||
Asciidoctor | Markdown | As mentioned above, my preference goes to Asciidoctor as Markdown is much too limited IMHO |
Git | What else? | |
GitLab | I think GitHub has now a free option for private repos | |
If you’re already a user or are in love with Atlassian products | ||
GitLab CI | Makes a lot of sense if you already are using GitHub | |
Not battle-tested yet | ||
GitLab Pages | Both seem to be equivalent based on my past experience | |
Cloudflare | No free tier that I know of |
结论
如果您想开始写博客,没有理由使用一个平台来通过您的内容获利,而您一无所获。 写博客文章是很多工作,您至少可以期望得到的回报是对它的某种认可。 我希望这篇文章能激发您创建自己的博客,或将您现有的博客迁移到内容属于您的地方。
翻译自: https://blog.frankel.ch/my-blogging-stack-publishing-process/
主堆栈和进程堆栈