环境与变量

Hugo 的环境和变量系统为静态站点的多环境部署提供了强大的支持。通过合理使用环境变量和环境特定配置,您可以轻松管理从开发到生产的整个部署流程。

默认环境设置

Hugo 根据不同的命令自动选择合适的默认环境,这种设计让开发者能够无缝地在不同环境间切换。

环境自动识别

# 开发环境(默认)
hugo server
# 等同于
hugo server --environment development

# 生产环境(默认)
hugo
# 等同于
hugo --environment production

环境特定行为

不同环境下,Hugo 的行为会有所不同:

开发环境特点

  • 启用草稿内容构建(buildDrafts = true
  • 启用未来日期内容(buildFuture = true
  • 启用过期内容(buildExpired = true
  • 提供详细的构建信息
  • 支持热重载和实时预览

生产环境特点

  • 禁用草稿内容(buildDrafts = false
  • 禁用未来日期内容(buildFuture = false
  • 禁用过期内容(buildExpired = false
  • 启用内容压缩优化
  • 生成最终的部署文件

环境变量配置

Hugo 使用严格的环境变量命名规范,确保配置的一致性和可预测性。

环境变量命名规范

所有 Hugo 相关的环境变量必须以 HUGO_ 为前缀:

# ✓ 正确的环境变量命名
export HUGO_BASEURL="https://example.com"
export HUGO_ENVIRONMENT="production"
export HUGO_PARAMS_AUTHOR="John Doe"

# ✗ 错误的命名(将被忽略)
export BASEURL="https://example.com"
export AUTHOR="John Doe"

基础配置变量

# 站点基础配置
export HUGO_BASEURL="https://myblog.com"
export HUGO_LANGUAGECODE="zh-cn"
export HUGO_TITLE="我的技术博客"
export HUGO_THEME="my-theme"

# 构建配置
export HUGO_ENVIRONMENT="production"
export HUGO_BUILDDRAFTS="false"
export HUGO_BUILDFUTURE="false"
export HUGO_BUILDEXPIRED="false"

# 输出配置
export HUGO_MINIFY="true"
export HUGO_UGLYURLS="false"
export HUGO_CANONIFYURLS="true"

自定义参数变量

自定义参数必须使用 HUGO_PARAMS_ 前缀:

# 站点参数
export HUGO_PARAMS_AUTHOR="张三"
export HUGO_PARAMS_DESCRIPTION="专注于云原生技术的技术博客"
export HUGO_PARAMS_KEYWORDS="云原生,Kubernetes,Docker"

# 功能开关
export HUGO_PARAMS_ENABLE_COMMENTS="true"
export HUGO_PARAMS_ENABLE_ANALYTICS="true"
export HUGO_PARAMS_ENABLE_SEARCH="false"

# 第三方服务配置
export HUGO_PARAMS_ANALYTICS_ID="GA-XXXXXXXXX"
export HUGO_PARAMS_DISQUS_SHORTNAME="myblog"
export HUGO_PARAMS_TWITTER_HANDLE="@myblog"

系统内部变量

Hugo 还支持一些系统级的环境变量:

# 工具路径配置
export DART_SASS_BINARY="/usr/local/bin/sass"
export GO_BINARY="/usr/local/bin/go"
export NPX_BINARY="/usr/local/bin/npx"

# 性能配置
export HUGO_MEMORYLIMIT="512MB"
export HUGO_NUMWORKERMULTIPLIER="2"
export HUGO_TIMEOUT="30s"

# 调试配置
export HUGO_VERBOSE="true"
export HUGO_VERBOSELOG="true"
export HUGO_LOGLEVEL="info"

环境变量使用模式

1. 开发环境配置

创建 .env.development 文件:

# .env.development
HUGO_BASEURL=http://localhost:1313
HUGO_ENVIRONMENT=development
HUGO_BUILDDRAFTS=true
HUGO_BUILDFUTURE=true
HUGO_BUILDEXPIRED=true

# 开发工具配置
HUGO_PARAMS_ENABLE_LIVERELOAD=true
HUGO_PARAMS_SHOW_DEBUG_INFO=true
HUGO_PARAMS_ENABLE_ANALYTICS=false

2. 生产环境配置

创建 .env.production 文件:

# .env.production
HUGO_BASEURL=https://myblog.com
HUGO_ENVIRONMENT=production
HUGO_BUILDDRAFTS=false
HUGO_BUILDFUTURE=false
HUGO_BUILDEXPIRED=false
HUGO_MINIFY=true

# 生产功能配置
HUGO_PARAMS_ENABLE_ANALYTICS=true
HUGO_PARAMS_ENABLE_COMMENTS=true
HUGO_PARAMS_ENABLE_SEO=true

# 第三方服务
HUGO_PARAMS_ANALYTICS_ID=GA-XXXXXXXXX
HUGO_PARAMS_DISQUS_SHORTNAME=myblog-prod

3. CI/CD 环境配置

在 CI/CD 流水线中使用环境变量:

# .github/workflows/deploy.yml
name: Deploy to Production

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    env:
      HUGO_BASEURL: https://myblog.com
      HUGO_ENVIRONMENT: production
      HUGO_PARAMS_ANALYTICS_ID: ${{ secrets.ANALYTICS_ID }}
      HUGO_PARAMS_API_KEY: ${{ secrets.API_KEY }}
    
    steps:
      - uses: actions/checkout@v3
      - name: Setup Hugo
        uses: peaceiris/actions-hugo@v2
        with:
          hugo-version: 'latest'
      - name: Build
        run: hugo --minify
      - name: Deploy
        run: # 部署命令

配置文件中使用环境变量

Hugo 支持在配置文件中直接引用环境变量:

TOML 配置中的环境变量

# config/production/hugo.toml
baseURL = "${HUGO_BASEURL}"
title = "${HUGO_TITLE}"

[params]
author = "${HUGO_PARAMS_AUTHOR}"
description = "${HUGO_PARAMS_DESCRIPTION}"
analyticsID = "${HUGO_PARAMS_ANALYTICS_ID}"

# 条件配置
enableComments = "${HUGO_PARAMS_ENABLE_COMMENTS}"
enableAnalytics = "${HUGO_PARAMS_ENABLE_ANALYTICS}"

环境变量默认值

# 使用默认值的环境变量
[params]
author = "${HUGO_PARAMS_AUTHOR:默认作者}"
description = "${HUGO_PARAMS_DESCRIPTION:网站描述}"
postsPerPage = "${HUGO_PARAMS_POSTS_PER_PAGE:10}"

复杂配置示例

# config/_default/hugo.toml
baseURL = "${HUGO_BASEURL:http://localhost:1313}"
languageCode = "${HUGO_LANGUAGECODE:zh-cn}"
title = "${HUGO_TITLE:我的站点}"

# 条件构建设置
buildDrafts = "${HUGO_BUILDDRAFTS:false}"
buildFuture = "${HUGO_BUILDFUTURE:false}"
buildExpired = "${HUGO_BUILDEXPIRED:false}"

[params]
# 站点信息
author = "${HUGO_PARAMS_AUTHOR:站点作者}"
description = "${HUGO_PARAMS_DESCRIPTION:站点描述}"
keywords = "${HUGO_PARAMS_KEYWORDS:}"

# 功能开关
enableComments = "${HUGO_PARAMS_ENABLE_COMMENTS:false}"
enableAnalytics = "${HUGO_PARAMS_ENABLE_ANALYTICS:false}"
enableSearch = "${HUGO_PARAMS_ENABLE_SEARCH:true}"

# 第三方服务
analyticsID = "${HUGO_PARAMS_ANALYTICS_ID:}"
disqusShortname = "${HUGO_PARAMS_DISQUS_SHORTNAME:}"

# 社交媒体
[params.social]
twitter = "${HUGO_PARAMS_TWITTER_HANDLE:}"
github = "${HUGO_PARAMS_GITHUB_USERNAME:}"
email = "${HUGO_PARAMS_EMAIL:}"

配置检查与调试

基本配置检查

# 显示当前完整配置
hugo config

# 显示特定环境配置
hugo config --environment production
hugo config --environment development

# 以不同格式输出
hugo config --format json
hugo config --format yaml

环境变量验证

# 检查环境变量是否正确设置
echo $HUGO_BASEURL
echo $HUGO_PARAMS_AUTHOR

# 检查所有 Hugo 相关环境变量
env | grep HUGO_

# 验证配置中的环境变量替换
hugo config | grep -i "baseurl\|author\|analytics"

配置调试技巧

1. 分步验证

# 验证基础配置
hugo config | head -20

# 验证参数配置
hugo config | grep -A 20 "params"

# 验证菜单配置
hugo config | grep -A 10 "menu"

2. 环境对比

# 对比不同环境配置
hugo config --environment development > dev.yaml
hugo config --environment production > prod.yaml
diff dev.yaml prod.yaml

3. 挂载点检查

# 检查文件挂载配置
hugo config mounts

# 检查模块配置
hugo mod graph

最佳实践

1. 环境变量管理策略

# 使用 .env 文件管理环境变量
.env.example      # 示例文件,提交到版本控制
.env.development  # 开发环境配置
.env.staging      # 测试环境配置
.env.production   # 生产环境配置(不提交到版本控制)

2. 敏感信息处理

# 使用专门的文件管理敏感配置
.env.secrets      # 包含 API 密钥、令牌等敏感信息
.env.secrets.example  # 敏感信息的示例文件

3. 环境变量验证脚本

#!/bin/bash
# scripts/check-env.sh

required_vars=(
    "HUGO_BASEURL"
    "HUGO_PARAMS_AUTHOR"
    "HUGO_PARAMS_ANALYTICS_ID"
)

for var in "${required_vars[@]}"; do
    if [[ -z "${!var}" ]]; then
        echo "错误:环境变量 $var 未设置"
        exit 1
    fi
done

echo "所有必需的环境变量已正确设置"

4. 配置加载脚本

#!/bin/bash
# scripts/load-env.sh

ENV=${1:-development}
ENV_FILE=".env.${ENV}"

if [[ -f "$ENV_FILE" ]]; then
    echo "加载 $ENV_FILE 环境配置..."
    export $(cat "$ENV_FILE" | xargs)
else
    echo "警告:环境配置文件 $ENV_FILE 不存在"
fi

# 运行 Hugo
hugo server --environment "$ENV"

5. 部署前检查

#!/bin/bash
# scripts/pre-deploy-check.sh

echo "检查生产环境配置..."
hugo config --environment production > /dev/null || {
    echo "错误:生产环境配置无效"
    exit 1
}

echo "验证环境变量..."
./scripts/check-env.sh || exit 1

echo "构建测试..."
hugo --environment production --destination /tmp/hugo-build-test || {
    echo "错误:构建失败"
    exit 1
}

echo "部署前检查通过!"

通过合理使用环境变量和环境配置,您可以构建出灵活、安全且易于维护的多环境 Hugo 站点部署体系。

文章导航

章节内容

这是章节的内容页面。

章节概览