• 使用Jekyll + GitHub Pages搭建个人博客


    本文将介绍如何使用Jekyll搭建个人博客,并部署在GitHub Pages上。

    1.简介

    Jekyll是一个强大的静态网站生成器,可以将Markdown、HTML、Liquid模板等文件转换为静态网站。Jekyll支持模板引擎、主题、插件、集成GitHub Pages等特性,可以帮助用户快速搭建和发布静态网站。

    官方网站:https://jekyllrb.com/

    2.安装

    Jekyll支持大多数操作系统,依赖如下:

    下面介绍在Windows系统上的安装步骤,其他操作系统见官方文档安装指引:https://jekyllrb.com/docs/installation/

    2.1 安装Ruby

    在Windows上安装Ruby最简单的方式是RubyInstaller。

    下载地址:https://rubyinstaller.org/downloads/,选择 Ruby+Devkit 版本,使用默认选项安装即可。

    在安装向导最后一步勾选“运行ridk install”:

    ridk install

    在弹出的命令行窗口中选择 “MSYS2 and MINGW development tool chain”:

    MSYS2 installation choice

    检查是否安装成功:

    ruby -v
    gem -v
    
    • 1
    • 2

    2.2 安装Jekyll

    打开一个新的CMD窗口,执行以下命令安装Jekyll和Bundler:

    gem install jekyll bundler
    
    • 1

    检查是否安装成功:

    jekyll -v
    
    • 1

    3.Jekyll基础

    3.1 Jekyll教程

    在正式开始搭建个人博客之前,建议先按照Jekyll官方教程Step by Step Tutorial搭建一个Demo网站,了解Liquid模板(变量、标签、过滤器)、前页(front matter)、布局(layout)等基本概念,并学会使用jekyll命令。

    Demo网站:https://zzy979.github.io/jekyll-tutorial/

    Demo site

    3.2 Jekyll目录结构

    Jekyll项目的典型目录结构如下:

    mysite/
      _data/
        foo.yml
      _includes/
        foo.html
      _layouts/
        default.html
        post.html
      _posts/
        2018-08-20-bananas.md
        2018-08-21-apples.md
      _sass/
        main.scss
      _site/
      assets/
        css/
        images/
        js/
      _config.yml
      index.html
      Gemfile
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    作为博客作者,主要关注以下文件/目录即可(其他目录用于存放主题样式文件):

    文件/目录描述
    _config.yml配置文件
    _posts文章内容,文件命名格式为YYYY-MM-DD-TITLE.EXTENSION
    _siteJekyll生成的网站文件
    assets/images文章中的图片文件
    index.html网站主页

    详见官方文档Directory Structure

    3.3 主题

    主题(theme)提供了网站页面的布局和样式,详见官方文档Themes

    可以在 http://jekyllthemes.org/ 选择自己喜欢的主题并在线预览。我选择的主题是Chirpy,该主题提供了分类(category)、标签(tag)、目录、语法高亮、数学公式、搜索文章、评论系统等特性,能够满足博客网站的绝大部分需求。

    4.搭建个人博客

    下面正式开始搭建个人博客网站。参考:Chirpy - Getting Started

    4.1 创建网站

    打开chirpy-starter仓库,点击按钮 “Use this template” → “Create a new repository”。

    create-repository-step1

    将新仓库命名为.github.io,其中是你的GitHub用户名,如果包含大写字母需要转换为小写。

    create-repository-step2

    注:如果不需要自定义主题样式,则推荐使用这种方式,因为容易升级,并且能离无关文件,使你能够专注于文章内容写作。

    4.2 安装依赖

    使用git clone将新创建的仓库克隆到本地,并在项目根目录下执行

    bundle
    
    • 1

    4.3 配置

    根据需要更新_config.yml中的变量,例如urlavatartimezonelang等。

    4.4 启动本地服务器

    要在本地预览网站内容,执行

    bundle exec jekyll serve
    
    • 1

    在浏览器访问 http://127.0.0.1:4000/

    4.5 部署

    GitHub Pages是一个通过GitHub托管和发布网页的服务,官方文档:https://docs.github.com/en/pages。本文使用GitHub Pages部署个人博客网站。

    每个GitHub用户可以创建一个用户级网站,仓库名为.github.io,发布地址为 https://.github.io。GitHub Pages支持自定义域名,参考文档About custom domains and GitHub Pages

    在部署之前,检查_config.yml中的url是否正确配置为上述发布地址(或者自定义域名)。

    注意:一般不需要配置baseurl。如果配置了,则文章中必须使用relative_url过滤器生成正确的URL,否则会导致404错误。参考Jekyll’s site.url and baseurl

    之后在GitHub上打开仓库设置,点击左侧导航栏 “Pages”,在 “Build and deployment” - “Source” 下拉列表选择 “GitHub Actions”。

    github-pages-deployment-source

    提交本地修改并推送至远程仓库,将会触发Actions工作流。在仓库的Actions标签页将会看到 “Build and Deploy” 工作流正在运行。构建成功后,即可通过配置的URL访问自己的博客网站。

    https://zzy979.github.io

    personal-blog-site

    4.6 评论系统

    Jekyll生成的博客网站是静态的,没有后端和数据库,因此本身无法实现评论功能。然而,可以使用disqusutterancesgiscus等评论系统来实现评论功能。

    本文使用giscus,它是利用GitHub Discussions实现的评论系统,并且是开源、免费的。开启评论系统的步骤如下。

    (1)安装giscus app

    (2)在仓库设置页面 “Features” 一节中勾选 “Discussions”,开启仓库的GitHub Discussions功能。

    enable-github-discussions

    (3)在仓库的Discussions标签页,点击 “Categories” 旁边的编辑按钮,自定义用于博客评论的类别名称(例如 “Comments”)。

    edit-discussions-categories

    (4)打开 https://giscus.app/,在页面上填写以下配置:

    • Repository: /.github.io
    • Page - Discussions Mapping:保持默认值 “Discussion title contains page pathname” 即可(URL为https://.github.io/posts/</code>的文章将映射到标题为<code>/posts/<title></code>的Discussion,即使用URL的pathname部分作为Discussion标题)</li><li>Discussion Category:选择上一步创建的类别名称(例如 “Comments”)</li></ul> <p>之后找到 “Enable giscus” 一节,将自动生成的配置填写到_config.yml中<code>comments.giscus</code>的对应选项。</p> <p><img src="https://1000bd.com/contentImg/2024/04/10/c0dd469d02a34322.png" alt="giscus-config"></p> <pre data-index="6" class="set-code-show prettyprint"><code class="prism language-yaml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token key atrule">comments</span><span class="token punctuation">:</span> <span class="token key atrule">active</span><span class="token punctuation">:</span> giscus <span class="token key atrule">giscus</span><span class="token punctuation">:</span> <span class="token key atrule">repo</span><span class="token punctuation">:</span> ZZy979/zzy979.github.io <span class="token key atrule">repo_id</span><span class="token punctuation">:</span> R_kgDOKOkhRA <span class="token key atrule">category</span><span class="token punctuation">:</span> Comments <span class="token key atrule">category_id</span><span class="token punctuation">:</span> DIC_kwDOKOkhRM4CZCpN <span class="token key atrule">mapping</span><span class="token punctuation">:</span> pathname <div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li><li style="color: rgb(153, 153, 153);">7</li><li style="color: rgb(153, 153, 153);">8</li></ul></pre> <p>(5)重启Jekyll服务器,在文章底部将会看到评论区,使用<a href="https://so.csdn.net/so/search?q=GitHub%E8%B4%A6%E5%8F%B7&spm=1001.2101.3001.7020" target="_blank" class="hl hl-1" data-report-view="{"spm":"1001.2101.3001.7020","dest":"https://so.csdn.net/so/search?q=GitHub%E8%B4%A6%E5%8F%B7&spm=1001.2101.3001.7020","extra":"{\"searchword\":\"GitHub账号\"}"}" data-report-click="{"spm":"1001.2101.3001.7020","dest":"https://so.csdn.net/so/search?q=GitHub%E8%B4%A6%E5%8F%B7&spm=1001.2101.3001.7020","extra":"{\"searchword\":\"GitHub账号\"}"}" data-tit="GitHub账号" data-pretit="github账号">GitHub账号</a>登录即可发表评论。</p> <p><img src="https://1000bd.com/contentImg/2024/04/10/d8f04c61a1494a6d.png" alt="comment-system-enabled"></p> <h4><a name="t15"></a><a id="47__193"></a>4.7 写文章</h4> <p>至此,博客网站已经搭建完成,可以开始文章写作了。</p> <p>要写一篇新的文章,在_posts目录下创建一个文件,命名格式为<code>YYYY-MM-DD-TITLE.md</code>(例如<code>2023-09-03-hello-world.md</code>),<code>TITLE</code>部分将作为文章的URL。</p> <p>详细配置和语法参考Chirpy文档:</p> <ul><li><a href="https://chirpy.cotes.page/posts/write-a-new-post/" rel="nofollow">Writing a New Post</a></li><li><a href="https://chirpy.cotes.page/posts/text-and-typography/" rel="nofollow">Text and Typography</a></li></ul> <h5><a id="Front_Matter_202"></a>Front Matter</h5> <p>你需要在文章顶部填写Front Matter信息:</p> <pre data-index="7" class="set-code-show prettyprint"><code class="prism language-yaml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token punctuation">---</span> <span class="token key atrule">title</span><span class="token punctuation">:</span> TITLE <span class="token key atrule">date</span><span class="token punctuation">:</span> YYYY<span class="token punctuation">-</span>MM<span class="token punctuation">-</span>DD HH<span class="token punctuation">:</span>MM<span class="token punctuation">:</span>SS +/<span class="token punctuation">-</span>TTTT <span class="token key atrule">categories</span><span class="token punctuation">:</span> <span class="token punctuation">[</span>TOP_CATEGORIE<span class="token punctuation">,</span> SUB_CATEGORIE<span class="token punctuation">]</span> <span class="token key atrule">tags</span><span class="token punctuation">:</span> <span class="token punctuation">[</span>TAG<span class="token punctuation">]</span> <span class="token punctuation">---</span> <div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li><li style="color: rgb(153, 153, 153);">5</li><li style="color: rgb(153, 153, 153);">6</li></ul></pre> <p>其中,<code>title</code>将展示为文章标题(不必与文件名的<code>TITLE</code>部分相同),<code>date</code>将展示为文章创建时间(时区写<code>+0800</code>)。</p> <p>之后是正文内容。</p> <h5><a id="_218"></a>分类和标签</h5> <p><code>categories</code>是文章的分类,支持至多两级分类。<code>tags</code>是文章的标签,可以有任意多个。例如:</p> <pre data-index="8" class="set-code-show prettyprint"><code class="prism language-yaml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token punctuation">---</span> <span class="token key atrule">categories</span><span class="token punctuation">:</span> <span class="token punctuation">[</span>Animal<span class="token punctuation">,</span> Insect<span class="token punctuation">]</span> <span class="token key atrule">tags</span><span class="token punctuation">:</span> <span class="token punctuation">[</span>bee<span class="token punctuation">]</span> <span class="token punctuation">---</span> <div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li><li style="color: rgb(153, 153, 153);">4</li></ul></pre> <h5><a id="_228"></a>目录</h5> <p>默认情况下,目录将会自动生成并展示在文章右侧。如果想全局关闭,则将_config.yml中的<code>toc</code>变量设置为<code>false</code>。如果想对一篇特定的文章关闭,则在Front Matter中添加:</p> <pre data-index="9" class="set-code-show prettyprint"><code class="prism language-yaml has-numbering" onclick="mdcp.signin(event)" style="position: unset;"><span class="token punctuation">---</span> <span class="token key atrule">toc</span><span class="token punctuation">:</span> <span class="token boolean important">false</span> <span class="token punctuation">---</span> <div class="hljs-button signin active" data-title="登录复制" data-report-click="{"spm":"1001.2101.3001.4334"}"></div></code><ul class="pre-numbering" style=""><li style="color: rgb(153, 153, 153);">1</li><li style="color: rgb(153, 153, 153);">2</li><li style="color: rgb(153, 153, 153);">3</li></ul></pre> <blockquote> <p>注意:Chirpy生成的目录只显示二级标题(##)和三级标题(###),一级标题(#)不会显示在目录中。参考<a href="https://github.com/cotes2020/jekyll-theme-chirpy/issues/491#issuecomment-1015659620">issue #491</a>。</p> </blockquote> </div> </div> </li> <li class="list-group-item ul-li"> <b>相关阅读:</b><br> <nobr> <a href="/Article/Index/1046351">hive sql—开窗函数—累积求和和滑动求和</a> <br /> <a href="/Article/Index/952034">(附源码)node.js知识分享网站 毕业设计 202038</a> <br /> <a href="/Article/Index/1311533">LeetCode 19. 删除链表的倒数第 N 个结点</a> <br /> <a href="/Article/Index/638960">A-level经济难,但是想学好应该怎么做?</a> <br /> <a href="/Article/Index/722405">lasso回归结果美化</a> <br /> <a href="/Article/Index/778661">Excel中text函数5中常用方法</a> <br /> <a href="/Article/Index/1149457">如何利用Airtest做一些简单的装包小任务</a> <br /> <a href="/Article/Index/896169">离子液体1-丁基-3-甲基咪唑六氟磷酸盐(BMI)改性氧化石墨烯(GO)文献摘要</a> <br /> <a href="/Article/Index/1126308">数学建模经验分享会For浙商大管工学院</a> <br /> <a href="/Article/Index/900687">OpenGL ES学习(8)——剪裁测试认识</a> <br /> </nobr> </li> <li class="list-group-item from-a mb-2"> 原文地址:https://blog.csdn.net/zzy979481894/article/details/132678717 </li> </ul> </div> <div class="col-lg-4 col-sm-12"> <ul class="list-group" style="word-break:break-all;"> <li class="list-group-item ul-li-bg" aria-current="true"> 最新文章 </li> <li class="list-group-item ul-li"> <nobr> <a href="/Article/Index/1484446">攻防演习之三天拿下官网站群</a> <br /> <a href="/Article/Index/1515268">数据安全治理学习——前期安全规划和安全管理体系建设</a> <br /> <a href="/Article/Index/1759065">企业安全 | 企业内一次钓鱼演练准备过程</a> <br /> <a href="/Article/Index/1485036">内网渗透测试 | Kerberos协议及其部分攻击手法</a> <br /> <a href="/Article/Index/1877332">0day的产生 | 不懂代码的"代码审计"</a> <br /> <a href="/Article/Index/1887576">安装scrcpy-client模块av模块异常,环境问题解决方案</a> <br /> <a href="/Article/Index/1887578">leetcode hot100【LeetCode 279. 完全平方数】java实现</a> <br /> <a href="/Article/Index/1887512">OpenWrt下安装Mosquitto</a> <br /> <a href="/Article/Index/1887520">AnatoMask论文汇总</a> <br /> <a href="/Article/Index/1887496">【AI日记】24.11.01 LangChain、openai api和github copilot</a> <br /> </nobr> </li> </ul> <ul class="list-group pt-2" style="word-break:break-all;"> <li class="list-group-item ul-li-bg" aria-current="true"> 热门文章 </li> <li class="list-group-item ul-li"> <nobr> <a href="/Article/Index/888177">十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!</a> <br /> <a href="/Article/Index/797680">奉劝各位学弟学妹们,该打造你的技术影响力了!</a> <br /> <a href="/Article/Index/888183">五年了,我在 CSDN 的两个一百万。</a> <br /> <a href="/Article/Index/888179">Java俄罗斯方块,老程序员花了一个周末,连接中学年代!</a> <br /> <a href="/Article/Index/797730">面试官都震惊,你这网络基础可以啊!</a> <br /> <a href="/Article/Index/797725">你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法</a> <br /> <a href="/Article/Index/797702">心情不好的时候,用 Python 画棵樱花树送给自己吧</a> <br /> <a href="/Article/Index/797709">通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!</a> <br /> <a href="/Article/Index/797716">13 万字 C 语言从入门到精通保姆级教程2021 年版</a> <br /> <a href="/Article/Index/888192">10行代码集2000张美女图,Python爬虫120例,再上征途</a> <br /> </nobr> </li> </ul> </div> </div> </div> <!-- 主体 --> <!--body结束--> <!--这里是footer模板--> <!--footer--> <nav class="navbar navbar-inverse navbar-fixed-bottom"> <div class="container"> <div class="row"> <div class="col-md-12"> <div class="text-muted center foot-height"> Copyright © 2022 侵权请联系<a href="mailto:2656653265@qq.com">2656653265@qq.com</a>    <a href="https://beian.miit.gov.cn/" target="_blank">京ICP备2022015340号-1</a> </div> <div style="width:300px;margin:0 auto; padding:0px 5px;"> <a href="/regex.html">正则表达式工具</a> <a href="/cron.html">cron表达式工具</a> <a href="/pwdcreator.html">密码生成工具</a> </div> <div style="width:300px;margin:0 auto; padding:5px 0;"> <a target="_blank" href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=11010502049817" style="display:inline-block;text-decoration:none;height:20px;line-height:20px;"> <img src="" style="float:left;" /><p style="float:left;height:20px;line-height:20px;margin: 0px 0px 0px 5px; color:#939393;">京公网安备 11010502049817号</p></a> </div> </div> </div> </div> </nav> <!--footer--> <!--footer模板结束--> <script src="/js/plugins/jquery/jquery.js"></script> <script src="/js/bootstrap.min.js"></script> <!--这里是scripts模板--> <!--scripts模板结束--> </body> </html>