Hexo部署在服务器上
网上已有非常多的Hexo部署在GitHub Page上的教程,但是由于防火墙的存在,GitHub Page的访问速度通常较慢且不稳定,而部署在自己的服务器上可以拥有更多的自主权,因此部署在服务器上依然是一个很好的选择。本文将介绍Hexo部署在服务器上的教程。
服务器+Hexo的工作流程大致如下:
- 本地构建及推送:在本地通过Hexo引擎生成静态文件,通过Git上传至服务器
- 服务端钩子及部署:服务端收到推送后,会自动执行
post-receive钩子脚本,将网站静态文件保存至对应网站目录 - nginx代理:nginx监听到请求后,将静态文件发送给用户,用户即可访问站点
环境
Hexo对环境似乎没有特别的要求,此处仅列举本文安装时的环境,详细的安装环境可见https://hexo.io/zh-cn/docs/。
服务器环境
- 系统:debian13.3
- Nodejs: 20.20.0
- npm: 11.9.0
- git: 2.47.3
- nginx: 1.26.3
- hexo-cli: 4.3.2
本地环境
- Nodejs: 24.13.1
- npm: 11.8.0
- Git: 2.43.0
- hexo: 8.1.1
- hexo-cli: 4.3.2
服务器配置
服务器端需要完成三个主要工作,分别为基础工具安装、构建自动化部署流水线以及web服务器的配置,其中基础工具安装包含了git、curl、nginx、nodejs以及Hexo的安装;构建自动化部署流水线包括了git仓库的创建,权限修改以及钩子函数的实现;web服务器的配置包括nginx的配置。
基础工具安装
- 安装git、curl、nginx
1 | sudo apt update |
- 安装Nodejs
由于直接使用apt安装Nodejs存在版本陈旧的问题,因此使用添加node源的方式来安装
1 | curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - |
验证安装
1 | node -v |
如果npm版本过低,可以升级
1 | sudo npm install -g npm@latest |
- 安装Hexo CLi
1 | sudo npm install -g hexo-cli |
构建自动化部署流水线
在生产环境中,手动上传 HTML 文件是极其低效且易错的。专业的做法是利用 Git 的 post-receive 钩子。当本地电脑执行 hexo d 时,Git 会将变更推送到服务器,服务器自动触发钩子脚本,将生成的静态文件部署到 Web 目录。
- 创建目录并移交权限
我们需要以root的权限手动创建目录,并将其所有权交给当前用户并修改权限,以避免权限问题无法访问。
1 | # 1. 创建网站根目录 |
- 创建Git裸仓库
裸仓库只包含版本库信息,不包含工作区,适合作为远程仓库。
1 | cd /var/repo/hexo_blog.git |
- 创建自动化钩子(Git Hook)
我们需要创建一个脚本,当推送代码时,该脚本回自动运行,把代码部署到网站目录。
1 | vim /var/repo/hexo_blog.git/hooks/post-receive |
写入以下shell脚本,该脚本会自动将git仓库的内容checkout到/var/www/hexo目录中
1 |
|
赋予权限
1 | chmod +x /var/repo/hexo_blog.git/hooks/post-receive |
配置web服务器
单纯生成文件无法对外服务,需要配置 Nginx 作为反向代理或静态文件服务器。
- 创建nginx配置文件
1 | sudo vim /etc/nginx/sites-available/hexo |
将下述内容写入对应的文件,其中you_domain.com为实际访问网站的域名
1 | server { |
- 激活配置并重启服务
1 | sudo ln -s /etc/nginx/sites-available/hexo /etc/nginx/sites-enabled/ |
本地Hexo配置对接
本地需要部署hexo引擎,用于将本地的文件编译成静态网站文件
环境安装
- 安装Nodejs
安装地址:https://nodejs.org/
- 安装Git部署插件
1 | npm install hexo-deployer-git --save |
配置修改
- 部署Hexo
进入网站目录,执行下述指令
1 | hexo init . |
- 修改
_config.yml
主要修改deploy部分即可,其中type要选择git;repo为服务端的git地址,其中username为服务器用户名,ip为服务器ip;branch要和服务器初始化的分支名一致。
1 | deploy: |
- 执行部署
在执行完部署后,Hexo会将静态资源推送到服务器的Git仓库,随后服务器的钩子函数会自动将文件解压到/var/www/hexo,我们就可以通过nginx访问到博客了。
1 | hexo cl # hexo clean,清理生成的文件 |