hexo的安装与部署到虚拟服务器

引子

网上有很多关于怎么把hexo部署到github上的教程,部署到虚拟服务器的也有一些。我是在腾讯的开发者社区看到了一个文章,照着他写的做的。在这里也记录一下。

hexo是一个基于markdown的个人博客工具,因为我觉得markdown挺好的,以前学过一点。以前也用过wordpress,觉得那东西做的是挺好看的,但是会花费不少的精力在找排版上面。而markdown就没有这个问题,主打一个记录,让记录回归记录的本质。所以选了hexo。当然可能有更优秀的工具,但我是新手,并不是很熟悉,有能用的就先用着。

安装前准备

  1. 虚拟服务器
  2. 安装必要的库
  3. 本地安装node和git
  4. 安装hexo包

以上是将hexo部署到虚拟服务器上的一些必备的东西。如果是github上,不需要虚拟服务器,但需要github的账号。

虚拟服务器

虚拟服务器的准备,如果要长期用,就要花钱了,短期是不用的,有一些体验的账号可以用,但是体验一般是一个月或三个月,很少有体验很久的。

要买服务器的话,其实有很多选择。国内的有腾讯云,阿里云,华为云,京东云等等,虽有一些差异,但总体来说,都那个样。不会的都不会。会的,都一样。我试用了一个月的腾讯云服务器,发现要想正常的访问,备案是必要的,因为试用的是国内的服务器,并没有香港的可以试用。

然后也我了解了一下备案的流程,服务器要租够满2个月还是3个月才能备案,备案还要有域名,备案前不需要建站,但需要明确建站的用途、域名、服务器。看了下个人备案的所需材料,还是挺麻烦的,我就放弃了。但是这时,我已经买了一个域名,不想浪费了,就又在别的地方买了一个香港的服务器。也不知道能用多久,先买了一年的。如果一年后觉得还可以,再续吧。

个人博客的话,流量不大,虚拟服务器的性能不用很好,带宽也是,2M其实就够用。内存也不用很大,这时一般选Linux系统,因为Windows server内存占用还是很大的。我因为以前用ubuntu用的我,所以选了ubuntu的系统。

安装必要的库

虚拟服务器(以后简称服务器)一般会给配上操作系统,但是软件包会比较少。在ubuntu里要做以下几个操作:(下面步骤比腾讯那里给的少了一些,可以结合我的说明去看原文)

  1. 创建git仓库
  2. 配置nginx
  3. 创建git钩子

创建git仓库

这里需要先安openssh,因为买的服务器一般都自带了这个组件,所以这步可以跳过。

创建一个博客用户,这是为了做隔离,防止黑客通过博客拿到系统权限。我不害怕这点,因为站小,也没啥东西,要是有技术能拿下博客,还能注入指令,那以我的技术根本防不住,所以就不给自己添麻烦了。所以我也跳过了这步,直接在root下面开干。

安装git,这是必需的,在终端中输入sudo apt install git-core,因为我是直接在root里干的,所以可以省掉sudo。

创建hexo_static裸仓库。这个是必需的。

1
2
3
4
5
6
sudo mkdir /var/repo/
sudo chown -R $USER:$USER /var/repo/
sudo chmod -R 755 /var/repo/

cd /var/repo/
git init --bare hexo_static.git

同样,sudo在root账户下可省略。执行完以后,目录里会出现下面的这些文件。

仓库内容

配置nginx

nginx可以管理多个站点,如果只想用一个hexo可以改端口,或在服务器上做端口映射。

安装ngixn,apt install nginx

创建/var/www/hexo目录,用于Nginx托管,修改目录所有权和权限。

1
2
3
sudo mkdir -p /var/www/hexo
sudo chown -R $USER:$USER /var/www/hexo
sudo chmod -R 755 /var/www/hexo

使用vim修改/etc/nginx/sites-enabled/default,使root指向hexo目录
nano /etc/nginx/sites-enabled/default

找到server部分,修改如下内容
root /var/www/hexo;

重启Nginx服务,使得改动生效
service nginx restart

创建Git钩子

在之前创建的hexo_static裸仓库下有一个hooks文件夹,在其中创建一个名为post-receive的钩子文件:
nano /var/repo/hexo_static.git/hooks/post-receive

在其中写入如下内容:

1
2
#!/bin/bash
git --work-tree=/var/www/hexo --git-dir=/var/repo/hexo_static.git checkout -f

保存后退出

让该文件变为可执行文件
chmod +x /var/repo/hexo_static.git/hooks/post-receive

本地安装git和node

git安装

git下载的时候有2个选项,安装版一免安装版。git for windows 下载
免安装版解压后是一个文件夹,里面有git-cmd.exe,可以直接运行。我个人喜欢这种免安的版本。

node.js安装

node.js下载链接
下载后一路下一步就可以了。

安装hexo包

在安完node以后,在git-cmd.exe里执行node -v,能看到回显的版本号,软件基础就都有了。
还是在git-cmd.exe里执行npm install -g hexo-cli,等待安装完成就行了。

安装成功后,可以通过
hexo -version
查看hexo的版本。

初始化hexo

先创建一个存博客文件的文件夹,比如C:\blog,在git-cmd.exe里cd C:\blog,执行命令hexo init

稍等一会儿,在blog目录里可以看到一堆文件。

这里如果再执行hexo s,在浏览器中输入 http://localhost:4000 就可以看到网站。

部署到服务器

安装部署工具

执行npm install hexo-deployer-git --save安装部署用的工具。

修改_config.yml

用vscode打开blog目录,在里面找到_config.yml这个文件,修改deploy参数

1
2
3
4
deploy:
type: git
repo: root@server_ip:/var/repo/hexo_static.git
branch: master

这里,看了几个介绍,都没有细说这块怎么写。通过查一些资料,发现了原理。
root@server_ip的root,就是用户名,前面创建的git钩子的所有者的用户名,
server_ip就是服务器的ip地址,域名也可以。这里默认是22端口的,如果是非22端口,
可以在本地计算机的.ssh目录里创建一个config文件,文件里写上下面的内容

1
2
3
4
5
Host hostname
User user
Port port
Hostname hostname
IdentityFile id_rsa

配了上面这些,就可以省略端口,就用上面的repo的写法,如果不配这个,resp那里就需要带上端口。
这些可以从ssh免密登陆查到相关的说明。

部署到服务器

执行hexo deploy,git会自动把项目传到服务器,中间可能会要输入服务器ssh的用户密码,
这里和ssh一样,密码是不回显的,输入的时候注意一下。

写博文

使用cmd定位到hexo blog的目录,执行hexo new "文章名称",系统会自动创建一个文章名称.md 的文件,使用VS Code这样的编辑器可以直接编辑文件,然后cmd输入hexo g,hexo d就可以发布到服务器上了。