Hexo+GIT+VPS+CADDY搭建个人博客

前言

hexo是一个静态blog引擎,可以直接部署在VPS上,用它自带的服务运行,也可以用它生成静态html,然后由caddy或者ngix反向代理。

参考1:Hexo搭建个人博客并使用Git部署到VPS

参考2:通过 Git Hooks 自动部署 Hexo 到 VPS

Windows 10 安装Hexo

安装node.js

在windows上安装node.js最佳方式是nvm(HEXO官网是那么说的)。安装nvm的最佳方式是下载nvm-setup(这是我说的)

下载好后一路next,可以指定目录,然后就可以安装node.js了。这里再推荐一个软件cmder

安装node.js的稳定版本:

1
nvm install stable

完成之后,安装Hexo

1
npm install -g hexo-cli

安装Hexo的git插件,否则提交时会提示:ERROR Deployer not found: git

1
npm install hexo-deployer-git --save

Hexo初始化

安装 Hexo 完成后,请执行下列命令,Hexo 将会在指定文件夹中新建所需要的文件。

1
2
3
hexo init <folder>  #指定hexo的目录
cd <folder>
npm install

初始化完成后,在folder文件夹中的结构如下:

1
2
3
4
5
6
7
8
9
.
├── _config.yml
├── package.json
├── scaffolds
├── source
| ├── _drafts
| └── _posts
└── themes

VPS配置

安装Git

1
2
3
root@ubuntu:~$ sudo apt-get update
root@ubuntu:~$ sudo apt-get install git
root@ubuntu:~$ git --version #查看是否安装

添加git用户

1
2
3
root@ubuntu:~$ adduser git #注意,useradd不会创建home文件夹,要用adduser
root@ubuntu:~$ passwd git #设置密码

git用户添加sudo权限

  • 方法一
1
root@ubuntu:~$ gpasswd -a git sudo
  • 方法二
1
2
root@ubuntu:~$ chmod 740 /etc/sudoers      #修改权限
root@ubuntu:~$ vim /etc/sudoers

找到

1
root    ALL=(ALL:ALL) ALL

添加一行:git ALL=(ALL:ALL) ALL

1
root@ubuntu:~$ chmod 440 /etc/sudoers  #收回权限

生成SSH公钥

1
2
3
4
root@ubuntu:~$ cd ~
root@ubuntu:~$ ssh-keygen -t rsa
root@ubuntu:~$ cd .ssh
root@ubuntu:~$ cat id_rsa.pub >> authorized_keys

上服务器把id_rsaid_rsa.pub拷贝到自己的电脑里。

设置相关目录

先创建git的目录

1
2
3
4
5
6
root@ubuntu:~$ su git
git@ubuntu:~$ cd /home/git
git@ubuntu:~$ mkdir blog.git
git@ubuntu:~$ cd blog.git
git@ubuntu:~$ init --bare #初始化为裸仓库
git@ubuntu:~$ exit

创建网站目录

1
2
3
4
5
root@ubuntu:~$ mkdir /var/www/blog
root@ubuntu:~$ sudo chown git:git -R /var/www/blog #授权
root@ubuntu:~$ ll /home/git
root@ubuntu:~$ ll /var/www/blog

要确保/home/git/blog.git/var/www/blog的用户组权限正确,如果不对用chown命令

配置Git Hooks

创建post-receive文件

1
2
3
root@ubuntu:~$ su git
git@ubuntu:~$ cd /home/git/blog.git/hooks
git@ubuntu:~$ vim post-receive

post-receive中添加下面的内容,目的是将git仓库中的文件自动推送到/var/www/blog里。

1
2
3
4
5
6
7
8
#!/bin/bash
GIT_REPO=/home/git/blog.git #blog.git是软件仓库
TMP_GIT_CLONE=/tmp/blog
PUBLIC_WWW=/var/www/blog #上一步建的目录
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}

保存并退出后,给文件授权

1
git@ubuntu:~$ chmod +x post-receive

配置本地电脑上的Git

Windows 上设置Git,使用Bash Here

1
2
git config --global user.name "你的用户名"
git config --global user.email "你的电子邮箱"

由于Hexo通过Git部署不支持密码登陆,所以设置SSH PublicKey。使用Bash Here

1
2
3
4
cd ~
mkdir .ssh
cd .ssh
ssh-keygen -t rsa

这里我用过ssh-copy-id -i ~/.ssh/id_rsa.pub git@服务器ip地址命令,但显示permission deny(Public),估计和我设置了VPS登陆必须使用key有关。所以我就把VPS上生成的id_rsaid_rsa.pub两个文件拷贝到本地计算的这个文件夹里~/.ssh,覆盖上一步用命令生成的文件,输入下面命令试一下是否可以免密登陆。

使用Bash Here

1
ssh git@服务器IP地址 -p 端口

注意,此处用了-p参数,当远程端口不是默认22的时候。

但是在hexo的配置里面,不支持这种格式,所以需要在本地计算的~/.ssh文件夹里面,新建一个config文件,内容如下:

1
2
3
4
5
Host 服务器IP
HostName 服务器IP
User git
Port 端口号
IdentityFile ~/.ssh/id_rsa

配置Hexo

打开本地hexo根目录下的_config.yml文件,将deploy的配置,修改为:

1
2
3
4
5
6
7
# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
type: git
repo: git@VPS的IP:blog.git
branch: master

安装Caddy

使用脚本安装

一种是源码安装,需要安装Go,小白就不搞了,用脚本安装,一句搞定

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
root@ubuntu:~$ curl https://getcaddy.com | bash -s personal

root@ubuntu:~$ sudo chown root:root /usr/local/bin/caddy
root@ubuntu:~$ sudo chmod 755 /usr/local/bin/caddy
root@ubuntu:~$ sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

root@ubuntu:~$ sudo mkdir /etc/caddy
root@ubuntu:~$ sudo chown -R root:www-data /etc/caddy

root@ubuntu:~$ sudo mkdir /etc/ssl/caddy
root@ubuntu:~$ sudo chown -R root:www-data /etc/ssl/caddy
root@ubuntu:~$ sudo chmod 0770 /etc/ssl/caddy

root@ubuntu:~$ sudo mkdir /var/www #如果之前有就不用建,有的vps安装了ubuntu自带apache2

root@ubuntu:~$ sudo chown www-data:www-data /var/www

Caddy配置

首先把 caddy 配置成一个服务,这样就可以开机自动运行,方便控制

1
2
3
4
root@ubuntu:~$ sudo curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service   # 从 github 下载 systemd 配置文件
root@ubuntu:~$ sudo systemctl daemon-reload # 重新加载 systemd 配置
root@ubuntu:~$ sudo systemctl enable caddy.service # 设置 caddy 服务自启动
root@ubuntu:~$ sudo systemctl status caddy.service # 查看 caddy 状态,可以使用start、restart、stop来控制

创建caddy配置文件

1
2
3
4
5
6
7
8
9
root@ubuntu:~$ sudo vim /etc/caddy/Caddyfile

:80 {
root /var/www
gzip {
ext .html .htm .php
level 6
}
}

测试caddy

编辑一个html网页测试一下

1
root@ubuntu:~$ sudo vi /var/www/index.html

简单的html

1
2
3
4
5
6
7
8
9
<!DOCTYPE html>
<html>
<head>
<title>Hello from Caddy!</title>
</head>
<body>
<h1 style="font-family: sans-serif">This page is being served via Caddy</h1>
</body>
</html>
1
2
root@ubuntu:~$ sudo systemctl start caddy
root@ubuntu:~$ sudo systemctl status caddy

Windows中,如果执行 hexo deploy 后,出现error deployer not found:git 的错误处理
输入代码:

1
npm install hexo-deployer-git --save