建站方式
选择建站方式,是使用动态建站(如WordPress、halo),还是使用静态建站(Jekyll、hexo、hugo)。
前者更偏向于传统的CMS管理系统,有后台管理页面,可以在管理页面发布,修改文章。除了需要服务器之外,需要同时了解前端、后端、数据库相关的知识,当然现有的项目完全可以简单配置后就可以开箱使用。
后者一般是使用各种开源项目,将文档转为静态资源(html),部署在服务器或者以GithubPages的方式供他人访问。而使用哪个开源项目进行建站,可以去Static Site Generators -Jamstack选择个人喜欢的项目,本文使用hugo项目进行搭建。
hugo安装和使用
参考hugo中文官网,进行安装,我这里是mac os系统,所以直接使用 brew install hugo
进行安装。
使用命令hugo new site [路径]
创建项目根目录,比如我这边路径是/Users/qisi/Research/hugo,则会在/Users/qisi/Research/hugo目录下创建以下文件夹
其中,content文件夹用来存储你的文档,themes文件夹用来存储你想要的主题,hugo.toml是总的配置,其他的后面可以跟着官网慢慢熟悉。
在主题网站安装想要的主题,我这里是使用的stack主题,可以通过两种方式安装
通过git命令,在当前目录执行
git init
git submodule add --depth=1 https://github.com/CaiJimmy/hugo-theme-stack.git themes/hugo-theme-stack
手动安装则是自己新建文件夹,然后clone
cd themes
mkdir hugo-theme-stack
git clone https://github.com/CaiJimmy/hugo-theme-stack.git
安装完成之后,将stack主题的配置复制一份到hugo根目录,并删除hugo.toml文件
cp themes/hugo-theme-stack/exampleSite/hugo.yaml ./
执行以下命令来新建文件,会自动在content/post目录下新建test.md
hugo new post/test.md
文件内容是,draft表示是草稿
+++
title = 'Test'
date = 2024-07-29T14:25:00+08:00
draft = true
+++
## 这里是我手动添加的内容
通过hugo server --buildDrafts
启动后台,–buildDrafts 表示会编译draft=true的文档,通过在浏览器访问http://localhost:1313打开网站,页面如图
Github Page
通过hugo server已经可以在本地电脑进行访问了,但如果想要通过互联网访问,则需要进行额外的设置。
如果拥有自己的服务器,可以在服务器上启动hugo,然后使用nginx监听并转发到public目录;但如果没有服务器,则可以通过Github Page功能来托管自己的项目。
首先需要创建一个项目,项目名称以github.io结尾,前缀一般用自己的用户名或者有标识的单词
将hugo项目的public文件夹作为一个git项目,推送到刚新建的这个Repository中
cd public
git init
git add .
git commit -am 首次commit
git remote add origin git@github.com:qisiii/qisiii.github.io.git
git push --set-upstream origin master
在setting-pages下进行一些设置,如下图所示,保存后就可以通过[关键词].github.io来访问了
如果想要更个性化的域名,则需要购买一个域名,添加一个cname类型的解析,同时在上图Custom domain的文本框中填入对应的域名,这样子就可以以自己的域名访问了。
Markdown工具
市面上的markdown工具还是蛮多的,各种开发用的ide,或者专门用于markdown的编辑器。我使用的是MarkText(GitHub - marktext/marktext: 📝A simple and elegant markdown editor, available for Linux, macOS and Windows.),建议直接安装中文版markText。
MarkText的图床功能存在bug:
uploader为github时上传失败
原因是GithubApi要求content是base64格式的,所以需要额外做一下处理,参考pr
无法上传剪贴板的图片
其中,无法上传剪贴板图片的bug是由于项目中fileSystem.js中path.join方法参数类型错误导致的;参考Fix Failure when uploading clipboard images with PicGo (#3360) by Jakentop · Pull Request #3366 · marktext/marktext · GitHub
无法检测到picgo存在
这个可能是由于env的路径并不包含picgo所在的路径,在env.js有一段逻辑是这样的
const patchEnvPath = () => {
if (process.platform === 'darwin') {
process.env.PATH += (process.env.PATH.endsWith(path.delimiter) ? '' : path.delimiter) + '/Library/TeX/texbin:/opt/homebrew/bin:/usr/local/bin'
}
}
修改为下面这样,我是用yarn 安装的picgo,路径在/opt/homebrew/bin 下面,我为了省事,就将/opt/homebrew/bin和/usr/local/bin都追加在后面了
const patchEnvPath = () => {
if (process.platform === 'darwin')
{
process.env.PATH += (process.env.PATH.endsWith(path.delimiter) ? '' : path.delimiter) + '/Library/TeX/texbin:/opt/homebrew/bin:/usr/local/bin'
}
}
修改完之后打包会是下面这样,就能识别到picgo了
但是可能依然会存在上传截图失败的情况,这种场景下是找不到node,可以自己给node建立一个软连接到/usr/local/bin下,比如我这边是nvm管理的node 18,通过ln -s /Users/hkc/.nvm/versions/node/v18.15.0/bin/node /usr/local/bin/node
建立软链接