Contents
  1. 1. 1. 配置Nginx
  2. 2. 2. 配置GitHub Webhook

因为之前博客的访问速度比较慢,所以买了腾讯云主机把博客托管在了上面,下面稍微记录下操作的步骤。

1. 配置Nginx

Nginx 的配置比较简单,其中证书使用的是Let’s Encrypt的免费证书注1,具体配置如下:

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
# HTTP 请求会被重定向到 HTTPS 请求
server {
listen 80;
server_name www.nosuchfield.com;

return 301 https://www.nosuchfield.com$request_uri;
}

# HTTPS 请求,直接访问博客的静态文件,配置好证书并且开启 HSTS
server {
listen 443 ;
server_name www.nosuchfield.com;

ssl on;
ssl_certificate /etc/letsencrypt/live/www.nosuchfield.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.nosuchfield.com/privkey.pem;


location / {
add_header Strict-Transport-Security "max-age=31536000";

root /home/ritterhou.github.io;
index index.html;
}

# 因为静态文件不会修改,所以启用浏览器缓存能够提高访问速度
location ~ .*\.(css|js|woff)(.*) {
root /home/ritterhou.github.io;
expires 30d;
}

}

其中文件夹 ritterhou.github.io 中的文件是从我的个人仓库中直接clone下来的。

2. 配置GitHub Webhook

虽然托管方式变了,但是我的博客还是由Hexo生成的,博客写完之后也会自动push到GitHub上面去,所以我使用GitHub Webhook来使得每当GitHub上的博客仓库有push操作时,VPS会自动的抓取最新的静态文件到本地,从而完成博客的自动部署功能。

GitHub的配置如下:
Webhook

每当发生push操作的时候,GitHub会对域名 http://webhook.nosuchfield.com/ 发起一次post请求,所以我们需要对这个请求做出一定的响应,因此我们需要把以上域名解析到VPS的IP地址上,之后执行一段脚本,Nginx配置如下:

1
2
3
4
5
6
7
8
server {
listen 80;
server_name webhook.nosuchfield.com;

location / {
proxy_pass http://localhost:8000;
}
}

之后,我们用Python写一个脚本并监听在 8000 端口,具体脚本如下:

1
2
3
4
5
6
7
8
9
10
11
from wsgiref.simple_server import make_server
import os

def application(environ, start_response):
os.system('cd /home/ritterhou.github.io && git pull')

start_response('200 OK', [('Content-Type', 'text/html')])
return 'hello, webhook!'

httpd = make_server('', 8000, application)
httpd.serve_forever()

这个脚本的功能就是每当有请求来到时,打开我们的静态文件文件夹并执行 git pull 操作来获取最新的博客网页。
想要让以上脚本在后台执行,可以执行命令注2

nohup python pull.py &

注1:具体的证书生成操作可以参考这里
注2:nohup即no hup,具体可以参考以下两篇文章:

  1. Linux进程KILL--Quit,INT,HUP,QUIT,和TERM的解释
  2. 如何实现SSH断开后 进程仍然在后台运行

注3:如果想要给网站开启HTTP2(我已经开启),可以参考这篇文章。

注4:为了避免在服务器迁移的时候再次对这些内容进行配置,我把整个博客的服务端打包成了一个Docker镜像。以后在新的环境中安装并获取该镜像,之后只需要通过如下命令来运行:

docker run -d -p 443:443 -p 80:80 blog
Contents
  1. 1. 1. 配置Nginx
  2. 2. 2. 配置GitHub Webhook