应趣

Hi, nice to meet you.

搭配宝塔 BT 面板,将 Hexo 博客部署在 VPS 上

Oliver W.'s Avatar 2018-06-23

  1. 1. 说明
  2. 2. 选择VPS以及服务器系统
  3. 3. 设置SSH登录
    1. 3.1. 生成本地公钥
    2. 3.2. 上传你的公钥到服务器
    3. 3.3. 设置快捷登录
  4. 4. 3. Hexo自动部署
  5. 5. 宝塔BT面板确认
  6. 6. 总结

说明

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

文章的主要内容如下:

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

选择VPS以及服务器系统

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

系统方面我安装的是Ubuntu 16.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
  1. 当VPS服务器用户目录下尚未有.ssh目录时使用此方式

cat \~/.ssh/id\_rsa.pub | ssh [email protected] "mkdir \~/.ssh; cat \>\> \~/.ssh/authorized\_keys"

  1. 通用方式
scp \~/.ssh/id\_rsa.pub [email protected]:\~/ #将公钥文件复制至vps服务器
ssh [email protected] #使用用户名和密码方式登录至vps服务器
mkdir .ssh  #若.ssh目录已存在,可省略此步
cat id\_rsa.pub \>\> .ssh/authorized\_keys  #将公钥文件id\_rsa.pub文件内容追加到authorized\_keys文件

设置快捷登录

当完成以上操作后,我们就可以通过在命令行工具中ssh [email protected]登录我们的服务器。
当然,还有更简便的方式,省去记录主机名的麻烦,通过在本地编辑.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
cd /var/repo
git init --bare blog.git
cd /var/repo/blog.git/hooks #在blog.git/hooks目录下新建一个 post-receive 钩子
vim post-receive
  1. post-receive中添加如下内容:
# !/bin/sh
git --work-tree=/var/www/hexo --git-dir=/var/repo/blog.git checkout -f \#
  1. 由于宝塔BT生成的网页路径不在/var下,所以我们要自己生成存放网页的目录
mkdir /var/www/hexo
chown -R git:git hexo.git #设置文件的可执行权限和拥有者
chown -R git:git /www/hexo #设置文件的可执行权限和拥有者
    以下是部分`/var`下的部分目录
         ├── repo
         │   └── blog.git  #git hook 设置仓库
         ├── run -> /run
         ├── spool
         │   ├── cron
         │   ├── mail -> ../mail
         │   └── rsyslog
         ├── tmp
         └── www
             ├── hexo   #最后存放博客文件的地方
             └── html

同时,你可以使用BT面板,确认Hexo文件的所有者

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

宝塔BT面板确认

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

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

总结

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

本文最后更新于 天前,文中所描述的信息可能已发生改变