本文主要记录了我个人从零建站的主要过程,并不会事无巨细地记叙。
旨在为拥有类似需求的朋友提供使用Hugo+Vercel建站的参考。This post is also available in: English
Hugo+Vercel建立个人博客
1. 静态网站生成工具
静态网站生成工具,它可以帮助个人博主将使用Markdown等标记语言写好的文章,以尽量便捷省心的方式生成静态网站。
关于 “如何选择一款适合自己的静态网站生成工具” 这一话题在知乎等论坛早已有过不少专业的对比讨论,这里就不再班门弄斧、重造轮子。
我选用Hugo的主要原因是 “Hugo原生支持.org文件” 。
这对于习惯使用Emacs及其org-mode的我来说是一项很重要的特性。
在Hugo官网有相当详细的快速上手文档,其过程主要为以下六步:
- 安装Hugo
- 安装Git
- 创建网站
- 设定主题
- 创建文章
- 生成静态网站并运行
下面将简要记录我的建站过程。
1.1 安装Hugo和Git
在我个人常用的Windows11环境下,我习惯于尽可能地使用微软官方提供的包管理器 winget
来安装开源软件:
打开PowerShell并输入:winget install Hugo.Hugo.Extended Git.Git
静待安装完成。
(当然,也可以使用cmd来进行上述及后续步骤)
这一步根据网络情况耗时不定,如果觉得 winget
太慢当然也可以根据Hugo官方文档:prebuild的内容下载压缩包并配置系统环境变量。(个人不喜欢这种不便于管理的方式)
安装完成后,在PowerShell中输入hugo version
若显示类似如下字段,则说明Hugo安装成功。
hugo v0.117.0-b2f0696cad918fb61420a6aff173eb36662b406e+extended windows/amd64 BuildDate=2023-08-07T12:49:48Z VendorInfo=gohugoio
同样方式验证Git的安装git version
显示类似如下字段,则说明Git安装成功。
git version 2.38.1.windows.1
1.2 创建网站
使用资源管理器创建好用来存放网站的 Mysite
文件夹后,进入该文件夹并在空白处右键选择 Open in Terminal / 在终端中打开
。
(当然你也可以直接在cmd或powershell中使用 cd
指令索引到这个文件夹内)
PS C:\Users\NicEu\OneDrive\Documents\_00PersonalDocuments\Mysite>
根据Hugo官方文档:create a site的指示输入下面的指令来为网站创建所需文件
(注意Limewolf.top是我的网站命名,请为你的网站取名并改成你自己的)hugo new site Limewolf.top
进入网站所在文件夹cd Limewolf.top
目前终端显示的路径大致为:
PS C:\Users\NicEu\OneDrive\Documents\_00PersonalDocuments\Mysite\limewolf.top>
1.3 设定主题
注意:我选用了Monochrome作为我的网站主题,这与Hugo在官方文档中使用的主题不同。
- 在网站文件夹下初始化git项目(git是一个分布式版本管理工具)
git init
- 将主题文件包作为submodule下载并添加到网站所属的git项目下
git submodule add https://github.com/kaiiiz/hugo-theme-monochrome.git themes/hugo-theme-monochrome
- 修改网站配置文件使其使用刚下载的主题
echo "theme = 'hugo-theme-monochrome'" >> hugo.toml
1.4 生成网站并运行
直接以本地服务器的方式运行网站:(此模式下网站会随着内容改动实时更新)hugo server
或者,将网站打包发布在其文件夹下的 /public
中,以便后续部署到线上:hugo
1.5 创建文章
这一步骤就很自由了,跟着Hugo官方文档:add content的步骤,可以使用包含标题和日期属性的默认模板来创建文章:hugo new content posts/my-first-post.md
此外,当然也可以完全手动创建,但需要对模板文件里的预设属性有一定的了解。
例如,本篇文章的属性就包括:
#+title: Hugo+Vercel建立个人博客
#+author: "Limewolf"
#+description: "个人如何使用Hugo+Vercel从0建站的参考"
#+date: 2023-08-26T02:56:54+08:00
#+keywords[]: hugo vercel github
#+tags[]: hugo vercel blog
#+categories[]: 博客技术
#+series[]: Hugo历险记 探索Vercel
它们有些用于分类筛选文章,有些便于搜索引擎发现这篇文章。
当然,属性的功能远不止于此,Hugo官方文档:all setting对此有很详细的说明。
1.6 基于主题优化网站
这一步骤非常个性化且近乎可以无限探索,在此就不展开篇章叙述。
关于本站在这一环节的历程,可以在[建站日志]栏目阅览。
2. 将网站挂上云端
不论是Github、Gitlab还是Gitee等平台,它们都提供基于git的在线代码托管服务,是发挥git"分布式版本管理"这一特性极为重要的一环。
简单来说,想让你的网站可以被互联网上的其他网友访问,大致有三种方法
- 把网站服务器架设在你现有的设备上并开放互联网访问,可行但蛮有挑战性。(你需要:足够支撑网站流量的网络环境,可以精确指向服务器的独立IP或内网穿透策略,保证网站稳定运行的网安技术,以及长时间保持服务器运行的电费);
- 租用云服务器。光国内提供此服务的就有腾讯云、阿里云、华为云等。云服务器应该是解决上述硬件需求、网络环境、网安技术的最好方案,但作为个人网站,可能只有当网站达到一定流量和规模后我才会考虑选择吧(笑;
- 使用代码托管平台。易用且免费,同样也可以满足上述硬件、网络、网安等需求,但依赖外部平台的行为也会带来网站文件私密性等问题
以上,根据自身需求选择合适的方案。本文我将以Github为例,这也是本站所采用的方案。
日常使用Github保管代码的最简流程基本为:
- 创建本地Git项目 & 创建Github存储仓库并关联本地项目
(或是 将Github上的现有仓库拉取到本地)- 保存本地Git项目的修改
- 推送本地Git项目到Github
- 重复2和3
2.1 创建代码仓库
前文中我们已经在网站文件夹内创建了Git项目,接下来只需要在github中创建仓库并将本地git项目关联至github仓库即可。
⚠️注意:首次使用Git的朋友可能还需要对git进行最基本的配置,可参考Github doc: 设置git完成如下两个步骤:
- 配置git用户名和邮箱;
- 配置https或ssh身份认证。
注册并登录Github后,跟随Github doc: 创建存储库的指引即可快速创建一个仓库。其中:
Repository name
: 这是你的仓库名,我命名为了Limewolf.top
Description
: 可填可不填,对仓库进行简要描述仓库可见性我选择的是
Public
,理由为:- 本站所使用的所有技术都是开源的,如果未来我对其中的技术进行了个性化更改, 我希望这些新技术/个性化配置也是开源的;
- 我放在网站中的内容都是愿意公开展示的。
.gitignore
: 在Git项目的文件夹中,并不是所有文件都需要参与到Git项目当中, 所以就有了gitignore这样的黑名单机制将名单内的文件剔除git项目。
我选择了None
,这是因为我需要一个全新的空仓库。同时我在本地配置了该文件,后续会一并上传到github仓库中。
根据个人需求的不同,该文件的配置有很多模板可以参考。这里我放上本站的.gitignore
文件链接(修改自themes\hugo-theme-monochrome\exampleSite\.gitignore
):Github,Onedrive- README file: “仓库说明书”,为了创建空仓库而不勾选,我将在本地手动创建
License: 开源许可,为了创建空仓库而不勾选。
这需要根据网站内容及其代码的性质来决定,在众多开源协议中,具体怎么选可以参考这里或者搜索引擎。
我为本站选择的是 CC-BY-NC-SA 4.0 协议(Creative Commons),理由是:- 本站所使用的所有技术都是开源的,如果未来我对其中的技术进行了个性化更改, 我希望这些新技术/个性化配置也是开源的;
- 我默认允许在注明来源且非商用的情况下,对本站内已公开的我个人产出的文章、作品、图片等进行转载、再创作, 并希望其衍生品也采用相同的协议;
关于如何选择CC协议版本、如何使用CC协议及CC协议的详细信息 可通过相应链接了解更多,关于它的中文讲解,这篇b站文章和这篇知乎文章可以作为参考
2.2 让git项目做好上云的准备
在网站本地的git项目根目录下根据需要配置好 README.md
、 .gitignore
、 license.txt
文件,在当前目录下打开PowerShell,使用git status
来查看已修改但未保存至git中的文件。使用git add .
来将当前文件夹下所有已修改未保存至git的文件标记。使用git commit -m 'first commit'
来将上述文件的更改保存进git,并以 'first commit'
来批注。
最后,在github中进入到新建的仓库中,根据提示,在PowerShell中依次键入
git remote add origin git@github.com:<Your-github-id>/<Your-repo>.git
git branch -M master
git push -u origin master
一切顺利的话,在命令行提示push完毕后,刷新github仓库的页面,就可以看到刚上传的网站源文件了。
2.3 git push!
git add
git commit
git push
每次网站需要更新时,只需依次执行“标注要保存修改的文件”、“保存修改”、“上传修改”这三个步骤即可。
2.4 另一种可选的方式
很显然,在上述方式中,我将网站的所有源代码都上传到了git仓库。
之所以上传源代码,理由如下:
- 多端创作:我希望交由平台来生成网站,这样即便我当前所使用的设备(比如手机、平板等)没有运行网站所需的环境, 我也可以专注于内容创作,将编辑完成的内容通过git或者网页上传至github,即可完成网页的更新。
- 备份与版本管理:一个仓库同时为网站的配置文件和内容做版本管理和备份
当然,每个人的需求不同,除了本站使用的方法,还可以选择只上传由hugo生成在网站目录下 /public
中的文件。
这样做或许代码和api隐私性更强、仓库更精简。
又或者,把上述两种方案结合起来,一个仓库存放配置文件,另一个仓库存放网页…..
总之,根据自己的需求来选择。相对应的方案都能在网络上找到公开资料。
3. 网站部署
既然已经把网站源代码上传到GitHub了,其实可以直接使用github.io来部署。
不过恰好在此之前,我曾尝试使用Vercel成功部署了我的Onedrive公共云盘,期间有被vercel的强大给惊艳到,所以这一次就尝试将网站交由vercel来部署,步骤有二:
- 创建Vercel项目并与GitHub上的网站仓库关联;
- 配置命令和环境变量;
3.1 创建并关联Vercel项目
注册并登录Vercel,参考vercel doc: overview和vercel doc: deploying git创建vercel项目,登录github账户并导入网站源代码仓库。
3.2 配置命令和环境变量
- 将
Configure Project -> Framework Preset
的参数改为Hugo
- 在
Configure Project -> Environment Variables
中添加键值对:key: HUGO_VERSION, Value: 0.117.0
具体版本号以自己安装的Hugo版本为准。 - (这一项是Monochrome主题中提供的命令)
勾选Configure Project -> Build Command:
后的Override
,将本项参数改为hugo --environment production --minify
- (这一项是Monochrome主题中提供的命令)
勾选Configure Project -> Development Command:
后的Override
,将本项参数改为hugo server --environment production
- 按下
Deploy
,泡杯咖啡,稍作等候即可
4. 自定义域名
在vercel中成功部署网站后,vercel会提供一段以 <UserID>.vercel.app
为结尾的链接可用于访问部署的网站。
它没有规律并且很长,不便于传播和分享。
本文不讨论如何注册自己的域名。
而如果你恰好拥有可用的域名,在项目配置页 Project Settings -> Domains
输入域名,vercel会告知你如何在你的DNS服务商处进行配置。
本文到此为止。
考虑到篇幅,文中省略了不少细节。
未来如果有必要,我会再新开新坑详述本文省略的部分。感谢浏览!
:)