在折腾的过后往往都需要进行总结记录,相比〇〇笔记来说我更喜欢使用博客进行记录。

基本设想

  • 本地 Hexo 生成静态文件,使用 Git 同步至服务器仓库
  • 服务器仓库收到 push 后 Git Hooks 触发 checkout 命令复制至 Nginx 网站根目录
  • 通过 Nginx 转发,实现博客访问

环境约定

  • 本地:macOS Mojave 10.14.6
  • 服务器:CentOS 7.7 1908

本地环境搭建

Hexo 依赖于 GitNode.js 。由于我装了 Xcode 所以自带 Git 。至于 Node.js 我推荐使用 Node Version Manager 进行管理和安装。

安装 nvm

$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

在没有 ~/.bash_profile 的情况下还需手动创建并写入下列内容以添加环境变量。

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

别忘了 source ~/.bash_profile 使其生效

安装 Node.js

安装最新的 LTS 版本

$ nvm install --lts
# 检查版本
$ node -v
v12.16.1
$ npm -v
6.13.4

安装 Hexo

Git 和 Node.js 都安装完成后就可以使用 npm 安装 Hexo 了。

$ npm install -g hexo-cli

接着创建博客的目录并初始化.

$ hexo init blog
$ cd blog
$ npm install

为了使用 hexo d 进行同步我们还需要安装插件和生成密钥

$ npm install hexo-deployer-git --save
$ ssh-keygen -t rsa -C "邮箱地址"

输出密钥内容到屏幕上

$ cat ~/.ssh/id_rsa.pub

至此本地环境配置完毕。

服务器环境搭建

安装 Git

$ yum update -y
$ yum install git -y

配置 Git 用户

# 设置名字和邮件地址
$ git config --global user.name 'name'
$ git config --global user.email 'email'
# 创建 git 用户
$ groupadd git
$ useradd -s /usr/bin/git-shell -g git git
# 配置密钥登入
$ cd /home/git
$ mkdir .ssh
# 在 authorized_keys 中写入本地的公钥信息
$ vi .ssh/authorized_keys
# 设置权限
$ chmod 700 .ssh
$ chmod 600 .ssh/authorized_keys

创建裸仓库并配置 Git Hooks

$ git init --bare blog.git
$ vi blog.git/hooks/post-receive

写入如下内容

#!/bin/sh
git --work-tree=/var/www/blog --git-dir=/home/git/blog.git checkout -f

善后工作

# 创建网站根目录
$ mkdir -p /var/www/blog
# 设置目录所有者
$ chown -R git:git /var/www/blog
$ chown -R git:git /home/git
# 设置执行权限
$ chmod +x blog.git/hooks/post-receive

安装 Nginx

这里使用 yum 安装 Nginx ,有需要编译安装的可以看这篇文章

添加 Nginx 官方源

$ rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
$ yum install nginx -y

配置 Nginx

# 修改 Nginx 配置文件,指定网页根目录为 /var/www/blog
$ vi /etc/nginx/nginx.conf
# 修改后检查配置文件
$ nginx -t
# 启动 Nginx 并设置开机自启动
$ systemctl start nginx
$ systemctl enable nginx
# 如果开启了防火墙记得开放 http 端口
$ firewall-cmd --zone=public --add-port=80/tcp --permanent

配置 _config.yml

打开本地博客根目录下的 _config.yml 文件,修改最后的 deploy 配置

deploy:
  type: git
  repo: git@'IP':/home/git/blog.git
  branch: master

在写完博文后使用 hexo g -d 就可以轻松部署到服务器上了。