Caddy 2 简明教程,小白向
本文介绍了在 Debian 10 环境下,Caddy 2 的编译、安装及配置。
看完本文后,你将可以使用 Caddy2 的:
- HTTP
- HTTPS
- 反向代理
- WebDav
- DNSPod DNS api
- ...
等功能。
本文部分内容转自 https://mritd.com/2021/01/07/lets-start-using-caddy2/
一、编译 Caddy2
注意: 在 Caddy1 时代,Caddy 官方发布的预编译二进制文件是不允许进行商业使用的,Caddy2 以后已经全部切换到 Apache 2.0 License,具体请参考 issue#2786。
在默认情况下 Caddy2 官方提供了预编译的二进制文件,以及自定义 build 下载页面,不过对于需要集成一些第三方插件时,我们仍需采用官方提供的 xcaddy 来进行自行编译;以下为具体的编译过程:
1.1、Golang 环境安装
本部分编译环境默认为 Debian 10 系统,使用 root 用户,其他环境请自行调整相关目录以及配置;
编译时请自行处理好科学上网相关配置,也可以直接用国外 VPS 服务器编译。
首先下载 go 语言的 SDK 压缩包,其他平台可以从 https://golang.org/dl/ 下载对应的压缩包:
cd ~
wget https://golang.org/dl/go1.16.3.linux-amd64.tar.gz
下载完成后解压并配置相关变量:
# 解压
tar -zxvf go1.16.3.linux-amd64.tar.gz
# 移动到任意目录
mkdir -p /opt/devtools
mv go /opt/devtools/go
# 创建 go 相关目录
mkdir -p ${HOME}/gopath/{src,bin,pkg}
# 调整变量配置,将以下变量加入到 shell 初始化配置中
# bash 用户请编辑 ~/.bashrc
export GOROOT='/opt/devtools/go'
export GOPATH="${HOME}/gopath"
# 如果是国内机器,需要导入添加代理
# export GOPROXY='https://goproxy.cn'
export PATH="${GOROOT}/bin:${GOPATH}/bin:${PATH}"
# 让配置生效
# 重新退出登录也可以
source ~/.bashrc
配置完成后,执行 go version
有返回信息:
go version
# 屏幕输出
go version go1.16.3 linux/amd64
1.2、安装 xcaddy
按照官方文档直接安装即可:
# 使用官方命令安装 xcaddy
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/xcaddy/gpg.key' | tee /etc/apt/trusted.gpg.d/caddy-xcaddy.asc
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/xcaddy/debian.deb.txt' | tee /etc/apt/sources.list.d/caddy-xcaddy.list
apt update
apt install xcaddy
# 查看 xcaddy 版本
xcaddy version
1.3、编译 Caddy2
编译之前系统需要安装 jq
、curl
、git
,没有请使用 apt install -y curl git jq
命令安装;
自行编译的目的是增加第三方插件方便使用,其中官方列出的插件可以从 Download 页面获取到。
其他插件可以从 GitHub 上寻找或者自行编写,整理好这些插件列表以后只需要使用 xcaddy
编译即可:
# 获取最新版本号,其实直接去 GitHub realse 页复制以下就行
# 这里转化为脚本是为了方便自动化
#获取caddy2的最新版本号,并导入变量version
export version=$(curl -s "https://api.github.com/repos/caddyserver/caddy/releases/latest" | jq -r .tag_name)
# 使用 xcaddy 编译
xcaddy build ${version} --output ./caddy_${version} \
--with github.com/abiosoft/caddy-exec \
--with github.com/caddy-dns/cloudflare \
--with github.com/caddy-dns/dnspod \
--with github.com/caddy-dns/namecheap \
--with github.com/caddy-dns/alidns \
--with github.com/caddy-dns/duckdns \
--with github.com/caddy-dns/gandi \
--with github.com/caddy-dns/route53 \
--with github.com/greenpau/caddy-auth-jwt \
--with github.com/greenpau/caddy-auth-portal \
--with github.com/greenpau/caddy-trace \
--with github.com/hairyhenderson/caddy-teapot-module \
--with github.com/kirsch33/realip \
--with github.com/porech/caddy-maxmind-geolocation \
--with github.com/caddyserver/format-encoder \
--with github.com/mholt/caddy-webdav
编译过程较慢,稍等片刻后将会生成编译好的二进制文件。
编译完成后,会出现一个 caddy_v2.3.0 的文件;
编译成功后可以通过 ./caddy_v2.3.0 list-modules
子命令查看被添加的插件是否成功编译到了 caddy 中:
# 查看被添加的插件
./caddy_v2.3.0 list-modules
# 屏幕输出
admin.api.load
admin.api.metrics
caddy.adapters.caddyfile
caddy.listeners.tls
caddy.logging.encoders.console
caddy.logging.encoders.filter
caddy.logging.encoders.filter.delete
caddy.logging.encoders.filter.ip_mask
caddy.logging.encoders.formatted
caddy.logging.encoders.json
caddy.logging.encoders.logfmt
caddy.logging.encoders.single_field
caddy.logging.writers.discard
caddy.logging.writers.file
caddy.logging.writers.net
caddy.logging.writers.stderr
caddy.logging.writers.stdout
caddy.storage.file_system
dns.providers.cloudflare
dns.providers.dnspod
dns.providers.duckdns
dns.providers.gandi
dns.providers.route53
exec
http
http.authentication.hashes.bcrypt
http.authentication.hashes.scrypt
http.authentication.providers.http_basic
http.authentication.providers.jwt
......
Copy
二、安装 Caddy2
2.1、宿主机安装
宿主机安装 Caddy2 需要使用 systemd 进行守护,幸运的是 Caddy2 官方提供了各种平台的安装包以及 systemd 配置文件仓库;
目前推荐的方式是先采用包管理器安装标准版本的Caddy2,然后替换自编译的可执行文件:
# 安装标准版本 Caddy2,默认配置文件目录: /etc/caddy/Caddyfile
apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/cfg/gpg/gpg.155B6D79CA56EA34.key' | apt-key add -
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/cfg/setup/config.deb.txt?distro=debian&version=any-version' | tee -a /etc/apt/sources.list.d/caddy-stable.list
apt update
apt install caddy
# 替换二进制文件:将编译的 /root/caddy_v2.3.0 文件移至 /usr/bin/caddy
systemctl stop caddy
rm -f /usr/bin/caddy
mv ./caddy_v2.3.0 /usr/bin/caddy
# 查看caddy是否安装成功
caddy version
启动
# 开机自启
systemctl enable caddy
# 启动caddy2
systemctl start caddy
# 停止caddy2
systemctl stop caddy
# 重载配置caddy配置文件(修改配置文件后执行)
systemctl reload caddy
# 查看caddy运行状态
systemctl status caddy
2.2、Docker 安装
Docker 用户可以通过 Dockerfile 自行编译 image ...
三、配置 Caddy2
Caddy2 的配置文件核心采用 json,但是 json 可读性不强;
关于 Caddyfile 的完整语法请查看官方文档 https://caddyserver.com/docs/caddyfile,本文仅做一些基本使用的样例。
3.1、配置示例
编辑默认的配置文件: /etc/caddy/Caddyfile
修改配置文件后,使用 systemctl reload caddy
重载配置;
静态网页配置:
https://yourdomain.com { root * /home/www/website file_server tls your@email.com }
使用自定义SSL证书:
https://yourdomain.com { root * /home/www/website file_server tls /etc/caddy/cert/ssl.pem /etc/caddy/cert/ssl.key }
文件列表配置:
https://yourdomain.com { root * /home/files file_server browse tls your@email.com }
反向代理配置:
https://yourdomain.com { reverse_proxy https://hexo.io { header_up Host {http.reverse_proxy.upstream.hostport} header_down Access-Control-Allow-Headers * header_down Access-Control-Allow-Origin * } tls your@email.com }
Websocket反向代理配置:
https://ws.yourdomain.com { ## HTTP 代理配置 ## 此时访问 ws.yourdomain.com,实际访问的是 127.0.0.1:8080/app/ 的内容 reverse_proxy / 127.0.0.1:8080/app/ ## WebSocket 代理配置 ## 客户端请求的 wss://ws.yourdomain.com/ws, 实际为 wss://127.0.0.1:8080/ws reverse_proxy /ws 127.0.0.1:8080 }
WebDav配置
先使用命令将明文密码进行加密:
caddy hash-password --plaintext yourpasswd # 屏幕输出密文,后续的配置文件中使用 JDJhJDE0JEdoTFhJbjhDaUEzM3kvV3pKYVFCdHVPeEg0V3NQQnl3a2pNNkNSd0Y0MmtFWFl3bUJaaXdt
编辑配置文件:
{ order webdav last } https://webdav.yourdomain.com { webdav { root /home/webdav } # 密码不能为明文,可以使用自带的工具加密: # caddy hash-password --plaintext yourpasswd # 用户名为:username,密码为:yourpasswd basicauth { username JDJhJDE0JEdoT... } tls your@email.com }
四、其他说明
caddy2 默认配置文件的目录位置,证书位置:
配置文件目录:/var/lib/caddy/.config/caddy
SSL证书文件目录:/var/lib/caddy/.local/share/caddy
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭