本文适合对建设网站有兴趣的读者。例如,你想要在互联网上留下你制作的网页,想要在互联网上自由地表达你自己的言论,又想避免封号禁言之苦,那么恭喜你,这个tag就是给你而设的😁。
对读者的要求
你需要的基础知识 (非必需)
- 如何安装一个网页服务器,并进行配置(nginx、apache或是自己用C语言写一个都行)
- Git的使用 跟wakaba酱一起学
- 命令行的使用(包括Linux命令、ssh的使用、ssh协议传输文件等等)
- 网页制作 跟wakaba酱一起学
- MarkDown语言基础
- 注册域名
- 使用vscode (下载地址https://code.visualstudio.com ,请勿下载任何收费版!)
以上技能都会或者愿意学的话,恭喜你,你适合继续阅读。不会的话,也没关系,我也不精通😁,今后笔者 可能 会在博客更新保姆级教程。
不适合的读者人群
- 需要在淘宝上请人安装steam,结果仍然无法正确安装,最后还要找卖家算账的。
- 认为网络对于居民来说,只需要用来读书看报就可以了,其余网站或功能都应该封禁的议员或人大代表。
- 对如何搭建本站不感兴趣,只想快速手搓一个淘宝网站。
- 只知道单击“下一步”,至于使用
apt install
或者如下命令安装软件,太麻烦了,不想折腾的读者
1 | ./configure |
- 爱当脑残粉。认为某人(包括其他技术博主、我本人、其他网友以及某种权威)说的是对的,一定要照他/她说的做,必须一字不差地执行(有些内容可以帮助你避坑,少走弯路,但我希望你多踩坑,熟悉其中的原理)。
比起当乖宝宝,你当个杠精我更可能欣赏你。
搭建Hexo以后,可以变通地使用宝塔面板、Cloudflare Pages、其他网页托管服务部署网站。
对电脑的要求
对本机的要求
读者可能有疑问:“我这电脑(自从上次重装以来)用得太久了,有些软件可能已经装过了,有些软件可能缺失了,该怎么办?”所以请先阅读本节。假设用的都是Windows。
此外,还需要安装vscode,上文已提过。也可以使用NotePad++等一些会自动规范代码格式的软件来进行配置。只要编辑器会帮你找到另一半的括号在哪里,以及代码所用的标点符号是否符合全角半角就可以了。
不了解工作方法的新人,或者非常自信且强悍的高手,可能会使用Windows自带的“记事本”来修改代码和配置文件,对此我表示尊重祝福🙏。
安装Node.js
首先确认以前是否装过,打开命令行。输入node -v
有类似以下输出,跟官网核对版本后即可跳过本节。
1 | $ node -v |
如果没有以上输出,那么,进入 https://nodejs.org 下载最新版进行安装。或者进入Windows的C:\Program Files\寻找是否有nodejs文件夹,里面是否有nodejs文件。如果有,那么配置环境变量。
配置环境变量
右击“此电脑”,单击“高级系统设置”
进入“环境变量”,双击查看上下两个Path
变量,把node.exe
所处的目录的路径给添加进去就可以了。
安装Git
方法同上。在见到本教程之前,很可能你有安装过Git,或者跟wakaba酱一起安装了source tree,里面自带了git。如果git -v
不能正确显示git的版本,还是找到git的安装目录,添加进环境变量PATH。不再赘述。
建站
接下来是创立本站的步骤
安装Hexo
Hexo是个实用的软件,所以可以全局安装
1 | $ npm install -g hexo-cli |
在操作过程中自行判断报错和各种信息。
部署网站
本文假设我们的网站项目为 test 。在你要建站的位置,打开命令行。我推荐下载Windows商店里的Windows Terminal。画面比PowerShell和cmd好看多了。
该软件的配置不再赘述,根据你自己的喜好来。
通过cd
命令或者右击(Shift+右击)打开命令行,进入目录后。输入hexo init test
,即可创建博客文件。成功时输出如下:
1 | $ hexo init test |
如果不需要此博客了,或者要推倒重来,需要删除,直接删除文件夹即可逆转回hexo init
之前的状态。可谓是非常的绿色。
此时,你的第一个博客已搭建完成。你可以在博客目录内输入hexo server
立即观看效果
1 | $ hexo s |
这个输出说明了Hexo在本机TCP 4000端口运行了一个http服务器,你在你的电脑上打开浏览器,输入 http://localhost:4000 即可访问你自己的网站。
该网站包含了Hello World页面,以及一些在该主题下的基本操作。这对我们来说远远不够,因为这样的网站发布出去,你的读者就会认为你的能力大概就如此了(虽然已经超越了大多数的用户)。首先,第一眼,就知道你是用Hexo搭建的个人静态博客(但至少比WordPress操作要更装B,安装软件不用图形化界面,系统资源消耗更少,底层原理也更低级,无数据库,无后端😁)。即使你改了标题,看这样式和背景图片也猜得到你是怎么搭建的。而且,你这页面如果发布出去,大概只是几万人当中的一分子,默认主题,给人一种网站跑路了的感觉。
安装主题(拓展)
之所以没急着开始写作,是因为主题关系到你文章之间的分类结构。有的主题着重写个人简历,有的主题像我一样用来记录点滴以备不时之需。
对于主题,不必自己制作一个原创的,原创还需要积累和沉淀。在官网找一个看上去狂拽酷炫屌炸天的 https://hexo.io/themes/ 。我的主题是这个 https://github.com/fan-lv/Fan 。作者已经2年没有维护了。你不一定要使用该主题,去找你自己喜欢的,但是本文仍然有一定的参考意义。
首先,cd test
,再输入以下指令下载主题的源代码(请手动输入自己主题的仓库地址)
1 | $ git clone https://github.com/fan-lv/Fan.git themes/Fan |
下载完主题后,首先要安装主题的依赖。根据刚才的实测,每一个Hexo实例都必须安装一遍。
安装依赖的命令如下
1 | npm install --save hexo-renderer-pug hexo-renderer-stylus |
在根目录的 _config.yml
,打开编辑。在里面可以设置网站的名字和作者
1 | # Site |
找到主题,把landscape修改为Fan
1 | # Extensions |
此外,还必须打开 themes/Fan/_config.yml
进行修改,禁用搜索和评论。否则,由于未配置评论和algolia搜索的API,会导致红字报错,网站也无法访问。
1 | # algolia 搜索 |
接下来输入hexo s
即可预览效果
此时会发现一些主题作者没有在文档中说明的坑。单击“标签”和”分类”,以及“关于”,你会发现网页直接显示Cannot GET /tags/
这种信息,显然这样的网站时不能发布的。这个坑,我在准备更换主题时,在其他主题的文档发现解决的灵感,接下来我会在下一个章节讲解。
写作
根据官方文档,执行
1 | $ hexo new [layout] <title> |
即可新建文章。layout是文章的布局,总共有3种:
- post
- page
- draft
post很简单,就是我现在正在写的文章类型。draft也很好理解,就是post的草稿,使用hexo publish
即可发布为post。
问题来了,page又是什么呢?经过踩坑,发现,如果你使用hexo new page --path about/me "About me"
,实际渲染后,无法显示任何新的页面。其实,page布局的用途,即是生成上一章单击菜单中的“标签”、“分类”和“关于”的页面。
将hexo new page "tags"
生成的文件夹中的index.md文件,内容改为
1 | title: All tags |
hexo new page "categories"
生成的文件改为
1 | title: All tags |
“关于”也用同样方法生成。
脚手架
每次你使用hexo new
生成新文章时,hexo都会从根目录的scaffolds
内的模板生成新的文件,你再使用新生成的文件,使用Markdown语言进行新的写作。我建议对scaffolds进行修改,加上
1 | tags: |
以便对文章进行归类
语法
Hexo采用Markdown语言进行写作。Markdown语言为GitHub写文档时使用的语言,相信在座的各位比我都懂,在此不班门弄斧了,丢下一个链接 https://markdown.com.cn/ 给新人学习去吧。
最值得注意的点就是代码块要采用的,是反引号`,而不是单引号’,反引号位于键盘左上角,按Shift会输入~。
写作过程中,你可以在博客根目录的命令行内输入hexo server
,随时查看博客的渲染情况。每保存一次,它就渲染一次。
1 | $ hexo s |
以上节选自本文写作过程中,终端窗口的输出
插件的安装
algolia搜索和评论已在作者文档中。具体要强调几点踩坑事项:
- 要将你的Admin API Key导入到你的环境变量中
否则无法使用hexo algolia
命令 - HTTP Referers必须设为例如
*blog.dzm.pp.ua*
和*localhost*
,否则Algolia搜索将无法使用。 - 评论gitmen似乎已经无法使用,作者的博客也是如此。建议使用valine。具体如何审核评论,目前似乎只能让大家自由地评论了。valine的原理似乎是将评论存储在valine的服务器上。静态博客是没有后端的。
本小节就不放图了,避免泄露我的api key
长毛象作者署名
长毛象近两年出了个新功能,就是验证网站署名。用语言讲不清楚,直接上图
假如胡锡进在他的每篇文章加入如下api元素
1 | <meta name="fediverse:creator" content="@[email protected]"> |
那么每篇文章的分享下面就会多出一个“老🦊以为”。
然而,经过我的踩坑,该元素仅放在<head></head>
里面才有效。要修改每个网页的head元素,需要进入(以我主题为例,其他主题自行搜索)hexo博客根目录/themes/Fan/layout/includes/layout.pug
,里面可以找到渲染所有网页元素的代码
1 | head |
(以上代码名称仅为高亮而输入)
找到head,加入如上代码meta(name="fediverse:creator" content="@[email protected]")
,包含长毛象实例所指示的要素,实际渲染时会在head内生成它所要求的元素。
以上所有插件可以在本地hexo server
试验中产生效果。但是,长毛象署名只有部署后才能确认。
部署
Hexo的部署,也包括本站在内,不应拘泥于一种形式。常见的有git一键部署。最简单、最纯粹的方法,直接
1 | $ hexo clean |
然后将根目录下的/public
里面所有文件拷到网页服务器的根目录文件夹内。这种情况下,完全无需重启nginx。如果非要装一下,那么就用这个插件也是不错的😎 https://github.com/HakurouKen/hexo-deployer-shell 。
Git的使用
本站采用GitHub一键部署。官方文档也已经详细说明了(首先不要忘记装插件,即使忘记了,报错以后你应该也会想起来的)。其中,配置文件_config.yml
下,以下内容是必须的
1 | deploy: |
在部署前应该先在GitHub建立空白repo。branch
和message
不输入则自动取默认值。你并不需要配置token。你的repo值可以写成两种形式:
https://github.com/dongzhimin-xz/dongzhimin-xz.github.io.git
这种形式最适合小白。如果在ssh服务器或无GUI操作系统使用这种形式的GitHub仓库URL,则无法推送代码。因为,现在github已经禁止了用户名密码推送代码了。
你在用这种方式部署时,电脑会弹出一个浏览器窗口,让你登录GitHub账号,可能还需要双因素认证或passkey登录。我使用密码管理器,这还是挺方便的。[email protected]:dongzhimin-xz/dongzhimin-xz.github.io.git
这种形式,适合ssh服务器和无GUI操作系统推送代码。这种情况下,你需要使用ssh密钥。生成密钥的步骤如下(最好按照我的建议来)
1 | $ ssh-keygen -f $env:USERPROFILE/.ssh/test |
其中test改为其他文件名,强烈建议不要使用默认文件名,否则可能会将该电脑内已有的私钥覆盖!
然后进入你的用户目录,进入该目录下的.ssh
文件夹,用记事本或vscode(其他你用得顺手的文本编辑器)打开config文件。如果没有,请新建文本文件,并改为此名称。
给小白的小知识:文本文件是由ASCII码或UTF-8构成的二进制文件,跟.doc和.wps这种妖艳贱货不一样。
在该文件内输入:
1 | Host github.com |
其中~/.ssh/test
为你私钥的路径。第1行的github.com
为主机名,如果你有多个GitHub账号,建议改为其他好记的名字,我的为dongzhimin.github.com
。第2行的HostName为目标主机名,一般为目标的域名或IP地址(登录暗网的服务器除外,但也是一样的道理)
保存该文件后,还需要将公钥放入GitHub服务器。
GitHub的使用
- 在 https://github.com 登录你的账号,单击你右上角的头像,再选择Settings,然后再左侧选择SSH and GPG keys。
如果你还是不会以上步骤,请点击该链接直接进入此页面 https://github.com/settings/keys 。 - 单击New SSH key。
- 在Title输入好记的备注名称,Key type选择Authentication Key。
- 用记事本打开刚才生成的
test.pub
文件(不要打开test
文件,这是私钥,如果泄露,请立即删除,并回到上文ssh-keygen
那一步😅),全选复制,粘贴到GitHub界面的Key栏,再单击Add SSH key。
使用如下命令进行测试:
1 | $ ssh -T [email protected] |
有如上第3行输出即为密钥有效。
做完以上准备后,在根目录执行
1 | $ hexo deploy |
一般来说应该成功了,但是我的主题又有一坑,最后会输出如下错误信息
1 | Writing objects: 100% (59/59), 2.58 MiB | 1.25 MiB/s, done. |
这种情况,可以删除相关文件(twikoo.all.min.js
),或者修改策略,放过该文件(刚才测试时无法放过)。国产软件的作者也确实值得吐槽,特别爱把密码给写死在代码里。
经过刚才测试,最根本的解决办法就是,删除theme文件夹内的twikoo.all.min.js
,或者打开后,搜索AKIDBgZDdnbTw9D4ey9qPkrkwtb2Do9EwIHw
,并删除它。完成操作后,先执行hexo clean
,再删除根目录下的.deploy_git
。然后再次部署,问题即可解决。
推送完毕后,点击仓库页面的Settings,进入左侧的Pages,Source选择Deploy from a branch,选择你的分支和网站根目录。
域名解析
将我的hexo实例推送到我的仓库dongzhimin-xz.github.io
(二级域名必须与我的GitHub用户名完全一致)后,在浏览器输入 https://dongzhimin-xz.github.io 即可访问。如果推送到了test
仓库,那么该网站的网址在https://dongzhimin-xz.github.io/test 。
既然是我的博客,那么它应该有我自己的域名,不应该寄人篱下。
首先我将我的Cloudflare DNS记录设为
1 | blog CNAME dongzhimin-xz.github.io |
同时,服务器端的主机名也需要设置,这样才能通过域名访问我的网站。
这里又有一坑,在GitHub Pages设置界面,将Custom domain设为blog.dzm.pp.ua。这样就可以访问了。
然而,我的网页更新以后,通过域名blog.dzm.pp.ua又无法访问网站了。
其实,配置主机名的真正方法是,在source
文件夹下新建一个文本文件,改名为CNAME
(无后缀),内容为自己的网址
1 | blog.dzm.pp.ua |
经过hexo clean
和hexo g
,它就到了网站的根目录中,再次hexo d
,即可将域名永久解析到自己的网址。