2023-07-30  2023-08-11    1660 字  4 分钟

简单记一下hugo和主题的使用方法

安装

最简单常用的方法(官网https://gohugo.io/ 安装指引) 方法1:下载可执行文件,然后设置PATH环境变量 方法2:管理包方式安装,但我一直没安装管理包工具

go程序一般不用安装,除非主题需要用go模块

主题

方式1: 添加git子模块

git submodule add https://github.com/reponame/theme-name.git themes/theme-name

更新

git submodule update --remote

cd themes/hugo-theme-luna
git pull

方式2: 直接clone主题仓库到themes目录 更新:

cd themes/hugo-theme-luna
git pull

配置

hugo.toml是hugo的配置文件、主题配置文件一般是config.toml或config.yaml。 主题配置一般会替代hugo配置,如果要同时存在的话要在hugo上设置(还不了解), 一般用主题配置就行,如何配置详看主题说明,每个主题不一样。

语言配置

如果站点有多种语言,要把文章分开放在不同的文件夹里,可以配置默认语言和文章目录

内容

参考文档:大概了解就行

内容组织 |雨 果 (gohugo.io)

页面资源 |雨 果 (gohugo.io)

图像处理 |雨 果 (gohugo.io)

目录结构一目了然

文档索引有两种方式,一是 path/target/index.md ,二是 path/target.md

.
└── content
    └── about
    |   └── index.md  // <- https://example.com/about/
    ├── posts
    |   ├── firstpost.md   // <- https://example.com/posts/firstpost/
    |   ├── happy
    |   |   └── ness.md  // <- https://example.com/posts/happy/ness/
    |   └── secondpost.md  // <- https://example.com/posts/secondpost/
    └── quote
        ├── first.md       // <- https://example.com/quote/first/
        └── second.md      // <- https://example.com/quote/second/

hugo通过检测文档的layout方式来把文档渲染成目标html,如文章、主页、分类页、标签页、归档页、搜索页,以及主题定制的页面等。

要访问分类、标签、归档、搜索页面,需在访问路径对应的目录下创建index.md文件:(以下例子是单语言环境下的说明)

content/categories/index.md

content/tags/index.md

content/archives/index.md

content/search/index.md

content/categories.md

content/tags.md

content/archives.md

content/search.md

并在md元数据中写明layout: "categories"

---
layout: "categories"
---

腾讯云cos-cdn刷新

腾讯云COS可以便捷地创建一个cdn自动刷新的云函数,但是云函数是收费服务,只要调用一次以上,下个月就得扣12元月费,不划算,可以自己使用腾讯的sdk来做这件事。

sdk文档 https://cloud.tencent.com/document/sdk 示例 https://console.cloud.tencent.com/api/explorer?Product=cdn&Version=2018-06-06&Action=PurgePathCache

Coding自动构建hugo并上传COS刷新CDN

创建项目 -> 持续集成 -> 构建计划(自定义构建过程)

需要用到腾讯云API密钥,把它们设置为环境变量:“SECRET_ID”和“SECRET_KEY”。

构建流程文本:Jenkinsfile(复制到构建计划配置文本中,可转为图形编辑界面)

pipeline {
  agent any
  stages {
    stage('检出') {
      steps {
        checkout([
          $class: 'GitSCM',
          branches: [[name: GIT_BUILD_REF]],
          userRemoteConfigs: [[
            url: GIT_REPO_URL,
            credentialsId: CREDENTIALS_ID
          ]]])
        }
      }

      stage('Hugo构建') {
        steps {
          echo '自定义构建过程开始'
          sh '''#echo "获取hugo压缩包 ####### 不稳定,改为仓库上传"
#curl -LO https://github.com/gohugoio/hugo/releases/download/v0.116.1/hugo_extended_0.116.1_linux-amd64.tar.gz
echo "解压hugo程序 #######"
#tar -xf hugo_extended_0.116.1_linux-amd64.tar.gz
tar -xf hugo.tar.gz
echo "给予hugo执行权限"
chmod +x hugo
echo "开始构建..."
#./hugo
./hugo -v --minify --cleanDestinationDir'''
        }
      }

      stage('上传COS并刷新CDN') {
        steps {
          useCustomStepPlugin(key: 'SYSTEM:cos_upload', version: 'latest', params: [local:'public/',remote:'/',secret_id:'$SECRET_ID',secret_key:'$SECRET_KEY',region:'ap-guangzhou',bucket:'xxxxx-1258145685'])
          useCustomStepPlugin(key: 'SYSTEM:exec_py_script', version: 'latest', params: [script:"""""",script_path:'./cos-cdn-flush.py',requirements:"""tencentcloud-sdk-python-cdn""",site_packages:true])
        }
      }

    }
  }

要填好COS存储桶信息,把CDN刷新代码放在仓库目录下

刷新CDN的python代码:cos-cdn-flush.py

import os
import json
from tencentcloud.common import credential
from tencentcloud.common.profile.client_profile import ClientProfile
from tencentcloud.common.profile.http_profile import HttpProfile
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.cdn.v20180606 import cdn_client, models
try:
    # 实例化一个认证对象,入参需要传入腾讯云账户 SecretId 和 SecretKey,此处还需注意密钥对的保密
    # 代码泄露可能会导致 SecretId 和 SecretKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考,建议采用更安全的方式来使用密钥,请参见:https://cloud.tencent.com/document/product/1278/85305
    # 密钥可前往官网控制台 https://console.cloud.tencent.com/cam/capi 进行获取
    #cred = credential.Credential("SecretId", "SecretKey")
    # 从控制台(Conding控制台)设置一组凭证类变量
    cred = credential.Credential(
        os.environ.get("SECRET_ID"),
        os.environ.get("SECRET_KEY"))

    # 实例化一个http选项,可选的,没有特殊需求可以跳过
    httpProfile = HttpProfile()
    httpProfile.endpoint = "cdn.tencentcloudapi.com"

    # 实例化一个client选项,可选的,没有特殊需求可以跳过
    clientProfile = ClientProfile()
    clientProfile.httpProfile = httpProfile
    # 实例化要请求产品的client对象,clientProfile是可选的
    client = cdn_client.CdnClient(cred, "", clientProfile)

    # 实例化一个请求对象,每个接口都会对应一个request对象
    req = models.PurgePathCacheRequest()
    params = {
        "Paths": [ "https://oulh.top" ],
        "FlushType": "flush"
    }
    req.from_json_string(json.dumps(params))

    # 返回的resp是一个PurgePathCacheResponse的实例,与请求对象对应
    resp = client.PurgePathCache(req)
    # 输出json格式的字符串回包
    print(resp.to_json_string())

except TencentCloudSDKException as err:
    print(err)