环境与变量
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 站点部署体系。