前言
本文将指导您如何从零开始,将Hexo项目部署到Ubuntu 20.04服务器上。
正文环境 服务器:虚拟机(Ubuntu 20.04) IP:192.168.75.138 客户端:Windows 10,使用Xshell连接服务器进行操作。
在Ubuntu上搭建Git服务器 首先,使用Xshell连接服务器,并切换到root用户,返回到根路径。

创建Git仓库
- 安装openssh-server
命令如下:
sudo apt-get install openssh-server

- 安装完成后,检查ssh服务是否已启动
命令如下:
ps -e|grep ssh

- 创建一个名为blog的用户,用于管理Hexo项目
命令如下:
adduser blog
系统会提示输入密码,重复确认密码,后续内容直接回车即可。

- 为blog用户添加文件写入权限
使用vim编辑/etc/sudoers文件
vim /etc/sudoers
找到User privilege specification部分,添加如下内容:
blog ALL=(ALL:ALL) ALL

- 切换到blog用户
su blog
- 安装git
命令如下:
sudo apt-get install git-core

- 返回到根路径(cd /),在/var/repo下创建名为hexo_static的裸仓库
命令如下:
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

- 进入该目录进行查看

配置Nginx托管文件目录
- 首先安装Nginx
命令如下:
sudo apt-get install nginx -y

- 创建/var/www/hexo目录,用于Nginx托管,修改目录所有权和权限
命令如下:
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目录
命令如下:
sudo vim /etc/nginx/sites-enabled/default
找到server部分,修改如下内容:
root /var/www/hexo;

- 重启Nginx服务,使得改动生效
命令如下:
sudo service nginx restart

创建Git钩子
- 在之前创建的hexo_static裸仓库下有一个hooks文件夹,在其中创建一个名为post-receive的钩子文件:
命令如下:
vim /var/repo/hexo_static.git/hooks/post-receive
在其中写入如下内容:
#!/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
在Windows上搭建客户端 首先安装git,这里不再详细说明。使用命令ssh-keygen -t rsa在Windows用户下的.ssh文件夹中生成密钥。将生成的公钥id_rsa.pub复制到Ubuntu服务器的/home/blog/.ssh/authorized_keys上。首先创建.ssh目录,并进入该目录:
sudo mkdir .ssh cd .ssh/
接着创建authorized_keys文件:
sudo touch authorized_keys

- 将Windows下的id_rsa.pub文件内容复制到Ubuntu下的authorized_keys文件
命令如下:
sudo vim .ssh/authorized_keys

部署Hexo项目
编辑Hexo的config.yml文件,在deploy部分修改repo项:
deploy: type: git repo: blog@server_ip:/var/repo/hexo_static.git branch: master
执行命令hexo deploy,将静态文件上传至Ubuntu服务器。

进入目录var/www/hexo/下,可以看到静态文件已全部上传。

访问测试 打开浏览器,输入Ubuntu服务器的IP地址,就可以看到博客页面。

补充 如果部署到购买的云服务器(如阿里云)上,可能出现访问服务器IP没有响应的情况。
点击云服务器/ECS,在安全组规则中手动添加一条80端口的规则:

后记(后续补充域名的配置操作)
参考资料:
- 用Hexo部署博客到Ubuntu服务器 - 简书 (jianshu.com)
- Git版本控制之ubuntu搭建Git服务器 - StoneGeek - 博客园 (cnblogs.com)










