Caddy-易配置、自动HTTPS的Web服务器

Caddy 是一个现代化的、支持 HTTP/2 的 Web 服务器,以其简单的配置和自动 HTTPS 功能而闻名。下面我将介绍如何使用 Docker 来部署和配置 Caddy 服务器。
基本 Docker 运行方式
最简单的运行 Caddy 的方式是:
docker run -d -p 80:80 -p 443:443 -v $PWD/Caddyfile:/etc/caddy/Caddyfile caddy
使用 Docker Compose 配置
更推荐使用 Docker Compose 来管理 Caddy 服务。以下是一个基本的 docker-compose.yml
示例:
services:
caddy:
image: caddy:latest
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./site:/srv
- caddy_data:/data
- caddy_config:/config
volumes:
caddy_data:
caddy_config:
Caddyfile 配置示例
Caddyfile 是 Caddy 的主要配置文件。以下是一些常见配置示例:
1. 静态网站服务
example.com {
root * /srv
file_server
}
2. 反向代理配置
api.example.com {
reverse_proxy backend:8000
}
3. PHP 应用支持
app.example.com {
root * /srv/public
php_fastcgi php:9000
file_server
}
4. 多站点配置
example.com, www.example.com {
root * /srv/example
file_server
}
blog.example.com {
root * /srv/blog
file_server
}
高级 Docker 配置
1. 使用环境变量
environment:
- CADDY_DOMAIN=example.com
- CADDY_EMAIL=admin@example.com
2. 自动 HTTPS 配置
Caddy 默认自动启用 HTTPS,如果需要禁用:
{
auto_https off
}
example.com {
...
}
3. 自定义模块
如果需要添加第三方模块,可以构建自定义镜像:
FROM caddy:builder AS builder
RUN xcaddy build \
--with github.com/caddy-dns/cloudflare
FROM caddy:latest
COPY --from=builder /usr/bin/caddy /usr/bin/caddy
实际应用示例
1. 作为 WordPress 的反向代理
# docker-compose.yml
services:
caddy:
image: caddy:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
depends_on:
- wordpress
wordpress:
image: wordpress:latest
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes:
- wordpress_data:/var/www/html
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
volumes:
- db_data:/var/lib/mysql
volumes:
caddy_data:
caddy_config:
wordpress_data:
db_data:
对应的 Caddyfile:
wordpress.example.com {
reverse_proxy wordpress:80
}
注意事项
- 数据持久化:确保
/data
和/config
目录被持久化,这些目录存储 TLS 证书和配置。 - 端口映射:Caddy 需要 80 (HTTP) 和 443 (HTTPS) 端口。
- 自动 HTTPS:Caddy 默认会自动获取和续订 Let's Encrypt 证书,确保域名已正确解析到服务器。
- 性能:对于高流量站点,考虑调整 Caddy 的资源限制。
通过 Docker 使用 Caddy 可以快速部署一个高性能、自动 HTTPS 的 Web 服务器,配置简单且易于维护。