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

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
}

注意事项

  1. 数据持久化:确保 /data/config 目录被持久化,这些目录存储 TLS 证书和配置。
  2. 端口映射:Caddy 需要 80 (HTTP) 和 443 (HTTPS) 端口。
  3. 自动 HTTPS:Caddy 默认会自动获取和续订 Let's Encrypt 证书,确保域名已正确解析到服务器。
  4. 性能:对于高流量站点,考虑调整 Caddy 的资源限制。

通过 Docker 使用 Caddy 可以快速部署一个高性能、自动 HTTPS 的 Web 服务器,配置简单且易于维护。