本文是对此次建站过程的一个记录与小结,或许可以对他人有所启发,于是写在这里。
1. 前言
Hexo 是一个快速、简洁且高效的博客框架,支持丰富的插件和主题。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。本文主要介绍 Hexo 在 Github 和 VPS 上的搭建过程,操作系统环境为 Windows 10。
2. Github 上的搭建过程
2.1 创建仓库
在你的 Github 账号下新建一个名为 你的用户名.github.io
的仓库。例如,你的 Github 用户名为 xxx,则创建 xxx.github.io
,将来你的网站访问地址就是 https://xxx.github.io
。可见一个 Github 账号最多只能有一个这样的仓库。
2.2 环境搭建
在本地安装以下工具:
注意事项:安装 Git for Windows 时要选择添加到系统环境变量中,方便以后的操作。安装完成后,打开 Git Bash,以下所有命令将在 Git Bash 中执行。
2.3 配置 SSH key
提交代码需要拥有你的 Github 权限才可以,但是直接使用用户名和密码不够安全,所以我们使用 SSH key 来解决本地和服务器的连接问题。
用 Git Bash 执行如下命令:
$ cd ~/.ssh //检查本机已存在的 SSH 密钥
如果提示: No such file or directory
说明你是第一次使用 git 。
$ ssh-keygen -t rsa -C "你的 Github 邮件地址"
然后连续三次回车,最终会在用户目录下生成一个文件夹,打开 C:\Users\你的用户名
,找到 .ssh\id_rsa.pub
文件,使用记事本打开并复制里面的内容,然后打开你的 Github 主页,进入个人设置 -> SSH and GPG keys -> New SSH key -> 将刚复制的内容粘贴到 key 那里,title 随意填,保存。
2.4 测试
$ ssh -T git@github.com //注意邮箱地址不用改
如果提示 Are you sure you want to continue connecting (yes/no)?
,输入 yes
,然后会看到:
Hi XXX! You’ve successfully authenticated, but GitHub does not provide shell access.
看到这个信息说明 SSH 已配置成功。
接下来,执行配置:
$ git config --global user.name "xxx" //你的 Github 用户名
$ git config --global user.email "xxx@mail.com" //填写你的 Github 邮箱地址
2.5 Hexo 的安装与配置
此部分建议参考官方说明文档,有详细的指导和解释。
2.5.1 安装及初始化
安装:
$ npm install -g hexo-cli
安装完成后,在电脑某个地方新建一个名为 hexo
的文件夹(名称可自定义),如 D:\hexo
,将来这个文件夹会作为存放代码的地方。完成后执行:
$ cd /d/hexo
$ hexo init
Hexo 会自动下载一些文件到这个文件夹中,目录如下:
.
├── _config.yml
├── package.json
├── scaffolds
├── source
| ├── _drafts
| └── _posts
└── themes
2.5.2 配置
请看这篇说明文档:
2.5.3 修改主题
访问 Hexo 网站上提供的主题:
然后根据各个主题的说明操作。
注意 Hexo 根目录下的
_config.yml
和themes
目录下的_config.yml
这两者的区别。
2.5.4 写作
参考:
2.5.5 上传到 Github
首先,SSH key 肯定要配置好。
其次,配置 _config.yml
中有关 deploy 的部分:
deploy:
type: git
repository: git@github.com:xxx/xxx.github.io.git //注意冒号和 xxx 之间没有空格
branch: master
执行:
$ hexo clean //非必须。清除缓存文件 (db.json) 和已生成的静态文件 (public)。在某些情况(尤其是更换主题后),如果发现对站点的更改无论如何也不生效,需要运行该命令。
$ hexo g //生成静态文件
此时如果直接部署可能会报错,原因是缺少插件:
$ npm install hexo-deployer-git --save
安装完成后,执行:
$ hexo d
完成部署。
此时,如果打开你的网页 https://xxx.github.io
应该能看到你发表的内容。
附:常用 Hexo 指令
关于 Markdown 编辑器,个人推荐 VS Code 或者 Atom,用起来赏心悦目,本文即是由 VS Code 撰写的。
3. VPS 上的搭建过程
在进行这一部分之前,建议先完成本文前述的所有步骤,并确保正确无误,这将节省一部分步骤与时间。
3.1 域名解析
- 如果你还没有域名,那么你将需要购买一个,可以前往 GoDaddy 或其他域名销售网站购买。
- 然后前往 DNSPod,选择
域名解析
,填入你的域名,可以看到应该有 4 条记录类型,两条NS
类型,一条A
类型,一条CNAME
类型。其中两条NS
的记录类型是 DNSPod 默认配置的,无法修改,你需要在A
记录类型中将记录值改为你的 VPS 的 IP 地址。 - 前往你的域名购买网站,将域名的 DNS 解析服务器设置为
f1g1ns1.dnspod.net
,f1g1ns2.dnspod.net
。注意填写为两栏,一栏填写一个。 - 点击保存,等待全球递归DNS服务器刷新(最多72小时)。
- 在等待生效过程中,你正好可以开始配置你的 VPS 。
3.2 建立本地端和 VPS 端的 SSH 连接
首先,在本地端安装 SSH 工具,这类工具有很多,使用方法也大同小异。本文将以 Xshell 为例进行操作。
在网页上登录你的 VPS 控制台,记录下 IP 地址,SSH 连接端口号,以及 root 用户的密码。
-
打开 Xshell,选择
新建连接
,在Host
一栏中填写 VPS 的 IP 地址,在Port Number
一栏中填写 VPS 的 SSH 连接端口号,填好保存,建立连接。 -
连接过程中 Xshell 会弹框要求输入用户名和密码,用户名输入
root
,密码输入你刚才记录的密码。 -
连接成功建立后,会在 Xshell 上显示:
Connection established.
[root@localhost ~]#
3.3 VPS 端的配置
3.3.1 创建用户
- 创建用户用于服务器端站点管理,如下:
# adduser hexo //创建用户
# passwd hexo //设置密码,可能看不见输入的字符,正常输入即可
- 安装 Sudo:
# yum install sudo
- 赋予 hexo 用户 root 权限,以便接下来的操作:
# vi /etc/sudoers
找到这一行并添加:
root ALL=(ALL) ALL
hexo ALL=(ALL) ALL //这个是添加的
编辑这个文件需要用到一些 Vim 命令和键位,这里只介绍要用到的部分,其他详情建议自行搜索:
「i」进入插入模式
「ESC」退出插入模式
:wq!
保存并退出
:q!
不保存并退出
注意:服务器端代码如果是 # 开头代表 root 用户的命令, $ 开头代表 hexo 用户的命令。
3.3.2 配置本地端无密码 SSH 登录服务器端
在前述步骤中我们已经在本地生成了 SSH 密钥,这里可以直接拿来使用而无需再次生成。
- 服务器端查看是否有安装 SSH :
# rpm -qa |grep ssh
如果返回有 openssh
开头的信息,则代表已安装。
没有的话使用 yum 安装:
# yum install ssh
- 启动服务:
# service sshd start
# service sshd status
- 服务器端在用户主目录下新建
.ssh
文件夹并拷贝本地端公钥内容到.ssh
目录下的authorized_keys
:
# su hexo
$ cd ~
$ mkdir .ssh
$ cd .ssh
$ echo "本地端 SSH 密钥(全部内容)" > authorized_keys //密钥在 C:\Users\你的用户名\.ssh\id_rsa.pub 中
修改权限:
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
- 进行验证:
打开 Git Bash,执行:
$ ssh hexo@你的VPS的IP地址 -p 端口号 //@前是你创建的站点管理用户,本文中是 hexo
第一次连接可能需要输入密码,此后不再需要,可直接连接。
3.3.3 安装配置 nginx
简单来说, nginx 是代理服务器,有了它我们就能按照域名或IP地址访问网页。
- 添加 nginx 源,在
/etc/yum.repos.d
目录下创建一个 yum 源文件nginx.repo
:
$ su root
# vi /etc/yum.repos.d/nginx.repo
写入如下内容:
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
- 安装 nginx :
# cd ~
# yum install nginx -y
# nginx -v //查看版本号验证
- 删除原配置文件:
# rm /etc/nginx/conf.d/*
- 重新配置:
# vi /etc/nginx/conf.d/hexo.conf
添加以下内容:
server {
root /home/hexo/www; #网站根目录,用来存储网站文件,后面会创建
index index.html index.htm;
server_name foversty.com; #你的域名
location / {
try_files $uri $uri/ /index.html;
}
}
需要注意,这一步较为关键,因为将你的域名和服务器下的网站根目录挂钩,主页是根目录下的 index.html
。
5. 修改 nginx 配置文件:
# vi /etc/nginx/nginx.conf
将其中 user 的值改为 hexo
。并在 http
段落中添加以下内容以开启 GZIP 压缩,加快网站访问速度。
# 开启gzip
gzip on;
# 启用gzip压缩的最小文件,小于设置值的文件将不会压缩
gzip_min_length 1k;
# gzip 压缩级别,1-10,数字越大压缩的越好,也越占用CPU时间,后面会有详细说明
gzip_comp_level 2;
# 进行压缩的文件类型。javascript有多种形式。其中的值可以在 mime.types 文件中找到。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
# 是否在http header中添加Vary: Accept-Encoding,建议开启
gzip_vary on;
# 禁用IE 6 gzip
gzip_disable "MSIE [1-6]\.";
- 切换到 hexo 用户,用户主目录下新建
www
文件夹作为网站根目录:
# su hexo
$ cd ~
$ mkdir www
- 验证配置是否正确:
$ sudo nginx -t
如果显示如下信息,说明配置正确。
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
- 启动 nginx 服务并测试:
$ sudo service nginx start
$ echo "hello nginx!" > /home/hexo/www/index.html //站点根目录下新建 index.html
在浏览器中输入你的域名或者 VPS 的 IP 地址(取决于域名解析是否已经生效),出现 hello nginx!
字样表示 nginx 代理服务器搭建成功。然后删除 index.html
吧。
$ rm /home/hexo/www/index.html
3.3.4 安装和配置 Git
- 安装 Git
$ sudo yum install git
- 初始化 Git 仓库
用户主目录下新建hexo.git
文件夹用作 Git 仓库并初始化:
$ cd ~
$ mkdir hexo.git
$ cd hexo.git
$ git init --bare //初始化 Git 仓库
- 配置 Git 仓库的 hooks
hooks 可以将不同目录的数据实现同步。具体如下,在 Git 仓库hooks
目录下创建文件post-receive
并修改权限:
$ cd hooks
$ touch post-receive
$ chmod 755 post-receive
$ vi post-receive
将以下内容添加到 post-receive
中:
#!/bin/bash
GIT_REPO=/home/hexo/hexo.git
TMP_GIT_CLONE=/tmp/HexoBlog
PUBLIC_WWW=/home/hexo/www
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}
3.4 本地端部署验证
由于前述步骤中本地端已经安装好了 Hexo,所以只需要修改 _config.yml
文件,即可进行部署到 VPS 。
url 项配置:
# URL
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
url: http://foversty.com #你的博客网址
root: /
deployment 项配置:
# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
- type: git
repository: git@github.com:xxx/xxx.github.io.git
branch: master #之前配置的部署到 Github 的有关信息
- type: git
repo: ssh://hexo@你的VPS的IP地址:端口号/home/hexo/hexo.git #新增部署到VPS的有关信息,注意冒号不可省去且冒号前后没有空格
branch: master
这样设置好以后,使用 hexo d
命令可以同时部署到 Github 和 VPS,如果你只想部署到其中一个,那么将另一个删掉或者注释掉即可。
部署验证,打开 Git Bash,执行以下命令:
$ hexo clean
$ hexo g
$ hexo d
至此,配置过程完全结束,你可以打开浏览器,输入你的域名,查看你发布的内容。