前言

谈不上个人品牌的打造,也谈不上被动收入的项目,但我的确是受到近几年的FIRE运动浪潮和创作者经济的影响,不断的捏造这个个人博客的小泥人,不断的重新思考如果我做一个自己的网站,对自己和他人能有什么积极的意义。

想到就去做,做事情我喜欢start small。执行的过程中,现实这只手会慢慢推动你去往另外一个地方。况且,输出文字帮助我mental clarity,减压不少,单单是这一点,就已经是写作的动力了;而如果还能结交到同好两三,更是我的荣幸。

因为工作的原因一开始用wordpress建站,YouTube的算法把我带到林猫先生的频道,又开启了一扇门…经过疫情的催化,以及区块链技术的萌芽,更让我相信辛苦工作之余,必须抽出时间skin in the game,做一些更个人化、去中心化的项目以此反脆弱,给这个世界留下一点微不足道的声音,而通过做个人网站,这个声音可以很自由,很独立。

所以,why Hugo?

  • 速度超快,之前的wordpress我习惯把主机架设在国外,国内用户访问速度受限;而Hugo是html静态网站不涉及后台运行;
  • 维护简单,不存在wordpress整天在更新插件;
  • 主题极简,例如目前使用的PaperMod,非常纯粹;
  • 几乎免费,除了购买域名,搭建Hugo网站的服务如Github和Netlify都是免费的。

建站

环境建设

由于我使用的是Mac,以下的操作适用于macOS。

安装Homebrew。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

需要注意的是如上code可能会被更新,请根据最新的安装代码执行;另,如果安装极度缓慢,可以执行如下国内镜像源备选(我就是执行第一个镜像源成功)。

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

可以通过如下检查版本验证Homebrew是否安装成功。

brew -v

安装git。

brew install git

可以通过如下检查版本验证git是否安装成功。

git -v

安装hugo。

brew install hugo

建立网站

可以选择你的网站资料所存放位置,比如文稿Documents,则先进入Documents。

cd Documents

例如新建一个名为demo-blog的网站;配置成Yaml是可选项,系统默认是Toml,选择成Yaml是因为语言比较简单(听说啦);常见的语言有Yaml,Toml和Json。

hugo new site demo-blog -f -yml

网站建立成功,则在文件夹生成如下文件


├── archetypes # 存放front matter
├── assets
├── content # 存放网页的Markdown文件
├── data # 存放数据文件,通常是json/yaml/toml 文件
├── layouts # 存放HTML模板
├── static # 存放静态文件比如图片img,会被复制到public目录下
├── themes # 存放现有的主题模板
└── config.yml # 全局配置文件

安装主题

进入刚创建好的文件地址中(已进入Documents)。

cd demo-blog

进入hugo主题网站选一个合你心水的,比如我选的PaperMod,其Github有其他安装方法,但第一个方法就可以给他run下去,theme文件夹里出现PaperMod文件夹说明安装成功。

git clone https://github.com/adityatelange/hugo-PaperMod themes/PaperMod --depth=1

VS Code打开demo-blog,配置config.yml,增加theme命令以此连结主题PaperMod。

baseURL: "" # 网址这个地方可以先放空
languageCode: en-us
title: eddylu # 这个网站叫什么名字
theme: PaperMod # 主要是增加这个配对主题

试运行blog。

hugo server

终端运行出网站服务器,打开浏览器,输入http://localhost:1313,如果成功即可以看到个人网站的雏形。

写篇文章试试!

posts指代的是content下的一个文件夹,我把所有文章都放在posts底下;first代表第一篇文章。

hugo new posts/first.md

如果想把文章做分类,比如美食和电影,则

hugo new food/firstfood.md

hugo new movie/firstmovie.md

进入刚建立的md文件,系统有自带的front matter模版,亦可以增添自己想要的功能。

---
title: "frist" # 此处修改文章名
date: 2023-02-20T14:08:56+08:00 # 日期可改
draft: false # 是否为草稿
---
你好,我是第一篇博客。

保存后刷新本地端口如果看到第一篇文章被同步了,那么代表个人主页已经成功建立了。这类的页面属于single page。

基础配置

有了网站的基础框架当然还不着急发布,因为还有一些连膝盖想都必须有的基础模块还未被加入。如下一些模块仅供参考,未来持续加入更多…

添加分类和标签

在config.yml里加入

menu:
  main:
    - identifier: categories
      name: Categories
      url: /categories/
      weight: 10 # 重量越轻,就越往前面排,“1”则是置顶
    - identifier: tags
      name: Tags
      url: /tags/
      weight: 20

注:这是categories和tags是系统默认的类目 (taxonomy),我们也可以添加其他的,但必须在config.yml里加入代码,比如想加入moods类目(比如happy或sad),如下代码,也必须把默认的categories和tags写上。这类的页面属于list page。

[taxonomies]
  tag = "tags"
  category = "categories"
  mood = "moods"

在posts里面的md文件,增加tags和categories的代码,后续可以串接到各自的list page。

---
title: "2022币圈7大崩坏" 
date: 2022-09-29T14:08:56+08:00
draft: false

tags: ["crypto","blockchain"]
categories: ["blockchain"]
---

添加时间轴

在config.yml里加入

menu:
  main:
  - identifier: archives
    name: Archives
    url: /archives/
    weight: 10

在content下面新建一个archives.md。

---
title: "Archives"
layout: "archives"
url: "/archives/"
summary: "archives"
---

添加搜索功能

在config.yml里加入

outputs:
  home:
    - HTML
    - RSS
    - JSON 
menu:
  main:
  - identifier: search
    name: Search
    url: /search/
    weight: 10

在content下面新建一个search.md。

---
title: "Search" 
layout: "search" 
summary: "search"
placeholder: "search"
---

添加评论功能

cusdis.com注册一个账号,并取得自己的Embed code。

把如下代码贴进去自己的footer模版里,新建一个single页面模版在layouts/_default/single.html

  <!-- Comments by Cusdis -->
      <h4>Comments:</h4>
      <div id="cusdis_thread" data-host="https://cusdis.com"
        data-app-id="See your dashbord on Cusdis" # 把自己的Embed code贴进这里!
        data-page-id="{{ .File.UniqueID }}" data-page-url="{{ .Permalink }}"
        data-page-title="{{ .Title }}"></div>
      <script async defer src="https://cusdis.com/js/cusdis.es.js"></script>

建立layouts的html模版以覆盖系统模版

在layouts下建立一个新文件夹_default,再在底下建立一个archives.html;将themes/PaperMod下吗的layouts/_default的archives文件的html内容复制到刚才新建的archives.html里,则可以在里面做随心所欲的模版修改。

常用params参数

在config.yml配置一些基础的params,更多的配置可以见Github的PaperMod模版

params:
  homeInfoParams:
    Title: '学习、思考和思考的地方' # 主题
    Content: '写一些给自己看的内容,然后觉得做一个网站比较屌而已' # 描述
  SocialIcons:
      -name: facebook # 可选
       url: 'www.facebook.com'
 
params:
  ShowBreadCrumbs: true # 面包屑导航
  ShowReadingTime: true # 阅读时间
  ShowShareButtons: true # 分享按钮
  ShowPostNavLinks: true # 文章前后页按钮
 

常用Markdown语法syntax

自定义url,在front matter增加:

url: "whateveryouwant” # 直接在域名后面的url

增加TOC (Table of Content)文章导航,在front matter增加:

ShowToc: true 
TocOpen: true # 默认展开

标题:

# 这是 H1
## 这是 H2
###### 这是 H6

列表:

- 列表项目
1. 列表项目

粗体、斜体和删除线

*我是斜体超屌*   # 或_斜体_
**粗体才是真的屌**
***加粗斜体***
~~删除线~~

插入链接:

[链接文字](链接网址)

插入图片:

![alt text](/path/to/img.jpg)

插入行内代码块:用`包住头尾

`行内代码块`

插入代码块:用```包住头尾,并指定一种语言(也可以不指定)

我是代码块

引用:

> 引用内容Quote

分割线:

---

换行:

<br>

制作表格:|分隔不同的单元格,-分隔表头和其他行

|  表头   | 表头  |
|  ----  | ----  |
| 单元格  | 单元格 |
| 单元格  | 单元格 |
表头 表头
单元格 单元格
单元格 单元格

插入注解footnote

xxx[^1]
[^1]: 注解内容

更多的syntax可以见这里

部署

Mac终端执行Hugo,则内部开始建立网站,此时本地public文件夹会多出许多文件。

hugo

Github

注册一个Github账号并创建一个仓库repository。

终端进行git初始化。

git init

建立git模块。

touch .gitmodules

在 VS Code 的 .gitmodules 里面输入 git 模块内容。

[submodule "themes/PaperMod"]
    path = themes/PaperMod
    url = "https://github.com/adityatelange/hugo-PaperMod.git"

提交版本库。

git commit -m "first commit"

注:如果这里没有成功,可以在 VS Code 里的 Source Control 里输入「first commit」,然后点击打勾试试,如果跳出来需要 user name 和 user email,可以再终端输入

git config --global user.name "firstname lastname"

git config --global user.email 你的邮箱

创建分支。

touch git brach -M main

git remote add origin https://github.com/...git

推送至远程仓库。

git push -u origin main

Netlify

注册一个Netlify账号,串街到刚才github账号,完成设置,见Adipurdila的第41分钟教学视频

完成后Netlify会跑几分钟的设置,生成一个https://…netlify.app/的网址,意味着已经成功部署到Netlify。

Domain setting找到name servers的服务,进入自己域名提供商的DNS设置,将Netlify的dns记录贴到域名提供商的DNS条目中。

稍等片刻,Netlify也会自动把网站配置上https;最后将自己的域名贴到config.yml,大功告成!

baseURL: "https://eddy.lu"
languageCode: en-us
title: eddylu 
theme: PaperMod

每次build完自己的内容,执行git的流程即可同步到网站。

git status
git add .
git commit -m "add"
git push

Have fun!!