hunkier

学习笔记,开源代码,技术分享

使用 https 协议部署博客

前言

https 成为互联网标配,自然得跟上,给自己的博客用加密版的传输协议 https。

首先需要一个域名和一台拥有固定外网 ip 的服务器,使域名可以解析到该服务器上。caddy 可以自动能够向 Let’s Encrypt 申请和续期免费证书,有效期为 3 个月, 到期后自动续期。

博客源码托管在 GitHub,因此需要先安装 git

1
yum install -y git

安装 caddy

1
curl https://getcaddy.com | bash -s personal  http.git,http.cors,http.forwardproxy,http.authz,hook.service,dns

添加 caddy 到系统服务

1
vi /etc/init.d/caddy

写入内容

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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/bin/bash

### BEGIN INIT INFO
# Provides: Caddy
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: The HTTP/2 web server with automatic HTTPS
# Description: Start or stop the Caddy server
### END INIT INFO

NAME="Caddy"
NAME_BIN="caddy"
BIN="/usr/local/bin/caddy"

if [ -f "/usr/local/caddy/Caddyfile" ]; then
CONF="/usr/local/caddy/Caddyfile"
elif [ -f "/etc/caddy/Caddyfile" ]; then
CONF="/etc/caddy/Caddyfile"
fi
Info_font_prefix="\033[32m" && Error_font_prefix="\033[31m" && Info_background_prefix="\033[42;37m" && Error_background_prefix="\033[41;37m" && Font_suffix="\033[0m"
RETVAL=0

check_running(){
PID=`ps -ef |grep "${NAME_BIN}" |grep -v "grep" |grep -v "init.d" |grep -v "service" |awk '{print $2}'`
if [[ ! -z ${PID} ]]; then
return 0
else
return 1
fi
}

do_start(){
check_running
if [[ $? -eq 0 ]]; then
echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME (PID ${PID}) 正在运行..." && exit 0
else
ulimit -n 51200
nohup "$BIN" --conf="$CONF" -agree >> /tmp/caddy.log 2>&1 &
sleep 2s
check_running
if [[ $? -eq 0 ]]; then
echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME 启动成功 !"
else
echo -e "${Error_font_prefix}[错误]${Font_suffix} $NAME 启动失败 !"
fi
fi
}

do_stop(){
check_running
if [[ $? -eq 0 ]]; then
kill -9 ${PID}
RETVAL=$?
if [[ $RETVAL -eq 0 ]]; then
echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME 停止成功 !"
else
echo -e "${Error_font_prefix}[错误]${Font_suffix}$NAME 停止失败 !"
fi
else
echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME 未运行 !"
RETVAL=1
fi
}

do_status(){
check_running
if [[ $? -eq 0 ]]; then
echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME (PID ${PID}) 正在运行..."
else
echo -e "${Info_font_prefix}[信息]${Font_suffix} $NAME 未运行 !"
RETVAL=1
fi
}

do_tail(){
tail -100f /tmp/caddy.log
}

do_restart(){
do_stop
do_start
}

do_console(){
do_start
do_tail
}

case "$1" in
start|stop|restart|status|console|tail)
do_$1
;;
*)
echo "使用方法: $0 { start | stop | restart | status | console | tail }"
RETVAL=1
;;
esac
exit $RETVAL

更改权限,加入开机自启动

1
2
chmod 755 /etc/init.d/caddy
chkconfig caddy on

编辑配置文件

1
2
mkdir -p /etc/caddy/vhosts
vi /etc/caddy/Caddyfile

caddyfile 文件内容

1
2
# 配置文件分开存放
import vhosts/*.conf

具体配置文件

1
vi /etc/caddy/vhosts/hunkier.cn.conf

这里的代码仓库是开放的,若是私有项目,请自行查阅相关资料。

文件内容

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

hunkier.cn www.hunkier.cn {
# web 页面存放路径
root /var/www/hunkier/
# 配置错误页面,所有错误都显示 404.html 页面
errors {
* 404.html
}
# 启用压缩
gzip
# 用来申请及更新 https 证书的邮箱,前提是 hunkier.cn 的域名能解析到 本机
tls huangkuier@gmail.com
git github.com/hunkier/hunkier.github.io {
# git clone 的目标路径
path /var/www/hunkier
# 使用 webhook 触发自动部署,
# GitHub 项目的 setting -> Webhooks 页 Add webhook
# Payload URL 为 https://hunkier.cn/webhook
# Content type 为 application/json
# Scecret 为 GitHubSecretKey
hook /webhook GitHubSecretKey
hook_type github
clone_args --recursive
pull_args --recurse-submodules
# 拉取代码的分支
branch master
}
}

更多配置查看 Caddy文档

创建目录

1
mkdir -p /var/www/hunkier

解除链接文件限制

1
ulimit -n 8192

也可以使用 caddy 用作代理服务器用来科学上网(你懂得^_^)

1
vi /etc/caddy/vhost/xxx.hunkier.cn.conf

文件 xxx.hunkier.cn.conf 内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
xxx.hunkier.cn {
# 伪装成正常的网站
root /var/www/hunkier/
# 配置错误页面,所有错误都显示 404.html 页面
errors {
* 404.html
}
# 开启压缩
gzip
# 使用邮箱申请和续期证书
tls huangkuier@gmail.com
# http 代理设置
forwardproxy {
hide_ip
hide_via
# 使用 basic 认证
basicauth user1 passwd1
basicauth user2 passwd2
basicauth user3 passwd3
}
}

此时 caddy 被用作 web 服务器和代理服务器,协议转换推荐使用gost

caddy 服务 启动/停止/重启/检查状态

1
service caddy start/stop/restart/status

启动成功后可以在浏览器里面正常访问 https://hunkier.cn

若启动失败,查看日志

1
tail -100f /tmp/caddy.log 
谢谢你请我喝牛奶

欢迎关注我的其它发布渠道