<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>技术 on EzEasy</title>
    <link>https://blog.wecando.cc/categories/%E6%8A%80%E6%9C%AF/</link>
    <description>Recent content in 技术 on EzEasy</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Tue, 26 May 2026 17:00:00 +0800</lastBuildDate>
    <atom:link href="https://blog.wecando.cc/categories/%E6%8A%80%E6%9C%AF/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>用 Hugo 和 Caddy 部署一个静态博客</title>
      <link>https://blog.wecando.cc/posts/deploy-hugo-with-caddy/</link>
      <pubDate>Tue, 26 May 2026 17:00:00 +0800</pubDate>
      <guid>https://blog.wecando.cc/posts/deploy-hugo-with-caddy/</guid>
      <description>&lt;p&gt;这篇文章记录一种简单、可维护的静态博客部署方式：用 Hugo 生成静态页面，用 Caddy 对外提供访问和自动 HTTPS。&lt;/p&gt;
&lt;p&gt;示例中统一使用 &lt;code&gt;blog.example.com&lt;/code&gt; 作为占位域名。实际部署时，把它替换成自己的域名即可。&lt;/p&gt;
&lt;h2 id=&#34;架构思路&#34;&gt;架构思路&lt;/h2&gt;
&lt;p&gt;Hugo 和 Caddy 各自负责一件事：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Hugo：把 Markdown、主题和配置生成成静态 HTML/CSS/JS。&lt;/li&gt;
&lt;li&gt;Caddy：监听 &lt;code&gt;80/443&lt;/code&gt;，对外提供静态文件服务，并自动申请和续签 HTTPS 证书。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;推荐目录结构：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/opt/blog        # Hugo 源码目录：配置、文章、主题
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/var/www/blog    # Hugo 生成后的静态文件目录，Caddy 对外读取这里
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/etc/caddy       # Caddy 配置目录
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;日常只编辑 &lt;code&gt;/opt/blog&lt;/code&gt;。&lt;code&gt;/var/www/blog&lt;/code&gt; 是构建产物，不手动修改。&lt;/p&gt;
&lt;h2 id=&#34;权限模型&#34;&gt;权限模型&lt;/h2&gt;
&lt;p&gt;一个容易踩坑的点是 &lt;code&gt;/var/www/blog&lt;/code&gt; 的权限。&lt;/p&gt;
&lt;p&gt;Caddy 只是读取静态文件，不需要拥有发布目录。因此推荐：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/opt/blog&lt;/code&gt; 归日常登录用户所有。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/var/www/blog&lt;/code&gt; 也归日常登录用户所有。&lt;/li&gt;
&lt;li&gt;Caddy 只需要通过普通文件权限读取 &lt;code&gt;/var/www/blog&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这样每次发布时，Hugo 可以直接写入 &lt;code&gt;/var/www/blog&lt;/code&gt;，不需要反复 &lt;code&gt;chown&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;假设日常登录用户是 &lt;code&gt;deploy&lt;/code&gt;，可以这样设置：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo mkdir -p /opt/blog /var/www/blog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo chown -R deploy:deploy /opt/blog /var/www/blog
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;find /var/www/blog -type d -exec chmod &lt;span style=&#34;color:#ae81ff&#34;&gt;755&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;find /var/www/blog -type f -exec chmod &lt;span style=&#34;color:#ae81ff&#34;&gt;644&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;{}&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;\;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果是个人服务器，也可以直接把 &lt;code&gt;deploy&lt;/code&gt; 替换成自己的用户名。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
