Https Nginx Hexo Git

前记

由于没有备案 所以 Http 的 80 端口被腾讯封了

只要检测到有有访问到本机的 80 都会被重定向

就像这样 http://burgertown.ga

一怒之下把 VPS 重做了系统

所以这一篇算是 Nginx 配置 Https 再用 Git Hooks 重新部署 Hexo 的笔记

在 VPS 上装好 Http 服务器

我的服务器是 CentOS 7.2

所以用下面的命令安装 Nginx

1
yum install nginx

选择 SSL 认证机构与域名托管机构

SSL 认证机构

一开始询问群里的基佬们基本都是 Let’s encrypt

但是有人说 SSLForFree 比较快速

这里记录一下我的过程吧

域名托管机构

我是腾讯云的机子 就直接把域名放在 DNSPod 上托管了

SSLForFree 有非常友好的界面

直接按照提示输入自己想要认证的域名就可以了

然后会有三种认证方式给你选

  1. FTP 自动认证

  2. 手动认证

  3. 手动 DNS 认证

由于我的 80 端口是被封了的 所以只能通过 DNS 认证

这一步很简单 就不多讲了 摸鱼

直接在域名解析里根据他给的要求添加 TXT 解析就行了

很多人推荐的 Let’s Encrypt

这个要用 Shell 来注册与认证

  1. 首先登陆 DNSPod

  2. 在用户中心->安全设置中创建一个 API Token,并记录下 IDToken

  3. 这里我们用 Neipang 的 ACME 在 VPS 上执行下面的命令安装 ACME

1
curl https://get.acme.sh | sh
  1. 这里我们还是用 DNS 认证的方法 不过这次基本全自动了

  2. 先导入刚刚申请的 IDToken

1
2
export DP_Id="1234"
export DP_Key="sADDsdasdgdsf"
  1. 执行下面的命令来 issue 我 TM 都不知道什么意思 然后等待就行了
1
acme.sh --issue --dns dns_dp -d example.com -d www.example.com
  1. 其实到这里域名认证就做好了 但是为了后续方便 我们还要把认证文件”安装”到其他目录
1
2
3
4
acme.sh --install-cert -d example.com \
--key-file /path/to/keyfile/in/nginx/key.pem \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd "service nginx force-reload"

是不是很鸡儿乱?

我把我的写出来

1
2
3
4
acme.sh --install-cert -d burgertown.ga \
--key-file /root/ssl/key.pem \
--fullchain-file /root/ssl/cert.pem \
--reloadcmd "systemctl reload nginx"

我是把认证文件”安装”到/root/ssl 文件夹下

因为 CentOS7 开始使用 systemctl 了 所以我也用了。.. 用 service 也是可以的

其实我把所有文件都扔到/root 下了 因为我懒

修改 Http 服务器的配置使 SSL 生效

Nginx 的配置文件在 /etc/nginx/

推荐在 /etc/nginx/conf.d 新建一个配置文件

然后写入以下内容 按照你自己的服务器具体情况修改啦

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 443; #Https 默认监听端口 443
server_name burgertown.ga; #域名

ssl on;#开启 SSL
ssl_certificate "/root/ssl/cert.pem"; #自行对比我的路径
ssl_certificate_key "/root/ssl/key.pem"; #同上

location / {
root /root/http; #网站根目录
index index.html; #索引文件 因为 hexo 是 html 所以我只写了 html
}
}

Windows 上的搭建与配置

**安装 Node.js **

**安装 GitForWindows **

配置免密(密钥)登陆

  1. 打开 C:\Users<用户名>.ssh 文件夹,如果没有就新建

  2. 在空白处单击右键,选择 Git Bash Here 打开终端

  3. 设置 Git 用户名

1
2
git config --global user.email "[email protected]"
git config --global user.name "username"
  1. 生成 SSH 密钥
1
ssh-keygen -t rsa -C "[email protected]" #一路回车也行 生成公钥和密钥

创建网站目录

在你电脑的任意位置创建一个文件夹(例如 E:\hexo 下文以此代替) 作为网站目录

安装 Hexo 打开cmd,通过cd命令进入hexo文件夹,输入node后执行如下命令

1
2
3
4
5
npm install -g hexo-cli
hexo init
npm install
hexo d -fg
hexo serve

配置更新

修改 hexo\_config.yml 里面的 depoly 选项

1
2
3
4
5
6
7
8
9
10
11
12
deploy:
type: git
message: update
repo:
s1: git@VPS 的 ip 地址或域名:git 仓库地址,master

##例如
deploy:
type: git
message: update
repo:
s1: [email protected]:hexo.git,master

VPS 上配置 Git 使其自动从本地部署到 VPS

利用下面的命令安装 Git

1
yum install git

你们也知道我懒了 所以我直接用 root 用户了

创建 Git 仓库,并配置 SSH 登录

1
2
3
4
5
6
mkdir .ssh && cd .ssh #我是在 root 目录下
touch authorized_keys
vi authorized_keys #用记事本打开 Windows 里。ssh 文件夹里面的 id_rsa.pub 全部复制粘贴进来
cd ..
mkdir hexo.git && cd hexo.git
git init --bare

配置 Git hooks

1
2
cd hooks
touch post-receive

内容如下

1
2
3
4
5
6
7
8
#!/bin/bash
GIT_REPO=/home/git/hexo.git #git 仓库
TMP_GIT_CLONE=/tmp/hexo
PUBLIC_WWW=/var/www/hexo #网站目录
rm -rf ${TMP_GIT_CLONE}
git clone $GIT_REPO $TMP_GIT_CLONE
rm -rf ${PUBLIC_WWW}/*
cp -rf ${TMP_GIT_CLONE}/* ${PUBLIC_WWW}

然后赋予脚本的执行权限

1
chmod +x post-receive

最后重启 Nginx

1
systemctl restart nginx

最后

那么以后我们

1
hexo new "文章标题"

通过 Markdown 写好 .md 文章后

1
2
3
hexo g #生成静态页面
hexo s #部署本地服务器来查看效果
hexo d #满意后就可以部署到 VPS

当然 Hexo 不止这样的用法

还可以直接部署到 GitBooks 或者 Github 这样的地方 摆脱了需要* VPS *这种条件

非常有趣

参考链接

在 VPS 上搭建 hexo 博客,利用 git 更新

Markdown 语法说明笔记

Markdown - 简单的世界