一年前用开源博客框架HexoGitee搭建了个人博客,今年由于gitee停用了page服务,正好有一台闲置的云服务器,所以打算将博客部署到这台云服务器上,下面是部署过程。

准备工作

构建完毕的Hexo项目

可以参考这篇博客:个人博客搭建

安装git

本地和服务器都需要安装git
如果你使用了宝塔、1panel等Linux管理软件,那么git应该是已经捆绑安装了的,可跳过这个步骤。

安装web服务软件

Hexo博客是纯静态网页,因此不需要后端服务,只需要一个web服务器用于分发网页即可。我这里用的是OpenResty

部署

git同步配置

新建一个文件夹用于存放web资源文件,在1panel下可以很方便地用OpenResty创建一个网站,网站目录是/opt/1panel/apps/openresty/openresty/www/sites/dianwind.cndianwind.cn是我的域名`

在网站目录下建立一个裸仓库(“blog.git”是自定义的仓库名)用于存放git配置并修改权限
特别要注意文件和文件夹的归属用户和权限问题,归属用户要与下面_config.yml中的配置对应

1
git init --bare blog.git

执行上面的命令需要在网站目录下执行,如果在其他目录请使用绝对路径,像下面这样

1
git init --bare /opt/1panel/apps/openresty/openresty/www/sites/dianwind.cn/blog.git

使用下面的命令修改归属

1
chown -R [username]:[username] blog.git

新建钩子文件

1
vim ./blog.git/hooks/post-receive

将下面的内容复制到钩子文件中

1
2
#!/bin/bash
git --work-tree=/opt/1panel/apps/openresty/openresty/www/sites/dianwind.cn/index --git-dir=/opt/1panel/apps/openresty/openresty/www/sites/dianwind.cn/blog.git checkout -f

/opt/1panel/apps/openresty/openresty/www/sites/dianwind.cn/index是网站的默认存放位置,本地的Hexo项目编译后就推送到这里。

/opt/1panel/apps/openresty/openresty/www/sites/dianwind.cn/blog.git是git配置文件的存放位置,保存了相关的同步信息。

本地hexo项目部署配置

在本地hexo博客项目中修改.\_config.yml文件,将deploy项修改为下面:

1
2
3
4
deploy:
type: git
repository: username@ip:/opt/1panel/apps/openresty/openresty/www/sites/dianwind.cn/blog.git
branch: master

/opt/1panel/apps/openresty/openresty/www/sites/dianwind.cn/blog.git是服务器git配置文件存放位置

username要与网站存放目录归属用户一致,否则会因为不能修改导致部署失败

将本地hexo博客部署到云服务器:

1
2
3
4
5
6
# 清除已经生成的编译文件
hexo clean
# 重新生成
hexo g
# 部署到云端
hexo d

常见问题

  1. 如果用户没有配置密钥登录,那么在执行hexo d就需要输入服务器用户密码
  2. 钩子文件中work-treegit-dir的值不对
  3. 网站目录和git目录的权限和用户归属问题