Sign inSign up

dothebetter/caddy2

By dothebetter

Updated 20 days ago

caddy2: alpine镜像,支持amd64;arm64v8;arm32v7,集成常用插件及geoipupdate

Image
0

1.8K

dothebetter/caddy2 repository overview

简介:

Static Badge GitHub repo size GitHub Actions Workflow Status
Static Badge Static Badge Docker Image Version Docker Image Size Docker Pulls

自用Caddy2 Alpine镜像,支持amd64;arm64v8;arm32v7系统。在Caddy官方builder镜像添加常用插件,集成caddy-geo-ops插件实现GeoIP请求过滤与数据库统一管理(文件变更热重载+定时自动更新,配合P3TERX/GeoLite.mmdb镜像源无需注册账号)。

项目地址:https://github.com/DoTheBetter/docker/tree/master/caddy2

官网地址
插件列表

各插件用法详见插件地址,镜像自带部分插件配置使用示例Caddyfile.default

名称插件地址说明
caddy-docker-proxy/plugin/v2https://github.com/lucaslorentz/caddy-docker-proxy该插件使 Caddy 能够通过标签用作 Docker 容器的反向代理,labels标签可与Caddyfile配置文件同时使用,Caddyfile配置文件修改后自动重载
caddy-webdavhttps://github.com/mholt/caddy-webdav提供webdav服务
caddy-geo-opshttps://github.com/ubiuser/caddy-geo-ops根据geoip数据库过滤请求(国家/省份/ASN等),支持数据库文件变更热重载与auto_update定时更新,可通过{geo.*}占位符输出访客地理位置。使用示例详见Caddyfile.default
acmednshttps://github.com/caddy-dns/acmedns一个简化的DNS服务器,配备RESTful HTTP API,提供一种简单的方式来自动化ACME DNS-01 challenges
caddy-dns/alidnshttps://github.com/caddy-dns/alidnshttps证书签署dns认证
caddy-dns/tencentcloudhttps://github.com/caddy-dns/tencentcloudhttps证书签署dns认证
caddy-dns/huaweicloudhttps://github.com/caddy-dns/huaweicloudhttps证书签署dns认证
caddy-dns/cloudflarehttps://github.com/caddy-dns/cloudflarehttps证书签署dns认证
caddy-dns/godaddyhttps://github.com/caddy-dns/godaddyhttps证书签署dns认证
caddy-dns/namecheaphttps://github.com/caddy-dns/namecheaphttps证书签署dns认证
caddy-dns/namesilohttps://github.com/caddy-dns/namesilohttps证书签署dns认证

相关参数:

环境变量

下面是可用于自定义安装的可用选项的完整列表。

变量名是否必须默认值说明
TZ可选Asia/Shanghai设置时区
CADDY_DOCKER_LOG_LEVEL可选WARNcaddy-docker-proxy 模块日志等级:DEBUGINFOWARNERROR
GEOIPUPDATE_AUTO可选falseGeoIP Update服务开关,true为开启:容器初始化阶段(Caddy启动前)自动初始下载数据库,未配置MaxMind凭证时按GEOIPUPDATE_FREQUENCY定时更新
GEOIPUPDATE_EDITION_IDS可选GeoLite2-Countrygeoip数据库类型(多个用英文逗号分隔),可选值:GeoLite2-Country(国家)、GeoLite2-City(城市)、GeoLite2-ASN(ASN),对应Caddyfile占位符库名为geolite2-country/geolite2-city/geolite2-asn
GEOIPUPDATE_DL_URL可选https://github.com/P3TERX/GeoLite.mmdb/releases/latest/downloadgeoip数据库下载地址,最终下载URL为<GEOIPUPDATE_DL_URL>/<库名>.mmdb;国内直连不畅时可替换为加速前缀,如https://gh-proxy.com/https://github.com/P3TERX/GeoLite.mmdb/releases/latest/download
GEOIPUPDATE_FREQUENCY可选72geoip数据库更新间隔(小时),注意不能为0
GEOIPUPDATE_ACCOUNT_ID可选MaxMind账号ID,与GEOIPUPDATE_LICENSE_KEY同时配置并在Caddyfile中启用auto_update后,geoip数据库由caddy-geo-ops插件通过MaxMind官方协议自动更新(GeoIP Update服务完成数据库补齐后自动退出)
GEOIPUPDATE_LICENSE_KEY可选MaxMind许可证密钥,作用同上
GEOFILTER_COUNTRIES可选CNGeo过滤放行的国家码(多个用英文逗号分隔),init脚本据此自动生成/config/geofilter.caddy过滤片段(反向拒绝逻辑:@denied匹配器内联not geo_ops国家条件)
GEOFILTER_WHITELIST可选Geo过滤放行的白名单IP/CIDR(多个用英文逗号分隔),即使访客国家码不在GEOFILTER_COUNTRIES放行列表内也予放行;为空则跳过白名单

注意:geoip数据库由caddy-geo-ops插件统一管理(文件变更热重载,配置示例详见Caddyfile.default)。开启GEOIPUPDATE_AUTO=true后,首次启动若 /data/GeoIP 目录为空,会在容器初始化阶段(Caddy启动前)自动从P3TERX/GeoLite.mmdb镜像源下载GeoLite2免费初始库(无需注册账号),确保Caddy加载geoip数据库时库已就位(下载失败不阻塞启动,由GeoIP Update服务按周期重试补齐):

  • 未配置MaxMind凭证:由GeoIP Update服务按GEOIPUPDATE_FREQUENCY定时从镜像源更新;
  • 配置了 GEOIPUPDATE_ACCOUNT_ID/GEOIPUPDATE_LICENSE_KEY(MaxMind免费账号注册地址:https://www.maxmind.com/en/geolite2/signup ):在Caddyfile中启用auto_update及凭证配置后,由插件通过MaxMind官方协议自动更新(GeoIP Update服务完成数据库补齐后自动退出)。

Geo过滤片段:容器初始化阶段,init脚本会根据GEOFILTER_COUNTRIES/GEOFILTER_WHITELIST自动生成/config/geofilter.caddy过滤逻辑(反向拒绝规则:@denied匹配器内联not geo_ops <国家码>not remote_ip <白名单>条件,既非放行国家又非白名单的请求返回403,放行请求自然 fall through 到站点后续 handler;覆盖写入、每次重启重新生成)。站点无需手写过滤逻辑,在对应handle块内 import /config/geofilter.caddy 即可(示例见Caddyfile.default)。

开放的端口
范围描述
80http端口
443https端口
443/udpQUIC/HTTP3协议端口
2019Caddy2 API端口 (可选)
数据卷

下面的目录用于配置,并且可以映射为持久存储。

目录描述
/config配置文件目录
/dataTLS 证书、私钥、GeoIP数据和其他必要信息存储目录
/var/run/docker.sock宿主机Docker守护进程默认监听的Unix域套接字(Unix domain socket)

部署方法:

本镜像在 docker hub,ghcr.io 及 aliyuncs同步推送,docker hub 不能使用时可使用其他仓库

Docker Run
docker network create web
docker run -d \
	--net web \
	--name caddy2 \
	--restart always \
	--cap-add NET_ADMIN \
	-e TZ=Asia/Shanghai \
	-e GEOIPUPDATE_AUTO=true \
	-p 8080:80 \
	-p 4443:443 \
	-p 4443:443/udp \
	-v /var/run/docker.sock:/var/run/docker.sock:ro \
	-v /docker/caddy2/config:/config \
	-v /docker/caddy2/data:/data \
	dothebetter/caddy2:latest
	#ghcr.io/dothebetter/caddy2:latest
	#registry.cn-hangzhou.aliyuncs.com/dothebetter/caddy2:latest
docker-compose.yml
version: '3'
services:
  caddy2:
    image: dothebetter/caddy2:latest
    #ghcr.io/dothebetter/caddy2:latest
    #registry.cn-hangzhou.aliyuncs.com/dothebetter/caddy2:latest
    container_name: caddy2
    restart: always
    networks:
      - web
    cap_add:
      - NET_ADMIN
    environment:
      - TZ=Asia/Shanghai
      - GEOIPUPDATE_AUTO=true
    ports:
      - "8080:80"
      - "4443:443"
      - "4443:443/udp"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - /docker/caddy2/config:/config
      - /docker/caddy2/data:/data

networks:
  web:
    external: true

更新日志:

详见 CHANGELOG.md

Tag summary

Content type

Image

Digest

sha256:94b435486

Size

30.9 MB

Last updated

20 days ago

docker pull dothebetter/caddy2