0%

在vps上部署Hexo环境

vps更换了一次,服务器硬盘坏了一次。等于搬家两次了,觉得还是记录一下Hexo环境搭建吧。

vps操作系统为Centos8,用了Nginx开启了HTTPS支持。

安装软件

1
2
3
yum update
yum install -y epel-release
yum install -y nginx git

配置nginx

我不喜欢更改系统默认配置的,所以在这里我在/etc/nginx/conf.d下创建了新的站点配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
vi /etc/nginx/conf.d/virtual.conf

server {
listen 80;
server_name www.域名.org 域名.org;
root /var/www/html/refresh/;
}

server {
listen 443 ssl http2;
server_name www.域名.org 域名.org;
root /var/www/html/blog;
ssl_certificate /etc/nginx/cert/full_chain.pem;
ssl_certificate_key /etc/nginx/cert/private.key;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
# 更改配置文件后测试配置文件并且开启nginx服务
nginx -t
# 创建跳转用html文件,可以直接跳转到https网址
mkdir -p /var/www/html/refresh/
vi /var/www/html/refresh/index.html

<html>
<meta http-equiv="refresh" content="0;url=https://www.域名.org/">
</html>

配置Git仓库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 创建用于git的账户
useradd blog
# 创建用于存放Hexo的目录
mkdir -p /var/www/html/blog
# 设置Hexo网站目录权限
chown -R blog:blog /var/www/html/blog
# 切换到blog用户权限和宿主目录
su - blog
mkdir repos
cd repos
git init --bare blog.git
cd blog.git/hooks
# 编写钩子函数,在git有手法的时候调用此钩子
vi post-receive

#!/bin/sh
GIT_REPO=/home/blog/repos/blog.git # git仓库
TMP_GIT_CLONE=/tmp/hexo
PUBLIC_WWW=/var/www/html/blog # 网站目录
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}
# 不得已centos8 git上传文件权限变成了600和700
# 可以解决Hexo 403 的错误,主要是nginx无法访问该目录导致
find ${PUBLIC_WWW} -type f -exec chmod 644 {} \;
find ${PUBLIC_WWW} -type d -exec chmod 755 {} \;

# 赋予脚本执行权限
chmod +x post-receive

本地配置

之前的配置都是在VPS上进行的,在本地计算机blog目录点击右键选择Git Bash Here后执行命令,用来生成本地计算机的公钥和私钥,用来之后git上传Hexo的静态页面到VPS上。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 查看当前git的配置
$ git config --list
#修改一下git设置自己的email
$ git config --global user.email "aaa@bbb.com"
#如下所示一路回车后会在用户目录下生成.ssh目录,将id_rsa.pub内容重新拷贝到服务器上就可以上传了。
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/用户名/.ssh/id_rsa):
Created directory '/c/Users/用户名/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/用户名/.ssh/id_rsa.
Your public key has been saved in /c/Users/用户名/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:AERN0KVMZAERN0ZAERN0ZAERN0ZAERN0 用户名@DESKTOP-3NKDCPP
The key's randomart image is:
+---[RSA 3072]----+
|/B=.o.ooE=+ |
|==o+ oo ++.. |
|o...o .o. . . |
| .. o . . . |
| . o S . |
|. . o . . |
|.. . o . |
|...oo+ . . |
|. oo.+= . |
+----[SHA256]-----+

找到Hexo目录的_config.yml文件编辑deploy部分为一下内容。blog是之前在VPS上创建的用户名请根据实际情况修改。

1
2
3
deploy: 
type: git
repo: blog@www.域名.org:/home/blog/repos/blog.git

最后的安全设置

上面的命令会在你计算机的C盘用户目录下例如:C:\Users\登陆用户名创建.ssh目录并且包含id_rsa私钥和id_rsa.pub公钥,接下来需要吧id_rsa.pub的内容复制到服务器上用来免密登陆。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 登陆到VPS上,切换到blog用户权限
su - blog
mkdir .ssh
# 创建authorized_keys文件,把本地计算机用户目录.ssh目录中id_rsa.pub文件复制进来
vi .ssh/authorized_keys
# 看起来像如下这样
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDBL+hOhzP1k+pzSoRaKn4V0zGh7ZsBSSerYOZ5zDtBHPa2h0JjlDMjWpuRZpoRqvv0EHiZDhdu40JKvFI37CvEG7YNzcaFe4gc2nLA1jhHg7b9PcHF0dxf5bvNyB60S5uR4ApFRT4hCgr3sgradd6tWspJh24VwgFi7IrGN0upND+93eCw6cZqYHcurifVRKkiX0LNchH4EFcOaHDFuwGyVpzCT53H6R8xaZx05LqLELOtQ9TyBz8TqHLMXJLZGt02FGIDlPgOXlslTJCGeC+le3YyAj0MTDa0ALR7afKNsayBzDSBRDCmozwzkk6EsUFV0nvDnWBQRtxheoT5ejwHDgmaJB5tgVdo1S447Ap6ityitD2hH1wME3xJsE29OswNkRm0NaRNA9kIJs01isM52jZduKWuljDV4IkYL6RcUCVlFGI8HRdRpqe9E3BON1z1cXvT6hsXO2LA/XtNyJcBTROL6UgzN2eXN0YWGW//5TOsuzzwbA7ZCl4GcMwCrhs= aac@DESKTOP-1A5FAWG

# 设置公钥文件和.ssh权限
chmod 600 ~/.ssh/authorized_keys
chmod 700 ~/.ssh
# 退出blog用户
exit
# 更改blog用户默认shell为git-shell
which git-shell #或者whereis git-shell查询程序文件位置
# 在shells末尾加入git-shell文件
vi /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/usr/bin/git-shell

# 更改blog用户默认shell
vi /etc/shells
blog:x:1001:1001::/home/blog:/usr/bin/git-shell