用 Docker 打包静态站并加健康检查的实践
把 Hugo 生成的静态站放进多阶段 Docker 镜像,用 nginx:alpine 作运行时,构建阶段只保留 public 目录,镜像从 90MB 压到 23MB。容器加 HEALTHCHECK 定时请求 /healthz,返回 200 才算健康;同时用 docker compose 固定重启策略与只读根文件系统,日志走 json-file 并限制大小。踩到的坑有两个:一是 nginx 默认配置对带下划线的请求头返回 400,静态站本身无碍但健康检查路径要避开;二是只读根文件系统下 nginx 写 pid 和临时文件失败,需挂 tmpfs 到 /var/cache/nginx 与 /var/run。结论是这套组合在单机小站上足够稳,健康检查让反向代理能自动剔除异常实例,比单纯看容器 running 状态可靠得多。
把 Hugo 生成的静态站放进多阶段 Docker 镜像,用 nginx:alpine 作运行时,构建阶段只保留 public 目录,镜像从 90MB 压到 23MB。容器加 HEALTHCHECK 定时请求 /healthz,返回 200 才算健康;同时用 docker compose 固定重启策略与只读根文件系统,日志走 json-file 并限制大小。踩到的坑有两个:一是 nginx 默认配置对带下划线的请求头返回 400,静态站本身无碍但健康检查路径要避开;二是只读根文件系统下 nginx 写 pid 和临时文件失败,需挂 tmpfs 到 /var/cache/nginx 与 /var/run。结论是这套组合在单机小站上足够稳,健康检查让反向代理能自动剔除异常实例,比单纯看容器 running 状态可靠得多。