Github Pages + jekyll 全面介绍极简搭建个人网站和博客

news/2024/5/20 2:32:26/文章来源:https://scottcgi.blog.csdn.net/article/details/84630283

本文将会全面介绍一下如何使用Github Pages + jekyll搭建个人站点,所谓极简的意思就是不用使用git和本地构建jekll服务,直接在Github网站上编辑设置即可,但会涉及到jekll的一些配置和编程控制。可以参看我的网站模板:https://scottcgi.github.io 使用了github内置的主题修改而成。

文章目录

    • 第一步,建立Github仓库
    • 第二步,设置仓库开启Github Pages
    • 第三步,使用Github内置主题
    • 第四步,jekyll的目录结构
    • 第五步,jekyll的模板编程语言Liquid的使用
    • 第六步,使用_config.yml文件设置jekyll
    • 第七步,_layouts模板配置
    • 第八步,md和html页面编写
    • 第九步,博客文章编写和管理
    • 第十步,Github Pages的限制
    • 总结

第一步,建立Github仓库

首先到这里Github,创建一个仓库。

仓库名称有固定的格式: username.github.io,其中username必须是Github账户的用户名(我的是scottcgi),github.io是固定的,这个地址将会成为个人站点的网站地址。另外,我们可以勾选Initialize this repository with a README,让仓库自动创建一个README.md文件,我们用它来做站点的首页(当然也可以不创建,后面自行创建,或是建立index.html也行)。

注意: username如果不是Github账户名,这个仓库就会成为username.github.io的子站点,比如访问地址会是:username.github.io/aaa.github.io。可见,username.github.io是github默认分配给你的域名,同名仓库即代表着默认网站内容。而username.github.io/仓库名称,是用来访问你的其它仓库的地址。

第二步,设置仓库开启Github Pages

进入仓库设置界面,如图。

这里能够重新修改仓库的名称,比如这个仓库内容是fork别人的,就可以在这里修改成自己的username.github.io名称。

Setting页面下有Github Pages的设置选项。绿色表示部署成功,每次修改仓库内容,都会出发Github jekyll重新编译部署,需要1-2分钟的时间,更新才能体现。如果有编译错误,包括js,css,html,markdown语法问题,都会显示红色以及错误页面和行号,同时会发邮件通知。其中,Source有以下几个选项:

  • gh-pages branch 是项目新建一个分支命名为这个,使用这个分支来做站点内容。
  • master branch 是使用主分支也是默认的,来作为站点内容。
  • master branch/docs folder 是使用主分支的docs文件夹来作为站点内容。
  • None 就是禁用Github Pages。

如果是username.github.io只能使用主分支,其它仓库项目可以选择其它两个。接下来Choose a theme是Github提供的内置的网站主题,选择即可应用无需其它设置。Custom domain是自定义域名,本文暂不讨论。

第三步,使用Github内置主题

选择好主题,过一会刷新网站地址就已经能看到效果了,而在Code页面仅有两个文件。

编辑README.md文件的内容,就会默认显示在网站首页,_config.yml 是jekyll的全局配置文件,现在里面只有一句话,theme: jekyll-theme-modernist。我们可以手动修改这个theme主题配置,网站就会应用不同的主题。

Github内置支持的几个主题,官方的仓库在这里:https://pages.github.com/themes,每个README.md里都有介绍如何设置。

那么我们现在就有两种方法来使用这些主题:

  • 第一种,就是直接fork一个主题仓库,然后修改仓库名称为我们自己的,然后修改我们需要的部分。

  • 第二种,只是简单的Choose (Change) theme(或在_config.yml设置theme),然后我们对照着官方仓库的主题目录,需要改什么文件就按照同样的路径拷贝单独一个文件到自己的仓库来修改(保持路径一致),这样就可以保持自己仓库的简洁。(如果使用了github内置的主题,github就会把你仓库的内容和内置主题内容合并到一起编译成静态网页。)

另外,更多主题可以参看这两个地址(不要挑花眼了): jekyll themes 和 jekyll wiki site。

第四步,jekyll的目录结构

我们只需要关注几个核心的目录结构如下(可以自己创建):

  • _layouts (存放页面模板,md或html文件的内容会填充模板)
  • _sass(存放样式表)
  • _includes (可以复用在其它页面被include的html页面)
  • _posts(博客文章页面)
  • assets(原生的资源文件)
    • js
    • css
    • image
  • _config.yml (全局配置文件)
  • index.html, index.md, README.md (首页index.html优先级最高,如果没有index,默认启用README.md文件)
  • 自定义文件和目录

更多更详细的目录结构参看jekyll官网:https://jekyllrb.com/docs/structure

第五步,jekyll的模板编程语言Liquid的使用

  • 变量 {{ variable }} 被嵌入在页面中,会在静态页面生成的时候被替换成具体的数值。常用的全局变量对象有:sitepage。这两个对象有很多默认自带的属性,比如:{{ site.time }}{{ page.url }}。更多的默认值参看:https://jekyllrb.com/docs/variables。

    • site对象对应的就是网站范围,自定义变量放在_config.yml中,比如title:标题使用{{ site.title }}访问。
    • page对象对应的是单个页面,自定义变量放在每个页面的最开头,比如:
       ---myNum:100myStr:我是字符串---
      
      使用{{ page.myNum }}{{ page.myStr }} 访问。
  • 条件判断语句,更多详见:https://shopify.github.io/liquid/tags/control-flow

    {% if site.title == 'Awesome Shoes' %}These shoes are awesome!
    {% endif %}{% if site.name == 'kevin' %}Hey Kevin!
    {% elsif site.name == 'anonymous' %}Hey Anonymous!
    {% else %}Hi Stranger!
    {% endif %}
    
  • 循环迭代,更多详见:https://shopify.github.io/liquid/tags/iteration

    {% for product in collection.products %}{{ product.title }}
    {% endfor %}
    
  • 默认函数,可以对变量进行一些处理,比如大小写转化、数学运算、格式化、排序等等,在Liquid中叫做Filters。比如{{ "Hello World!" | downcase }}转换字符串为小写。更多内置函数详见:https://jekyllrb.com/docs/liquid/filters

第六步,使用_config.yml文件设置jekyll

如果不是fork别人的仓库,就需要自己创建一个这个文件。然后,我们就可以配置一些默认的属性来控制jekyll的编译过程。更多详细的内置属性详见:https://jekyllrb.com/docs/configuration/default

同时我们可以自定变量,会自动绑定到site对象上,比如我们可以把导航配置到_config.yml中:

nav:
- name: Homelink: /
- name: Aboutlink: /about.html
// 以下嵌入页面,page.url以 "/" 开头
<nav>{% for item in site.nav %}<a href="{{ item.link }}" {% if page.url == item.link %} style="color: red;" {% endif %}>{{ item.name }}</a>{% endfor %}
</nav>

当然,我们也可以把一些数据单独放入一个yml文件,然后放在固定的数据文件夹_data下,比如_data/navigation.yml,这样访问这个文件的数据对象就是site.data.navigation

第七步,_layouts模板配置

_layouts文件夹存放的是页面模板,默认需要一个default.html,什么意思?就是说,layout提供一个页面的布局框架,这是固定的模式,包括样式、结构、布局、脚本控制等等。然后,我们在用其它md或html文件去动态填充这个框架,这样就形成了一个完整的页面。比如我的default.html页面如下:

<!doctype html>
<html lang="{{ page.lang | default: site.lang }}"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge">{% seo %}<link rel="icon" href="https://avatars0.githubusercontent.com/u/1797320" type="image/x-icon" title="scottcgi"><link rel="stylesheet" href="{{ '/assets/css/style.css?v=' | append: site.github.build_revision | relative_url }}"><script src="{{ '/assets/js/scale.fix.js' | relative_url }}"></script><meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"></head><body><div class="wrapper"><header {% unless site.description or site.github.project_tagline %} class="without-description" {% endunless %}><h1>{{ site.title | default: site.github.repository_name }}</h1> <p>{{ page.description | default: site.description }}</p><ul>{% for item in site.nav %}{% if page.url == item.link %}<li style="background-color:#069"><a href="{{ item.link }}"><strong>{{ item.name }}</strong></a></li>{% else %}<li><a href="{{ item.link }}">{{ item.name }}</a></li>{% endif %}{% endfor %}</ul></header><section>{{ content }}</section></div><footer><p>{{ site.copyright | default: "copyright not found in _config.yml" }}</p></footer></body>
</html>
  • {% seo %} 是jekyll的一个插件提供的seo优化,详情在这里:https://github.com/jekyll/jekyll-seo-tag
  • 核心在于 {{ content }} 这个变量是内置的,会用我们的md或html页面填充这部分内容。
  • 其它的,我们看到会大量使用变量和流程控制代码,来填充模板的方方面面。
  • 于是,填充模板的内容,一方面是来自读取配置文件的变量,一方面是来自_includes的页面,还有就是来自 {{ content }} 对应的页面。

当然,我们也可以不使用 {{ content }} 来填充模板,而是使用_includes的页面来代替{{ content }} ,但这样不够灵活,因为使用 {{ content }},我们可以在每个页面单独设置对应的layout模板。

第八步,md和html页面编写

站点内容页面,可以使用markdown或html来编写,但markdown编写的md文件,在浏览器地址访问的时候依然使用html文件后缀。推荐使用markdown来书写内容,语法参见:Github md 示例 和 Github md 教程。比如下面这个About.md页面:

---
layout: default
title: About
---
# About pageThis page tells you a little bit about me.

layout: default 就是告诉jekyll这个页面使用哪个模板,即这个页面会放入哪个模板的{{ content }}。当然,我们可以在_layouts文件夹下提供多个不同的模板,然后根据需要不同的页面使用不同的layout

页面可以放在任意位置和目录,访问的时候从站点域名开始,带上目录名称,再次注意需要使用html结尾。如果想要自定义浏览器的访问路径,可以参看详细设置:permalinks。

md和html页面的区别:

  • md有自己的语法,可以使用少量的html标签,最终会编译成html,侧重于内容编写。
  • html可以随意使用html标签,可以使用liquid模板语言,侧重于页面模板和功能控制。

至此,我们就可以在github上,新建md文件然后编辑提交,等待几分钟编译生成之后,就可以在浏览器里看到页面内容了。

第九步,博客文章编写和管理

我们自然可以新建目录,提交文章,然后添加一个文章列表页面。但我们也可以把这些交给jekyll的内置机制来完成,因为它提供了一些方便的内置文章管理功能。

  • _posts文件夹是内置的放置文章的目录,我们可以将固定格式year-moth-day-name.md名称的md文件放到这里。比如新建一篇md的博客文章放到_posts目录下:

    ---
    layout: post
    ---
    这是一篇博客文章。
    
  • 接下来我们需要添加一个post的模板页面到_layouts文件夹下面。

    ---
    layout: default
    ---<h1>{{ page.title }}</h1>
    <p>{{ page.date | date_to_string }} - {{ page.author }}</p>{{ content }}
    

    可见,模板页面本身也可以使用模板,这里post使用了default模板,而这里{{ content }} 就会填充_posts下面编写的页面(如果页面使用了layout: post模板)。

  • 最后,我们还需要编写一个博客文章列表的页面,用来展示所有的文章。比如在根目录新建blog.html页面:

    ---
    layout: default
    title: Blog
    ---<h1>Latest Posts</h1><ul>{% for post in site.posts %}<li><h2><a href="{{ post.url }}">{{ post.title }}</a></h2><p>{{ post.excerpt }}</p></li>{% endfor %}
    </ul>
    
    • site.posts jekyll会自动生成_posts目录的对象。
    • post.url jekyll会自动会设置在_posts目录下的页面url。
    • post.title 默认是md文件名称,但也可以在文章页面自定义title: 我的文章自定义名称
    • post.excerpt 默认是文章第一段的摘要文字。

第十步,Github Pages的限制

Github Pages 并不是无限存储和无限流量的静态站点服务,一些限制如下:

  • 内容存储不能超过1GB。
  • 每个月100GB流量带宽。
  • 每小时编译构建次数不超过10次。(在线修改重新编译并未发现这个限制)
  • 更多参看官方说明:usage-limits。

总结

在实际的使用过程中,我发现完全可以在Github网站上,编写md和html页面,修改js和css文件,来完成站点的设置和搭建。只不过每次修改都要触发Github jekyll的编译行为,有点慢(不知道是不是增量编译),没有在本地修改调试的速度快。

更多jekyll详细的设置和功能,参看官方网站的文档:https://jekyllrb.com/docs。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_850992.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

css可以对网页干什么,css对网页的优势-专业SEO技术教程(33)

css对网页的优势-专业SEO技术教程(33)采用css布局相对于传统的table网页布局的显著优势1.表现和内容相分离将设计部分剥离出来的放在一个独立样式文件中&#xff0c;HTML文件中只存放文本信息。这样的页面对搜索引擎更加友好。2.提高页面浏览速度对于同一个页面视觉效果&#x…

【转载】IIS网站如何同时解析带www和不带www的域名

针对公网上线的网站系统&#xff0c;很多网站的域名会同时含有带www和不带www的域名解析记录&#xff0c;如果需要同时解析带www和不带www的域名信息&#xff0c;则需要在相应的域名解析平台(如阿里云域名解析平台、腾讯云域名解析平台)设置不带www的主域名以及带www的域名解析…

搜索引擎优化:常用的SEO六个指标

在做网站推广过程中&#xff0c;搜索引擎优化是一个重要点&#xff0c;绝大部分行业来自自然搜索的流量都是非常大的&#xff0c;正因为如此&#xff0c;一般企业隔一段时间就对网站自然搜索的情况作一个KPI考核&#xff0c;而这些重点指标不外乎&#xff1a;网页的收录数量、网…

阿里云上发布自己的网站的方法

在阿里云上发布自己的网站的方法&#xff1a; 一、在阿里云上发布自己的网站的方法&#xff1a; 进入我的电脑&#xff0c;在头部输入ftp&#xff1a;//60.205.48.122&#xff08;IP地址为自己注册的阿里云账号上的IP地址&#xff09; 进入以后登录自己的账号 用户名&#x…

java使用HttpURLConnection检索网站时403错误处理方式

java使用HttpURLConnection检索网站时403错误处理方式: 我们通过代码方式访问网站时会报错&#xff1a; 此种情况分2中类型&#xff0c; 1.需要登录才可以访问&#xff1b; 2.需要设置User-Agent来欺骗服务器。 connection.setRequestProperty("User-Agent", &qu…

解决某些网站,图片不能下载

如下图&#xff0c;右键图片&#xff0c;没有保存图片的选项 按下F12 拷贝src中的地址&#xff0c;输入到浏览器&#xff0c;这时候就可以保存图片了

给duckling网站加上cnzz网站统计信息

第一&#xff0c;注册cnzz帐号&#xff0c;网址http://www.cnzz.com/ 第二&#xff0c;登录帐号&#xff0c;获取代码&#xff1b; 第三&#xff0c;根据自己的需要&#xff0c;将代码加入网站的公共页面&#xff0c;比如说head、foot、version页面都可以。 第四&#xff0c…

网站压力测试工具Jmeter安装与使用

系统是Windows XP 配置此工具前&#xff0c;需要先在机器上安装jdk 如下是在jdk1.7的基础上配置的&#xff1b; 安装步骤如下&#xff1a; 第一步&#xff1a;解压apache-jmeter-2.8.zip文件至c盘&#xff0c;本文解压至C:\jmeter2.8目录下。 第二步&#xff1a;桌面上选择“我…

十大抢手的网站压力测试工具

原文链接&#xff1a;http://blog.163.com/weiwenjuan_bj/blog/static/1403503362010621111052355/ 两天&#xff0c;jnj在本站发布了《如何在低速率网络中测试 Web 应用》&#xff0c;那是测试网络不好的情况。而下面是十个免费的可以用来进行Web的负载/压力测试的工具&#x…

使用WinSCP 上传 jeecms 到linux centos中 显示乱码问题,网站无法使用的解决方法

第一、设置WinSCP上传时的编码为utf-8如下&#xff1a; 第二、将linux的默认字符集设置为zh_CN.UTF-8 vi /etc/sysconfig/i18n 内容如下&#xff1a; LANG"zh_CN.UTF-8" SUPPORTED"zh_CN.UTF-8:zh_CN:zh" SYSFONT"latarcyrheb-sun16" [rootcan…

如何使用firefox浏览器查看记住的网站密码

工具——》选项——》安全 如下图&#xff1a; 点击就出现浏览器记住的登录网站、帐号、密码了&#xff0c;密码是明码。

如何使用遨游浏览器查看记住的网站密码

点击“显示密码”即可&#xff0c;密码是明码&#xff01;

tomcat部署多个项目,通过不同域名解析访问不同的网站

win7、tomcat8、jdk1.7 第一&#xff1a;通过配置hosts文件模拟&#xff0c;hosts文件所在路径&#xff1a;C:\Windows\System32\drivers\etc 修改如下&#xff1a; #测试tomcat配置多个项目&#xff0c;用二级域名访问 127.0.0.1 www.ibelieve.com 127.0.0.1 bbs.ib…

.NET中实现网站的国际化

本文适当的修改了原文&#xff0c;&#xff0c;特此说明 原文地址&#xff1a;http://dotnet.9sssd.com/aspnet/art/949 网站在开发的过程中需要实现多语言版本&#xff0c;我们暂且认为有英语和汉语两个版本。网站结构包括&#xff0c;UI过程&#xff0c;rest服务&#xff0…

人生苦短,我用Python(二)— 爬取会议网站 EasyChair Smart CFP

寒假留校帮学长写了个爬虫&#xff0c;抓取会议网站上一些CFP信息。想着把一些知识点、坑点记下来&#xff0c;一来做个小总结给工作收收尾&#xff0c;二是以后再遇到好从容应对。 这是我写的第二个比较完善的爬虫了&#xff0c;比第一个要简单许多&#xff0c;完全过程化的代…

由12306.CN谈谈网站性能技术http://coolshell.cn/articles/6470.html

由12306.CN谈谈网站性能技术 2012年01月16日 陈皓 评论 340 条评论 163,061 人阅读 12306.cn网站挂了&#xff0c;被全国人民骂了。我这两天也在思考这个事&#xff0c;我想以这个事来粗略地和大家讨论一下网站性能的问题。因为仓促&#xff0c;而且完全基于本人有限的经验和…

搭建VueJS2.9+ElementUI单页面网站,编写导航页,导航栏跳转、切换

对于一个单页面应用来说&#xff0c;导航页是至关重要的一个页面&#xff0c;所有的组件都会在这个页面里进行显示。先看效果图&#xff0c;文章最下边有我的模板源代码下载路径。接下来我们就开始进行导航页的开发。 1、安装vue-router 搭建vue环境时装过的忽略此步骤。在…

大型网站系统架构分析

本文转载自博客 Mainzs Blog 感谢作者的辛勤劳动成果过 大型网站系统架构分析 千万级的注册用户&#xff0c;千万级的帖子&#xff0c;nTB级的附件&#xff0c;还有巨大的日访问量&#xff0c;大型网站采用什么系统架构保证性能和稳定性&#xff1f; 首先讨论一下大型网站需…

大型网站架构演变和知识体系

&#xff08;原文&#xff1a;http://www.blogjava.net/BlueDavy/archive/2008/09/03/226749.html&#xff09;之前也有一些介绍大型网站架构演变的文章&#xff0c;例如LiveJournal的、ebay的&#xff0c;都是非常值得参考的&#xff0c;不过感觉他们讲的更多的是每次演变的结…

大型网站架构

这里转载几篇关于大型网站架构方面的内容&#xff0c;以便日后细细品读。一下内容均来自Mainzs Blog 架构设计之性能设计经验 性能(performance)设计非常重要&#xff0c;对于服务器端实时交易系统来说系统性能的重要性不言而喻&#xff0c;对客户端软件来说性能好的软件也…