Ray's Blog

部署hugo服务器记录

完整部署方案

1. 安装 Hugo

推荐两种安装方式(Snap 最简单,.deb 包版本最新):

方式一:通过 Snap 安装(推荐)

sudo apt update
sudo snap install hugo

方式二:通过 .deb 包安装(获取最新版)

# 下载最新版本(以 v0.111.2 为例,可从 GitHub releases 查看最新版本号)
wget https://github.com/gohugoio/hugo/releases/download/v0.111.2/hugo_0.111.2_linux-amd64.deb

# 安装
sudo dpkg -i hugo_0.111.2_linux-amd64.deb
# 如有依赖错误,运行
sudo apt install -f

# 验证安装
hugo version

2. 创建 Hugo 站点并配置 hugo-paper 主题

# 创建新站点
hugo new site mysite
cd mysite

# 初始化 git(主题需要通过 git 管理)
git init

# 安装 hugo-paper 主题
git clone https://github.com/nanxiaobei/hugo-paper themes/paper

# 创建第一篇内容
hugo new content posts/hello.md

# 编辑配置文件
nano hugo.toml  # 或 config.toml(旧版 Hugo)

配置文件示例 (hugo.toml):

baseURL = 'https://yourdomain.com'
languageCode = 'zh-CN'
title = '我的博客'
theme = 'paper'

[params]
  # hugo-paper 主题参数(参考主题文档)
  color = 'light'  # light/dark/auto
  disableHero = false

3. 构建静态文件

关键概念:在生产环境中,不需要运行 hugo server(开发服务器),而是使用 hugo 命令生成静态文件:

# 构建(生成到 public/ 目录)
hugo --minify

# 查看生成的文件
ls public/

4. 配置 Nginx

安装 Nginx:

sudo apt install nginx

Nginx 站点配置(作为静态文件服务器,而非反向代理):

创建配置文件 /etc/nginx/sites-available/mysite

server {
    listen 80;
    server_name yourdomain.com;

    root /var/www/mysite/public;  # 指向 Hugo 生成的 public 目录
    index index.html index.htm;

    # 静态文件缓存
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }

    # Hugo 生成的 SPA 特性支持(可选)
    location / {
        try_files $uri $uri/ =404;
    }

    # gzip 压缩
    gzip on;
    gzip_types text/plain text/css application/json application/javascript;
}

启用站点:

sudo ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

5. 部署流程(手动或自动)

手动部署流程:

# 在本地/服务器上构建
cd ~/mysite
hugo --minify

# 复制到 Nginx 目录(或直接在站点目录构建)
sudo rm -rf /var/www/mysite/public
sudo cp -r public /var/www/mysite/

# 设置权限
sudo chown -R www-data:www-data /var/www/mysite

自动化方案(可选): 如需自动部署,可配置 GitHub Actions + rsync 到服务器,或使用 Webhook 实现推送自动构建。

6. 启动与维护

# 本地预览(开发时)
hugo server -D --bind 0.0.0.0

# 生产构建
hugo --minify

# 重新加载 Nginx
sudo systemctl reload nginx