用 Hugo 和 Caddy 部署一个静态博客

这篇文章记录一种简单、可维护的静态博客部署方式:用 Hugo 生成静态页面,用 Caddy 对外提供访问和自动 HTTPS。 示例中统一使用 blog.example.com 作为占位域名。实际部署时,把它替换成自己的域名即可。 架构思路 Hugo 和 Caddy 各自负责一件事: Hugo:把 Markdown、主题和配置生成成静态 HTML/CSS/JS。 Caddy:监听 80/443,对外提供静态文件服务,并自动申请和续签 HTTPS 证书。 推荐目录结构: /opt/blog # Hugo 源码目录:配置、文章、主题 /var/www/blog # Hugo 生成后的静态文件目录,Caddy 对外读取这里 /etc/caddy # Caddy 配置目录 日常只编辑 /opt/blog。/var/www/blog 是构建产物,不手动修改。 权限模型 一个容易踩坑的点是 /var/www/blog 的权限。 Caddy 只是读取静态文件,不需要拥有发布目录。因此推荐: /opt/blog 归日常登录用户所有。 /var/www/blog 也归日常登录用户所有。 Caddy 只需要通过普通文件权限读取 /var/www/blog。 这样每次发布时,Hugo 可以直接写入 /var/www/blog,不需要反复 chown。 假设日常登录用户是 deploy,可以这样设置: sudo mkdir -p /opt/blog /var/www/blog sudo chown -R deploy:deploy /opt/blog /var/www/blog find /var/www/blog -type d -exec chmod 755 {} \; find /var/www/blog -type f -exec chmod 644 {} \; 如果是个人服务器,也可以直接把 deploy 替换成自己的用户名。 ...

May 26, 2026 · 3 min