一、方案选择

大体上讲,搭建个人网站有几种常见的方案技术路线。一种是分为前端和后端,使用web服务器处理web请求的通用网页方案;另一种是使用静态网页生成器将所有网页内容预先生成为静态文件(如 HTML、CSS、JavaScript),然后部署到静态网页托管平台上。

前者是web网页的一般方法,由前端和后端两部分组成。前端负责提供网页的结构、布局和交互等可视化的直接和用户接触的部分,后端负责处理请求的业务逻辑、数据存储和安全性等涉及服务器端的部分。

  • 前端的核心是HTML、CSS、JavaScript三个部分,分别对应了网页的结构、布局和交互处理。除此以外,还有其他基于JavaScript的前端的框架(如 ReactVue.jsAngular)用来简化网页交互的编写。

  • 后端的核心是Web服务器、后端框架和数据库。

    • Web服务器主要用于连接用户的网页请求和用于处理请求的服务器。具体来说:主要负责处理用户HTTP/HTTPS请求、对后端的服务器进行反向代理和负载均衡。
    • 后端框架则主要用于处理业务逻辑,负责对web服务器代理后的请求进行处理。常见的后端框架有:Python的Django,和Flask、JavaScript的Node.js、Java的Spring等。
    • 数据库则是十分明了的用于存储和管理数据。常见的数据库包括:MySQLOracle(关系型数据库)、MongoDBRedis(非关系型数据库)。

后者是用于生成静态网页的方法,即使用静态网页生成器(如JekyllHugoHexo等)预先生成好网页,将之存为不需要服务器端处理的文件(如HTMLCSSJavaScript)。静态网页可以直接使用静态网页托管平台直接进行部署,如Github PagesVercelNetlify等。

动态网页的灵活性更高,可以处理更多的交互需求,但是需要服务器端的支持,部署较为复杂,需要额外的服务器;静态网页的灵活性较差,但是部署简单,可以直接使用Github Page进行部署(还省去了配置公网IP和网页备案的麻烦)。对比两种方案,静态网页的方案适合个人主页低更新频率,交互性较弱的应用需求。

因此,我最后选择了静态网页的方案,使用Jekyll的Minimal Mistakes主题Github Pages静态网页托管平台组合的方案搭建了自己的个人主页。

首先,我在运行了ubuntu的虚拟机上下载Jekyll和其所需要的环境。然后,根据自己的使用需要,按照MInimal Mistakes的文档说明修改了_config.yml配置文件,调整了个人主页的一些常用设置。最后使用Github Page的部署功能来部署整个网页。

PS.除了使用模板以外,也可以根据自己需要的格式修改_layout文件夹中的模板。添加自己想要的内容。

二、Jekyll和Minimal Mistakes主题

Jekyll是一个基于 Ruby 语言开发的开源静态网页生成器。其核心原理是将包含文本内容(如 Markdown 文件)、布局模板(如 HTML 模板)和配置文件(如_config.yml)的源文件目录,通过一系列的转换和处理,生成最终的静态网站(HTML、CSS、JavaScript 等文件的集合)。Minimal Mistakes是一个Jekyll的主题,提供了丰富的功能和灵活的配置选项,可以方便地设置美观的网页的布局和样式。

1.部署Jekyll环境

这一步其实来说并不是必要的,只是在本地拥有可以使用Jekyll构建网页的环境对于修改个人主页的一些功能来说会更加的方便。你也不想每次对网页布局之类的细微修改的尝试都要push到github上然后重新等待他慢慢的生成网页吧,这实在是太麻烦了

首先你需要确保的是你拥有一个Linux的虚拟机环境,不管是VMware或者WSL都可以。我使用的是WSL,可以直接在VScode中使用。非常的方便,用过都说豪用。具体怎么弄我这里就不赘述了,网上有很多教程。

  1. 安装 Ruby:

    Jekyll 是基于 Ruby 构建的,所以首先需要安装 Ruby。通过以下命令安装 Ruby:

    sudo apt - get update
       
    sudo apt - get install ruby - full
    
  2. 安装 Jekyll 和 Bundler(RubyGems 包管理器):

    在安装好 Ruby 后,可以使用 RubyGems 来安装 Jekyll 和 Bundler。在终端(命令提示符或 PowerShell)中输入以下命令:

    gem install jekyll bundler
    
  3. 创建项目

    a. 新创建项目

    jekyll new .
    

    b. 从原有的模板复制一个项目

    最简单的方法就是直接使用git clone直接复制这个项目的文件下来。

     git clone https://github.com/HONEST-ZH/HONEST-ZH.github.io.git
    
  4. 修改网页

    修改_config.yml或者_layout里的布局文件来达到你满意的网页效果。

  5. 本地运行尝试

    执行以下命令来运行本地运行jekyll网页的服务器,工作的ip地址是127.0.0.1:4000

    bundle install
    bundle exec jekyll serve
    
  6. 重复4-5直到网页满足你的需求。

三、设置Github Page

对于一般的静态网页而言,我们只需要将jekyll项目提交到名为username.github.io的仓库中(名字需要和github的账户名字一致,否则会无效),然后再选择Settings-Pages-Deploy From a Branchbranch-main。完成设置以后,就可以实现静态网页的部署了,Github会在Action中自动新建一个名为pages-build-deployment的工作流,每次选定的分支(main)上发生推送时会自动地构建和部署网页。

但是这里因为我使用了Minimal Mistakes模板的原因,网页是没有办法使用这种方法的直接生成的。网页在编译时会报错,找不到模板的Gem包。

这是因为默认的pages-build-deployment工作流没有去下载所需要的依赖,而缺少了Jekyll模板。解决这个问题的方法也很简单,就是自己创建一个工作流保证每一次都能把所需要的依赖装好。

1. 创建gh-pages.yml工作流文件

在项目的根目录下创建.github/workflows文件夹然后添加gh-pages.yml文件。

mkdir -p .github/workflows
touch .github/workflows/gh-pages.yml

2. 编写gh-pages.yml

在gh-pages.yml文件中写入:

name: GitHub Pages
on:
  push:
    branches:
      - main  # 监听的分支
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Set up Ruby
      uses: actions/setup-ruby@v1
      with:
        ruby-version: '3.2'  # 确保使用正确的 Ruby 版本
    - name: Install dependencies
      run: bundle install
    - name: Build the site
      run: bundle exec jekyll build
    - name: Deploy to GitHub Pages
      uses: peaceiris/actions-gh-pages@v3
      with:
        github_token: $
        publish_dir: ./_site

这个工作流在每次检测到main分支上有推送时:下载所需要的Gem包依赖,构建静态网页,将静态网页的文件推送到一个专门用于存储静态网页的分支gh-pages

3. Github pages从gh-pages分支部署

gh-pages分支被更新后,还没有完成网页的部署。此时需要把github page关注的分支换为gh-pages,根据每次推送到gh-pages上的文件部署静态网页。工作流的结果显示如下图所示,此时就可以在username.github.io中访问个人主页的页面了。

四、网页的使用

1.基本FrontMatter

---

title: "文章标题"

date: 2023-10-20

last_modified_at: 2023-10-21    # 最后修改时间

categories:

  - 技术

  - ZMQ

tags:

  - 消息队列

  - 网络编程

toc: true                       # 显示目录

toc_sticky: true               # 固定目录

toc_label: "目录"              # 目录标题

toc_icon: "cog"               # 目录图标

#图片

header:

  image: /assets/images/header.jpg           # 头部大图

  teaser: /assets/images/teaser-image.jpg    # 预览图

  overlay_image: /assets/images/banner.jpg   # 覆盖图

  overlay_color: "#333"                      # 覆盖颜色

  caption: "图片来源: [**网站**](链接)"      # 图片说明



excerpt: "这是文章摘要,将显示在文章列表中"    # 文章摘要

# 作者相关

author: Your Name

author_profile: true    # 显示作者信息

# 布局相关

layout: single

classes: wide          # 宽屏显示

# 评论相关

comments: true        # 启用评论

share: true           # 显示分享按钮

# 相关文章

related: true         # 显示相关文章

# 阅读时间

read_time: true       # 显示预计阅读时间

# 导航

sidebar:

  nav: "main"        # 侧边栏导航

# SEO相关

description: "这是一段用于SEO的描述"

keywords: "关键词1, 关键词2"

---

2.AI工具生成顶部配图

使用ChatGPT生成提示词,然后使用DALLE-3生成图片

提示词应该具有的结构:

  • 主题描述 描述主要场景或元素,让 AI 理解你想要生成的内容是什么。
  • 细节补充 包括场景的颜色、灯光、材质等信息,增加细节丰富度。 *情感与氛围 指定图像的情感和氛围,如“宁静”、“温暖”、“科幻感”等。
  • 视觉风格 选择一种视觉呈现方式,如“水彩画风格”、“数字艺术”、“摄影级真实感”等。
  • 构图与比例 提到图像的布局与比例,如“宽屏横向构图”、“16:9比例”。
  • 特定要求(可选) 如果需要特别的元素,比如“背景模糊”或“有特定的道具”,也可以写明。

例如: 提示词为

A breathtaking sunset over a calm ocean, 
with soft waves reflecting the warm orange and pink hues of the sky, a few scattered clouds, and silhouetted palm trees framing the scene.
Cinematic wide-angle composition, 16:9 aspect ratio, high detail, serene and peaceful mood, digital painting style,1200px width

生成的图像为

3.Markdown文档编写

使用Marktext以方便的编写MarkDown笔记,可以直接粘贴图片。图片可能被以网络链接的方式引用,也可能保存在本地的C:\Users\HONEST\AppData\Roaming\marktext\images\路径下,需要把图片的路径改成/assets/images/blog_header或者/assets/images/blog

linux路径使用/,windows路径使用 \
要在使用jekyll构建好的网页之间进行链接的跳转,需要使用网页的永久链接跳转。
手动输入[](/url)。 或者,使用liquid的link标识获得文件的路径[](\{\% link path/to/file \%\})

手动输入URL时需要注意:

  1. 空格使用-代替
    2.跳转的博客最后不带文件名,不带开头的日期
    最简单的方法就是从想要链接到的博客的浏览器抬头处复制URL

使用link标识时需要注意 :
1.开头的第一个文件没有 /

  1. 使用空格取代%20
    最简单的方法,复制想要链接到的博客的文件路径然后修改(大部分博客名称应该没有空格,注意\和/)