Hugo博客搭建

news2024/11/18 5:59:06

Hugo 构建

Hugo 安装

  • 下载 安装包
  • hugo version 查看是否安装成功

生成站点基础框架

  • 进入自己指定文件夹下执行 hugo new site solejay-blog
  • 创建仓库
cd solejay-blog
git init

主题配置

  • 进入 Hugo 主题页面 选择主题并下载

个人喜欢的主题:meme、newsroom、galary、Alpha Church、Moments

# meme
# 下载主题
git submodule add --depth 1 https://github.com/reuixiy/hugo-theme-meme.git themes/meme
# 替换 toml 文件
rm config.toml && cp themes/meme/config-examples/en/config.toml config.toml

新建博客

hugo new posts/first-post.md

本地调试和打包构建

  • 本地调试
hugo server -D

即可在本地 http://localhost:1313/ 看到静态页面

  • 打包构建

调试没有问题运行 hugo 在当前目录下生成 public 子目录

Github 部署

1. 新建 Github Pages 仓库

仓库用来存放生成的静态页面

仓库名称:username.github.io

需要保证有一个分支,通过本地推送一个 master 分支

  1. git clone git@github.com:username/username.github.io.git

username 替换为自己的用户名

  1. touch .gitignore

  2. git add .

  3. git commit -m "first commit"

  4. git push --set-upstream origin master

2. 生成 GITHUB ACTION token

  1. 网页版,点击头像,进入 Github 个人的 Settings:

  2. 边栏最下方 Developer Settings,

  3. 选择 Personal access tokens 下的 Tokens (classic)
    点击右方 Generate a new token (classic)

  4. 输入密码后进入设置,在 Note 框中填写方便识别的名字,如 Deploy,有效期(Expiration)建议选择永不过期(No expiration),访问范围(Scopes)我们需要选中 repo 和 workflow

  5. 点击生成后 token 即出现,注意它只会出现这唯一的一次,将其复制保存下来

3. 新建博客仓库

仓库用来写博文,执行 Github Actions 自动构建静态页面推送到上面的 Github Pages 仓库中

  1. git clone git@github.com:username/blog.git

  2. vim .gitignore

忽略那些无关的文件,和生成的静态文件

.DS_Store
/public
.hugo_build.lock
resources/_gen/assets/scss
  1. git add . & git commit -m "first commit"

  2. git push --set-upstream origin master

  3. 进入仓库的 Settings

  4. 选择 Secrets and variables 下的 Actions,在右侧选择 New repository secret

  5. 在 Name 中填入 PERSONAL_TOKEN

  6. 在 Secret 中填入刚才生成的 token

  7. 点击 Add secret 保存

4. 配置 Github Actions

  1. 进入仓库的 Actions,若之前有使用过,点击左侧 New workflow;若无,默认会给出许多推荐,我们任选一个开始 configure 即可:

  2. 重命名 .yml 为方便识别的名字,如 deploy.yml

修改编辑框内容如下:

name: deploy 
# 这个 action 的名字

on:
    push: 
    # 代表每次 push 都会 turn on action
    workflow_dispatch: 
    # 代表我们也可以手动 turn on

jobs:
    build:
        runs-on: ubuntu-latest
        steps:
            - name: checkout
              uses: actions/checkout@v2
              with:
                  submodules: true
                  fetch-depth: 0

            - name: setup
              uses: peaceiris/actions-hugo@v2.6.0
              with:
                  hugo-version: "latest"
                  extended: true 
                  # 按需选择是否使用 hugo-extended

            - name: build
              run: hugo -D

            - name: deploy
              uses: peaceiris/actions-gh-pages@v3
              with:
                  # 生成的 token 就用在这里,因为下面用到 external repository
                  PERSONAL_TOKEN: ${{ secrets.PERSONAL_TOKEN }} 
                  # 替换为新建 Github Pages 仓库中的仓库名称
                  EXTERNAL_REPOSITORY: username/username.github.io
                   # 以及对应的分支 master
                  PUBLISH_BRANCH: master 
                  # 指定将自动部署得到的 public 文件夹 push 上去
                  PUBLISH_DIR: ./public 
                  # 提交信息
                  commit_message: ${{ github.event.head_commit.message }}
  1. 点击左上角 Save new workflow,保存配置文件并提交,自动触发构建

  2. 构建成功即可访问对应仓库的 Github Pages 地址 https://purenjie.github.io/

5. 后续更新

后续只需要在 blog 仓库中更新博文,然后 push 即可触发 Github Actions 自动构建并推送到 Github Pages 仓库中

Gitee 部署

Gitee 已经无法使用 Pages,不建议使用

  • 新建仓库

添加一个空白 repository,注意不要添加如 README.gitignore 等文档。仓库名最好与个人空间地址一致

推送项目到 master 分支

  • 进入 Gitee 创建的仓库页面,从 服务 栏里选择 Gitee Pages,部署分支选择 master,然后点击 启动

服务器部署

  1. 保证 80 端口和 443 端口没有被禁用(可查看防火墙策略)

  2. 安装并启动 nginx

# 安装
sudo yum install -y nginx

# 设置开机启动
sudo systemctl enable nginx

# 启动
sudo systemctl start nginx

# 浏览器访问公网 IP 查看是否安装成功
  1. 将 public 目录传输到服务器
# 创建同步目录
mkdir /home/solejay/blog

# 使用 rsync 方式同步
cd BLOG_FOLDER # 本地
rsync -avuz --progress --delete public/ root@ip 地址:/home/solejay/blog
  1. 申请 ssl 证书
  • 申请免费证书
  • 下载 nginx 证书
  • 将证书上传到服务器
rsync -avuz --progress Nginx/ root@ip 地址:/etc/nginx/
  • 配置 nginx.conf
# For more information on configuration, see:
#   * Official English Documentation: http://nginx.org/en/docs/
#   * Official Russian Documentation: http://nginx.org/ru/docs/

user root;
#user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
    worker_connections 1024;
}

http {
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile            on;
    tcp_nopush          on;
    tcp_nodelay         on;
    keepalive_timeout   65;
    types_hash_max_size 2048;

    include             /etc/nginx/mime.types;
    default_type        application/octet-stream;

    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;

    server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;
        #root         /usr/share/nginx/html;
        root         /home/solejay/blog;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
            root /home/solejay/blog;
            index index.html index.htm;
        }

        error_page 404 /404.html;
            location = /40x.html {
                root /home/solejay/blog;
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }


    # 配置 https
     server {
         listen 443 ssl;
         # 要配置的第七个地方
         server_name _;
         root /home/solejay/blog;
         
         # 要配置的第八个地方
         ssl_certificate /etc/nginx/solejay.cn_nginx/solejay.cn_bundle.crt;
         ssl_certificate_key /etc/nginx/solejay.cn_nginx/solejay.cn.key;
         
         # 要配置的第九个地方,可以按照我的写法
         ssl_session_timeout 10m;
         ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
         ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
         ssl_prefer_server_ciphers on;
         
         # 要配置的第十个地方
         error_page 404 /404.html;
         location = /404.html {
              root /home/solejay/blog;
         }

         include /etc/nginx/default.d/*.conf;
     }
}
  • 重新加载配置文件并重启
# 重新加载配置文件
sudo nginx -s reload

# 重启 nginx
sudo systemctl restart nginx
  • https 访问域名成功

请求成功

** 参考资料 **

Hugo+Gitee 搭建个人博客

如何使用 Hugo 在 GitHub Pages 上搭建免费个人网站

hugo 博客部署到腾讯云轻量级服务器

使用 Github Actions 自动部署 Hugo

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2066254.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mac安装java17(jdk17)

1. 下载jdk17 官网下载:https://www.oracle.com/java/technologies/downloads 2. 直接安装 安装完后目录会存放在下面目录下 /Library/Java/JavaVirtualMachines 111111deMBP JavaVirtualMachines % ls jdk-11.0.227 jdk-17.jdk 3. 如果你已经安装过java&#…

【MobaXterm】查找输出结果的关键字

要求: 在MobaXterm终端的输出结果 查找关键字 解决: 菜单栏终端->在终端中查找 Terminal -> Find in terminal

智慧水务项目(七)vscode 远程连接ubuntu 20.04 服务器,调试pyscada,踩坑多多

一、说明 以前用过pycharm,远程连接还可以,但是vscode用以前还可以,就用它开发python了,想搞个远程,源码直接放服务器上,能远程调试,其实也很方便的,结果第一次还成功了,…

【机器翻译方向】数据集合集!

本文将为您介绍经典、热门的数据集,希望对您在选择适合的数据集时有所帮助。 1 QUAK 发布方: Upstage高丽大学 发布时间: 2022 韩英合成机器翻译质量预测数据 (韩英神经机器翻译的一个合成质量估计数据集,QUAK) 是指韩语句子和…

erlang学习:erlang学习:书上案例22.6练习题3

初步实现了书上案例第二,三问的要求,对输出结果有部分偏差,没有实现对已完成任务状态的记录,因此已完成任务输出无论如何都是0,明天会在record中加一个字段进行已完成任务状态的记录 (2) 添加一个名为job_centre:stati…

业绩回暖的小鹏,何时能够迈过月销2万的“及格线”?

古罗马哲学家塞涅卡在他的《论天命》中曾写下这么一句话:“英勇的士兵能够从战斗的胜利中获得喜悦,而伟大的人能够从逆境中得到欢乐。” 对于企业来说,身处逆境不一定能得到欢乐,但是走出逆境一定振奋人心。 8月20日&#xff0c…

【原创教程】电气电工10:接压线端子

电气电工这些知识点,我们描述的比较细,虽然看起来比较简单,但是它是后面我们技能提升的基础,如果我们后面学电气工程师相关知识,这些都属于基本功。 接着我们来看一下接线端子 一、接线端子 接线端子的介绍: 接线端子是一种用于连接电线的设备,它能够将电线的导体与…

vue3 bug记录

项目场景: vue2.7 使用vue的ref,报错 Avoid adding reactive properties to a Vue instance or its root $data at runtime - declare it upfront in the data option. 原因分析: 表单组件使用了同名的ref,需要删掉

基于Modbus的MFC智能控制

1. 系统概述 利用LabVIEW通过Modbus 485协议实现对七星(Sevenstar)品牌质量流量控制器(MFC)的智能化控制。该系统将自动控制多个MFC的流速,实时监控其状态,并根据需要进行调整。 2. 硬件配置 MFCs: 七星品…

qt+ffmpeg报错non-existing PPS 0 referenced,如何解决???

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收…

LeetCode61.旋转链表

本题有两种做法:迭代和递归 本题的本质是:将链表中后k个结点变为前k个,然后将头结点连接到尾节点 迭代 考察知识: 边界条件判断链表倒k结点寻找Get思想:结环 /*** Definition for singly-linked list.* public cla…

基于51单片机的自动窗帘控制proteus仿真

地址:https://pan.baidu.com/s/1l7MGgoPD5Q58ANR1djYWow 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectron…

【vue3+Typescript】手撸了一个轻量uniapp导航条

最近公共组件写到导航条,本来打算拿已有的改。看了下uniapp市场上已有的组件,一是不支持vue3typescript,二是包装过重。索性自己手撸了一个导航条,不到100行代码全部搞定,因为自己的需求很简单: 1&#xf…

深度学习----------------------残差网络ResNet

目录 ResNet加更多的层总是改进精度吗?残差块ResNet块细节不同的残差块ResNet块ResNet架构总结 ResNet代码实现残差块输入和输出形状一致增加输出通道数的同时,减半输出的高和宽ResNet模型观察ResNet中不同模块的输入形状是如何变化的训练模型 问题ResNe…

JRE和JDK概念区分

1.JRE Java Runtime Environment:java运行环境。JVMJava类库。开发好的java程序,直接运行,可只安装JRE。 2.JDK Java Development Kit:java软件开发工具包。JREJava开发工具。编译、运行java代码。 3.总结 JRE就是运行Java字…

制作网页底部以及<footer>置底

目录 前言 页脚置底 页脚置底的几种方法 使用calc()设置内容高度 使用flex布局 将内容部分的margin-bottom改为负值【不推荐】 一个网页底部Demo HTML部分: CSS部分: 效果: 其他说明 margin负值特性 下面以一个具体的例子来说明…

Edge-TTS:微软推出的,免费、开源、支持多种中文语音语色的AI工具[Python代码]

Edge-TTS,由微软推出的这款免费、开源的AI工具,为用户带来了丰富多样的中文语音体验。它不仅支持多种中文语音语色,还能实现流畅自然的语音合成。Edge-TTS凭借其高度可定制化的特点,广泛应用于智能助手、语音播报、教育培训等领域…

加速自动驾驶模型迭代,数据存算一体是关键

自动驾驶的每一个业务阶段都会涉及到 AI 深度学习算法和算力的参与,机器视觉,深度学习,传感器技术等均在自动驾驶领域发挥着重要的作用。自动驾驶系统不断迭代的前提是算法的持续优化,目前,自动驾驶发展的瓶颈主要在于…

【笔记】0基础python学爬虫(未完)

(一)用requests发送get请求 安装好pycharm(跳过) 在本地控制台输入pip install requests 安装requests模块 with防止资源浪费 不论f文件有没有执行成功最后都会关闭 请求获取url resp requests.get(url) resp.text获取源代码…

Redis的持久化、主从架构、哨兵高可用架构

目录 1.Redis持久化 1.1 RDB快照 1.2AOF 1.3混合持久化 2.Redis主从架构 2.1主从工作原理 2.1.1全量复制 2.1.2增量复制 3.Redis哨兵高可用架构 3.1哨兵架构模型 3.2哨兵模式的作用 3.3故障转移机制 3.4主节点选举机制 4.Redis管道-pipeline 1.Redis持久化 有两种…