利用AI高效搭建Hugo Landing Page实录

背景

为了推广我的App AMClock,我决定搭建一个产品落地页(Landing Page)。整个开发和部署过程中,AI助手(Cursor)是高效开发、排查问题的得力伙伴。


技术选型与准备

  • 静态站点生成器:Hugo,因之前搭建 blog 用的 hugo,相对熟悉,另外其构建速度快、支持多语言、支持屏幕适配
  • 主题:hugo-saasify-theme(fork到自己仓库,方便后续定制和维护)。
  • 前端工具:TailwindCSS + PostCSS,非单独引入,hugo-saasify-theme主题中使用。
  • 自动化部署:GitHub Actions 实现CI/CD,自动同步到腾讯云服务器。
  • 安全管理:敏感信息(如服务器IP、SSH密钥)通过 GitHub Secrets 管理。

先来看看成品效果


项目开发历程

第一阶段:基础搭建、多语言支持(6月15日)

  • 中文版本实现:添加了完整的中文翻译文件(i18n/zh.yamldata/features/zh.yaml
  • 产品图片资源:上传了18个产品相关图片,包括功能展示图、Hero区域图片和Logo
  • 多语言配置:在 hugo.toml 中配置了中英文切换功能

第二阶段:功能完善与优化、图片设计(6月16-21日)

  • CTA按钮国际化:实现了Call-to-Action按钮的多语言支持
  • 功能特性优化:动态调整功能特性展示,提升用户体验
  • 主题定制:使用fork的主题分支,应用了多个修复和改进

第三阶段:云端手动部署、自动化发布(6月22日)

  • 手动部署:上传 public 文件夹到服务器,修改 Nginx 配置文件
  • GitHub Actions配置:创建了完整的 .github/workflows/deploy.yml 部署流程
  • 依赖安装优化:在Hugo构建前增加 npm install 步骤,解决PostCSS依赖缺失问题
  • 部署流程完善:最终实现了从代码提交到自动部署的完整CI/CD流程

总结 - 常见"坑"处理

  • baseURL 问题:AI建议在部署命令中指定 --baseURL,避免生产环境链接指向本地地址。
  • 多语言菜单跳转:AI帮助我修正菜单配置,确保中英文切换正常。
  • 404 页面跳转:AI协助自定义 404.html,并用 Hugo 变量生成正确跳转链接,提升用户体验。

References

Github action deploy.yml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
name: Deploy to Tencent Cloud

on:
  push:
    branches: [ public ]  # 当推送到主分支时触发

jobs:
  deploy:
    runs-on: ubuntu-latest
    
    steps:
    - name: Checkout code
      uses: actions/checkout@v3
      with:
        submodules: true  # 初始化submodules,包括你的主题
        fetch-depth: 0

    - name: Setup Hugo v0.135.0
      uses: peaceiris/actions-hugo@v2
      with:
        hugo-version: '0.135.0'  # 指定与你本地相同的版本
        extended: true
        
    - name: Setup Node.js
      uses: actions/setup-node@v3
      with:
        node-version: '16'
        
    - name: Install dependencies
      run: npm install
        
    - name: Build Hugo site
      run: |
        hugo --minify --baseURL https://amclock.online/
        
    - name: Deploy to server
      uses: appleboy/ssh-action@v0.1.5
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.USERNAME }}
        key: ${{ secrets.KEY }}
        port: ${{ secrets.PORT }}
        script: |
          # 备份当前版本
          if [ -d "/var/www/myconfig/amclock.online.public" ]; then
            sudo cp -r /var/www/myconfig/amclock.online.public /var/www/myconfig/amclock.online.public.backup.$(date +%Y%m%d_%H%M%S)
          fi
          
          # 清理目标目录
          sudo rm -rf /var/www/myconfig/amclock.online.public/*
          
    - name: Upload files
      uses: appleboy/scp-action@v0.1.4
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.USERNAME }}
        key: ${{ secrets.KEY }}
        port: ${{ secrets.PORT }}
        source: "public/*"
        target: "/var/www/myconfig/amclock.online.public"
        strip_components: 1
        
    - name: Set permissions and reload nginx
      uses: appleboy/ssh-action@v0.1.5
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.USERNAME }}
        key: ${{ secrets.KEY }}
        port: ${{ secrets.PORT }}
        script: |
          sudo chmod -R 755 /var/www/myconfig/amclock.online.public
          sudo systemctl reload nginx
          echo "部署完成!网站已更新到 https://amclock.online"