Caddy2
搭建web服务器
这里是用docker compose
搭建caddy2
,因此首先你要有docker
的环境,并且会用docker
和docker compose
。
使用docker compose
快速搭建
首先你要有docker
的环境
ducker hub中搜索到caddy的官方镜像
里面有docker compose的一个示例,如下:
version: "3.7"
services:
caddy:
image: caddy
restart: unless-stopped
ports:
- "80:80"
- "443:443"
- "443:443/udp"
volumes:
- $PWD/Caddyfile:/etc/caddy/Caddyfile
- $PWD/site:/srv
- caddy_data:/data
- caddy_config:/config
volumes:
caddy_data:
caddy_config:
现在还不能直接docker compose up -d
运行。
➡️ 首先在当前目录新建一个Caddyfile
文件。Caddyfile
是caddy的配置文件,这是它的文档👉 Caddyfile Tutorial — Caddy Documentation (caddyserver.com)
因为
caddy
的镜像中并没有/etc/caddy/Caddyfile
这个文件,docker会新建并挂载一个
/etc/caddy/Caddyfile
目录,但这是一个文件。
➡️ 在Caddyfile
中写入想让caddy
做的事情,Caddyfile
让我想到了Dockerfile
,但Caddyfile
很简单,比如写下(这里显式指定80端口是为了关闭caddy的自动https,目前不需要https)
localhost:80 # 为了关闭tls
respond "Hello World!"
➡️ 敲下docker compose up -d
运行起来就行了。
输入curl localhost
你在命令行会看到输出Hello World
想让caddy
做什么?
想让
caddy
干什么,写到Caddyfile
里面就行了,Caddyfile
很简单举几个例子
👉 静态文件服务器
:80 # 是为了关闭默认的tls,请改为你自己的域名,比如 "example.com:80"
root * /srv/www
file_server
注意这个/srv
是挂载在宿主机当前目录的/site
下,所以我的静态文件放在$PWD/site/www/
下面
👉 反向代理
:80
file_server
reverse_proxy 127.0.0.1:9005
关于
revsere_proxy
的请求匹配 ➡️ Request matchers (Caddyfile) — Caddy Documentation (caddyserver.com)
👉 路由转发
:80
route /api/* {
uri replace /api/ 127.0.0.1:/api/v1/
reverse_proxy 127.0.0.1:4000
}
route
详细用法 ➡️ route (Caddyfile directive) — Caddy Documentation (caddyserver.com)
uri
的操作 ➡️ uri (Caddyfile directive) — Caddy Documentation (caddyserver.com)
👉 配置 https/tls/ssl
Caddy官网都说了它可以自动https(automatic HTTPS),这是它的一个很大的优势(相比于Nginx)
example.com # 你的域名,会自动将http请求重定向为https
tls youremail@example.com # 写下你的邮箱,会自动去 "let's encrypt" 申请ssl证书
respond "Hello World"
这样的话curl https://example.com
,就会输出hello world
。启动后前几次请求可能会失败,我推测是因为正在申请ssl证书。
当然也可以使用自己手动申请的ssl证书,只需要改动tls
指令,很简单。
tls /path/example.pem /path/example.key # 前者为ssl证书路径,后者为公钥路径
注意证书和密钥要放在$PWD/site/
目录或者其子目录下,因为这挂载在容器里面,容器可以访问。