hunkier

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

使用 https 协议部署博客

前言

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

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

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

yum install -y git

安装 caddy

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

添加 caddy 到系统服务

vi /etc/init.d/caddy

写入内容

#!/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

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

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

编辑配置文件

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

caddyfile 文件内容

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

具体配置文件

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

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

文件内容


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
        # Cecret 为 GitHubSecretKey
        hook /webhook GitHubSecretKey
        hook_type github
        clone_args --recursive
        pull_args --recurse-submodules
    }
}

创建目录

mkdir -p /var/www/hunkier

解除链接文件限制

ulimit -n 8192

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

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

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

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 服务 启动/停止/重启/检查状态

service caddy start/stop/restart/status

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

若启动失败,查看日志

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

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