这个站点本身
一台云服务器,一套 Docker Compose,把日常练习的服务统一收编:
Caddy 负责入口与 Let's Encrypt 证书自动签发,后端是 Django 和 CLI Proxy API。
没有控制面板生成的黑盒配置,所有编排文件都可以直接读、直接改。
DockerCaddyDjango
PythonKubernetesLinux
HTTPS / ACME
实践项目
服务一体化部署
用 Docker Compose 编排 Caddy、CLI Proxy API、mihomo 等组件,统一反代入口、统一证书生命周期,配置全部入库可复现。
Django 练习项目
Django 3.2 + Python 3.8,容器内运行,经 Caddy 反向代理对外提供 HTTPS,用于验证后端框架与部署链路。
Kubernetes 实验
自建 k8s-lab 环境,练习 Namespace、ResourceQuota 等资源对象与调度限制,记录排查过程。
运维笔记 · 最近踩过的坑
- 单文件 bind mount 按 inode 挂载。编辑器"写临时文件再改名"之后,容器里读到的还是旧配置;reload 无效,restart 才会重新按路径挂载。目录挂载可以彻底避开这个坑。
- Caddy 的 308 跳转是 catch-all。随便一个 Host 头都会跳转,不能用来判断域名是否已配置;要看 admin API 里实际的 host 列表。
- 证书签下来 ≠ 443 通。ACME 默认走 HTTP-01(80 端口),证书签发成功不能反推 443 已开放,安全组得单独放行。
- 反代之后 Django 要配 ALLOWED_HOSTS。直接访问 IP 时没事,换成域名就 DisallowedHost;加上域名和 `.heyxyh.com` 通配即可。关闭 DEBUG 前必须先配好它。
在线服务