将 Hugo 搭建的博客使用 Caddy 自动部署到云服务器

使用 Hugo + Stack 搭建好博客后,我们需要把博客部署到云服务器上。

我的 VPS 系统环境是:Ubuntu 24.04

选择的方案是:

  • 使用 Caddy 作为 Web 服务器
  • 使用 SSH + rsync 同步静态文件

本地生成博客静态文件 → 一键同步到 VPS → Caddy 自动更新内容。

下面是详细步骤

服务器准备

安装 Caddy 服务:

1
2
3
4
5
6
7
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
chmod o+r /usr/share/keyrings/caddy-stable-archive-keyring.gpg
chmod o+r /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

验证安装:

1
caddy version

此时你通过浏览器访问 http://VPS_IP 就能看到 Caddy 页面了。

创建博客网站目录,我把所有的页面文件放在 /var/www/sirenlingy/ 目录中:

1
mkdir -p /var/www/sirenlingyu

配置 Caddyfile 文件:

1
sudo nano /etc/caddy/Caddyfile

将文件中 :80 及后面的内容全部注释掉,然后写入以下内容:

1
2
3
4
5
6
7
8
sirenlingyu.com {
    root * /var/www/sirenlingyu
    file_server
    encode gzip zstd
    log {
        output file /var/log/caddy/access.log
    }
}

注意 sirenlingyu.com 是我的域名,需要替换为你自己的域名,并确保域名已经指向你的 VPS, yourmail@example.com 替换为你的邮箱,Caddy 就会自动帮你申请 SSL 证书。

Caddy 自动申请证书前,需要为 caddy 用户设置目录权限:

1
sudo chown -R caddy:caddy /var/lib/caddy

重启 Caddy 服务:

1
sudo systemctl reload caddy

配置 SSH 免密登录

出于安全考虑,我在 VPS 上新建一个 deploy 用户,只能访问网站目录,用于 SSH 登录部署网站。

在 VPS 上创建 deploy 用户:

1
2
3
sudo adduser deploy
sudo mkdir -p /home/deploy/.ssh
sudo chmod 700 /home/deploy/.ssh

设置网站目录访问权限:

1
sudo chown -R deploy:deploy /var/www/sirenlingyu

在本地电脑上创建密钥对:

1
ssh-keygen -t ed25519 -C "yourmail@example.com"

一路回车,最后会生成2个文件,\~/.ssh/id\_ed25519\~/.ssh/id\_ed25519.pub

复制公钥内容:

1
cat ~/.ssh/id_ed25519.pub

在 VPS 上执行:

1
2
3
echo "你的公钥内容" | sudo tee -a /home/deploy/.ssh/authorized_keys
sudo chmod 600 /home/deploy/.ssh/authorized_keys
sudo chown -R deploy:deploy /home/deploy/.ssh

测试登录:

1
ssh deploy@VPS_IP

将静态文件部署到服务器

在本地博客目录中构建静态页面:

1
hugo

执行部署命令:

1
rsync -avz --delete public/ deploy@VPS_IP:/var/www/sirenlingyu/

部署完成后,用浏览器访问 https://sirenlingyu.com 就能看到博客了!

一键部署脚本

为了以后更新方便,写了一个一键部署脚本 deploy.sh 放在博客目录中:

1
2
3
4
#!/bin/bash

hugo
rsync -avz --delete public/ deploy@VPS_IP:/var/www/sirenlingyu/

配置执行权限:

1
chmod +x deploy.sh

以后更新博客,只需要执行一遍就可以了:

1
./deploy.sh