Caddy 是一款 Go 实现 web 服务器, 内置默认 https 访问, 使用正式域名时, 自动获取 Let’s Encrypt 非营利性组织的 CA 证书, 实现安全访问.
当访问
https://localhost
是, 会自签 CA 证书, 这时候把 root.crt 根证书, 安装进系统, 也可实现安全访问.
声明 docker 相关配置
系统通过 Dockerfile 与 docker-compose.yaml 配置在容器使用 Caddy.
third_apps/caddy/Dockerfile
# syntax=docker/dockerfile:1
FROM caddy:2.6
自打包镜像, 后期可以扩展自己的修改
docker-compose.yaml
.
.
.
caddy: # compose 服务名称
build: ./third_apps/caddy # 打包目录
container_name: caddy # 容器名称
restart: always # 总是重启
ports: # 端口映射
- "80:80"
- "443:443"
- "443:443/udp"
volumes: # 本机目录挂载进容器内
- ./third_apps/caddy/Caddyfile:/etc/caddy/Caddyfile
- ./third_apps/caddy/site:/srv
- ./third_apps/caddy/data:/data
- ./third_apps/caddy/config:/config
- ./public/static:/public/static # Web 服务 root 目录下静态资源
- ./storage/app/upload:/public/upload # Web 服务 root 目录上传的文件
networks:
- default # docker 网络
使用
因为 gower, dev-full, test-full, prod-full 所有服务发布方式都依赖了 caddy, 所以无需指定运行 caddy
docker compose up -d dev-full
别忘记打包前端的代码哦, 所以建议用平台脚本运行启动
$ ./docker/run-dev-full
这样将启动 dev-full 和 caddy 容器
有关服务发布方式的区别, 见发布章节
配置
third_apps\caddy\Caddyfile
#{
# debug
#}
# development, test, production
localhost, www.qq.com, www.weixin.com {
tls internal
root * /public
handle /static/* {
file_server
}
handle /upload/* {
file_server
}
handle {
reverse_proxy gower:8080
}
}
三种发布方式, 全部实现相同容器 Web 服务的运行配置
localhost: 本机开发模式
www.qq.com: 发布测试版后, 我修改了本机 hosts 文件, 用测试服务器 ip 绑定到了 www.qq.com, 实现了安全测试访问服务
www.weixin.com: 发布生产版后, 同样修改 hosts 文件, 实现安全访问