本文最后更新于:18 天前

说明

该篇文章主要介绍如何利用宝塔BT面板,将Hexo生成的博客自动化部署到你的服务器上。由于一开始没有完整的教程供我参考,在整合了多篇文章后,我将整个流程尽可能简化,也给自己留一个备份,以供之后参考。

文章的主要内容如下:

  1. 选择Linux系统
  2. 设置SSH登录
  3. Hexo自动部署
  4. 宝塔面板部署

选择VPS以及服务器系统

由于我购买VPS主要用途是用来扶墙,创建博客只是穿上一件好看的衣服,所以选择了便宜的搬瓦工,速度还可以,如果你追求稳定,为了长久的维护博客,建议选择其他可靠的VPS服务器。

系统方面我安装的是Ubuntu 20.04,当然你也可以选择使用Debian系统,随个人爱好。

设置SSH登录

完成如下的设置,你可以直接使用你的命令行工具通过SSH来登录你的服务器(建议在代理下使用SSH),而且不需要每次都输入账号密码,如果没有相关需求的同学可以直接跳过这部分。

生成本地公钥

首先,我们现在本地生成自己的公钥
ssh-keygen -t rsa '你的邮箱地址‘

上传你的公钥到服务器

然后,将你的公钥/.ssh/id_rsa.pub复制到服务器上对应用户的/.ssh/authorized_keys即可,这里来说一般有以下三种:

  1. 使用 ssh-copy-id-for-OSX 工具将公钥复制到服务器

    brew install ssh-copy-id #本地用brew指令安装ssh-copy-id
    ssh-copy-id 用户名@服务器IP地址 #相应替换为你的服务器用户名和IP

  2. 当VPS服务器用户目录下尚未有.ssh目录时使用此方式

cat ~/.ssh/id_rsa.pub | ssh username@hostname "mkdir ~/.ssh; cat >> ~/.ssh/authorized_keys"

  1. 通用方式

    scp ~/.ssh/id_rsa.pub username@hostname:~/ #将公钥文件复制至vps服务器
    ssh username@hostname #使用用户名和密码方式登录至vps服务器
    mkdir .ssh #若.ssh目录已存在,可省略此步
    cat id_rsa.pub >> .ssh/authorized_keys #将公钥文件id_rsa.pub文件内容追加到authorized_keys文件

设置快捷登录

当完成以上操作后,我们就可以通过在命令行工具中ssh user@hostname登录我们的服务器。
当然,还有更简便的方式,省去记录主机名的麻烦,通过在本地编辑.ssh/config设置我们的服务器信息

sudo vim ~/.ssh/config

添加内容如下:

Host        alias #自定义别名
    HostName        hostname  #替换为你的ssh服务器ip或domain
    Port            port #ssh服务器端口,默认为22
    User            user #ssh服务器用户名
    IdentityFile    ~/.ssh/id_rsa #第一个步骤生成的公钥文件对应的私钥文件

这样我们就可以通过ssh alias的命令行直接快速登录我们的VPS服务器

3. Hexo自动部署

Hexo官方论坛提供了多种方式来实现自动部署,该教程使用了git-hook的方式进行部署

  1. 首先,你需要在服务器安装git
    apt-get install git

  2. 然后,本地安装部署工具(这个大家都会安装,用来git推送文件)
    npm install hexo-deployer-git --save

  3. 接下来,我们要继续在服务器上操作,我们要在上面安装一个git的裸仓库,这个仓库里不会存放任何文件,只是一个我们用来接收文件的中转站,当git接收到文件后将其直接存放到我们的指定的文件夹里面。

在这之前,我们需要创建一个专门的用户去负责相关的git操作
adduser git # 此处本应该还要设置git用户的shell登录权限,但是我几经尝试都不行,遂放弃,对安全较为看重的话,麻烦另行尝试

  1. Git用户创建完成后,我们需要将本地的公钥传到git用户的/home/git/.ssh/authorized_keys中,这样我们本地才能在执行hexo d后将你的文件推送到服务器,具体方式可参考前文,最粗暴的做法就是本地复制粘贴到服务器对应文件中,此处可使用BT面板的「文件」进行直观化的操作

  1. 服务器上初始化git仓库
    mkdir /var/repo	#新建目录,此为Git仓库的位置
    cd /var/repo
    git init --bare blog.git	#新建一个名叫Blog的
    cd /var/repo/blog.git/hooks	#进入Git钩子文件夹
    vi post-update	#新建并修改post-update钩子
  2. post-update中添加如下内容:
    #!/bin/bash
    git --work-tree=/var/www/hexo --git-dir=/var/repo/blog.git checkout -f
  3. 由于宝塔BT生成的网页路径不在/var下,所以我们要自己生成存放网页的目录
    mkdir /var/www
    mkdir /var/www/hexo
    cd /var/repo/hexo.git/hooks
    sudo chown -R git:git /var/repo	#设置文件及子文件的可执行权限和拥有者
    sudo chown -R git:git /var/www/hexo	#设置文件及子文件的可执行权限和拥有者
    sudo chmod +x post-update	#赋予其可执行权限
    同时,你可以使用BT面板,确认Hexo文件的所有者

  1. 在完成上面一系列操作后,我们只需要在我们本地博客的_config.yml中设置好我们的上传仓库即可
    deploy:
    	type: git
    	repo: root@crowncj.com:/var/repo/blog.git # 此部分修改为你自己的登陆账号和域名,冒号后面为设置的裸仓库的地址, 如果你的域名还没下来,设置你的主机 ip 也是可以的 ,例如 root@xx.xx.xx.xx:/var/repo/blog.git
    	branch: master
  2. 至此,我们的Githook就完成了,hexo g -d后就会上传到我们的博客服务器。

宝塔BT面板确认

宝塔面板在「添加站点」后默认的的网站目录是/www/wwwroot/,这与我们的博客存放地址不符,因此我们需要修改一下

将「网站目录」修改为/var/www/hexo,点击「保存」

总结

至此,利用宝塔BT面板将Hexo博客部署到VPS服务器上就完成了,enjoy~