前言

搭建个人博客有很多种选择。就我所知道的
一种途径是基于 GitHub 仓库,使用 GitHub Pages,可以自定义域名
或者依托静态服务托管商,GitHub 仓库 -> Netlify/Vercel,不需要服务器,可以自定义域名
最后一种就要麻烦一些了,需要有自己的服务器和域名,本站创建时采用的这种,故有此篇文章
如站点时间轴所言,我已转向第二种方式,本站静态文件大小总计不到 5 MB,使用托管是省心而经济的,这也是 Hexo/Hugo 相较于 WordPress 的优势,静态站抗打,没有各种漏洞可被攻击,无需自己花费心力维护服务器。所以本篇文章也许不再有什么参考价值了,将文件托管到 GitHub 公开仓库,直接 git clone 到服务器都要快得多!

注意事项

  • 应该说,这更像是一篇笔记,简单记录一下我的搭建过程和心得,网络上也可以搜索到更多详细的教程
  • 教程要结合来看,每个人遇到的坑都不一样,可能解决一个问题要参考好几篇文章
  • 没有 Linux 基础不要紧,但最好有一定的计算机网络知识,会计算机基础操作
  • 一年后回头来看,这第一篇文章显得非常浅显,实用意义非常小,各位不要再参考了,本来已经写了不少更新的内容,还是删掉大半算了,就这样吧

配置本地环境

Git

简介:在Linus创建了开源的 Linux 之后,为更好地管理 Linux 内核,他花两周时间写出了 Git,时至今日,Git 已经是世界上最流行的分布式版本控制系统
安装过程:根据自己的操作系统,下载 Git,安装时需要注意的有两项
【Adjusting your PATH environment】这里我是选择了【Use Git from Git Bash only】完全不修改系统环境变量,仅在 Git Bash 中使用各种命令
【Configuring the line ending conversions】这一项请参考Travis CI 使用 Windows 环境时换行符自动转换为 CRLF 的解决方案
安装完成后右键打开 Git Bash Here 键入 git --version(在新版 Git 中,安装时会默认添加 Windows Terminal 配置,Windows 10 20H2 以及之后版本的系统也默认把 Windows Terminal 添加到了右键菜单,故在推荐在 Windows Terminal 中使用 Git Bash,下面所有提到右键打开 Git Bash Here 的地方同理)
出现版本号即安装成功,关于如何生成公私钥和设置 Git 提交信息就不讲了

Node.js

简介:Node.js 并不是一门编程语言,而是基于 Chrome V8 引擎的 JavaScript 运行环境,我们的博客框架 Hexo 就是依赖其运行,不过我们仅仅安装好这个环境就行了,并不会有其他操作
安装过程:根据自己的操作系统,下载最新的 LTS 版本 Node.js,安装选项同样默认即可,完成后在命令行敲 node -vnpm -v 做例行检查。(注:npm 是 Node.js 附带的包管理器。npm 是一个命令行工具,用于从 NPM Registry 中下载、安装 Node.js 程序,同时解决依赖问题,我们下面也会用到 npm 命令)

Hexo

简介:Hexo 是一个快速、简洁且高效的博客框架,但除此之外,还有号称更简单更快的 Hugo,当然,这该由读者自己来比较选择
在合适的地方新建你的博客文件夹,如 D:\blog,在 blog 文件夹里右键打开 Git Bash Here依次键入

1
2
3
4
$ npm i hexo-cli -g    # i=install g=global(全局安装)除此之外还有 --save 啥的,我也不太懂
$ hexo -v
$ hexo init
$ npm install

往后我们所有的操作都在 blog 文件夹里进行,前期出问题不要怕,大不了备份配置文件,把 blog 删了,重新初始化环境
附上要用到的几个基本操作命令:

1
2
3
4
5
$ hexo new "title"      # 新建一篇文章,标题包含空格的话,请使用引号括起来
$ hexo generate # 生成静态文件
$ hexo server # 启动本地网站预览服务。默认访问网址为:http://localhost:4000/
$ hexo deploy # 部署到云端
$ hexo clean # 清除缓存文件 db.json 和已生成的静态文件夹 public

更多的命令和配置请参考 Hexo文档

配置服务器环境

这部分可能写的不太好,我也是才接触这块

云服务器

国内不多讲,24岁以下购买会很便宜,国外主机商选择就有很多了,参差不齐上百家

域名

国内的推荐腾讯,活动价非常低,国外的选择也很多,我用的是 NameSilo

Git

这个要着重记录一下,也是困扰我好几天的东西
先把要用到的 Linux 命令罗列一下

1
2
3
4
5
6
7
$ chmod    # 控制用户对文件的权限
$ vi/vim # vim 是从 vi 发展出来的一个文本编辑器,也可以使用 nano
$ cd # change directory,即改变目录
$ mkdir # 创建一个目录
$ ls # 列出当前目录下所有文件和子目录
$ ls -l # 列出当前目录内容的文件属性,文件权限,用户组啥的
$ apt # Debian 及其派生的 Linux 软件包管理器

安装 Git

SSH 连接到云服务器,先更新下软件源,apt update,再安装 git,apt install git,遇到提示输入 y 即可,完成后 git --version 进行检查

创建 git 用户

执行 adduser git 自己设置一个强密码,可以记到本子上(这里使用 useradd 命令好像也行,而且不用设置密码,但能不能通过密钥连接服务器就不知道了)

赋予 git 用户 sudo 权限

sudo ,即 superuser do ,执行 chmod 740 /etc/sudoers,注意这一步,可能会提示找不到命令(-bash sudo : command not found),比如我的系统(又坑了我一把),执行下 apt install sudo 应该就行了
然后执行 vim /etc/sudoers 打开 sudo 权限控制,找到

1
2
# User privilege specification
root ALL=(ALL:ALL) ALL

root ALL=(ALL:ALL) ALL 这一行下面添加 git ALL=(ALL:ALL) ALL
这里说一下,vim是个非常强大的编辑器,但我不会用(诚实),进入文件编辑后,按 i 进入 insert 模式,输入操作完成后,按一下 Esc ,输入 :wq 保存并退出,然后把文件修改回只读, chmod 440 /etc/sudoers,可能这里有人会问,740、440是啥意思?简单地说,文件的权限,分别为 r,w,x (读,写,执行),r = 4,w = 2,x = 1,rx = 5,rw = 6,rwx = 7,因此 chmod 740 代表的意思就是,该文件归属的用户(即root)具备读写执行权限,同一组的用户具备读权限,其他用户没权限······其中目录权限和文件权限含义还是不一样的,讲起来就赘余了,烦请自己查阅

关闭 git 用户 shell 权限

git 也是可以 SSH 连接到服务器的,但这不太安全,如果你没有设定密钥密码,任何得到私钥的人都可以登录你的服务器,所以我们只需要能对仓库操作就可以了,执行 vim /etc/passwd ,将最后一行的 git:x:100x:100x:,,,:/home/git:/bin/bash 修改为 git:x:100x:100x:,,,:/home/git:/usr/bin/git-shell
(或者是在创建时就指定 shell 并添加到 root 组,useradd -d /home/git -G root -s /home/git:/usr/bin/git-shell git,但我还没试过,等以后有机会再部署服务器了再更新)

初始化 git 仓库

1
2
3
4
$ cd /home/git            # 切换到 git 用户目录
$ mkdir blog.git # 创建 git 仓库文件夹,以 blog.git 为例
$ cd blog.git # 进入仓库目录
$ git init --bare # 使用 --bare 参数初始化为裸仓库,这样创建的仓库不包含工作区

创建网站目录

1
2
$ cd /var/www/            # 切换目录,或者其他你想创建网站的目录
$ mkdir blog # 创建网站目录,以 blog 为例

配置 SSH

1
2
3
4
$ cd /home/git            # 切换到 git 用户目录
$ mkdir .ssh # 创建 .ssh 目录,这是个隐藏目录,一般是看不到的
$ cd .ssh
$ vim authorized_keys # 创建并打开公钥

把本地的公钥里面的内容复制到 authorized_keys 文件里,这样我们就可以用本地私钥免密码登录了

用户组管理

1
2
3
$ ls -l /home/git/blog.git/
$ ls -l /home/git/.ssh/
$ ls -l /var/www/blog/

检查 blog.git.sshblog 等目录的用户组是否为 git:git ,若不是,执行以下命令

1
2
3
$ chown -R git:git /home/git/blog.git/
$ chown -R git:git /home/git/.ssh/
$ chown -R git:git /var/www/blog/

再次查看,看修改成功没

配置 Git Hooks

创建 post-receive 文件

1
2
$ cd /home/git/blog.git/hooks     # 切换到 hooks 目录下
$ vim post-receive # 创建并打开 post-receive

把下面的代码复制到里面

1
2
3
4
5
6
7
8
GIT_REPO=/home/git/blog.git
TMP_GIT_CLONE=/tmp/blog
PUBLIC_WWW=/var/www/blog

rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}

赋予可执行权限:chmod +x post-receive,然后该文件用户组也要是 git:git 哦,用前面的命令检查一下吧

Nginx

安装配置 Nginx 并添加对网站的反向代理,比较复杂
参考
小丁的个人博客 - Hexo 博客部署到 VPS

结束语

以上工作完成后,剩下的事情就是选择主题,美化页面。然后,就可以正式开始敲字啦,文章格式是 md,即 Markdown,是一种可以使用普通文本编辑器编写的标记语言,本文所有的格式控制,包括多级标题,代码块,目录(TOC)等等都基于此