【前端】Hexo 部署指南_hexo-deploy-git·GitHub Actions·Git Hooks

news2025/1/24 6:43:06

文章目录

    • 前言
    • 基于 hexo-deploy-git
    • 基于 GitHub Actions
    • 基于 Git Hooks
      • 云平台端
      • 服务器端
        • Git Hooks
        • SSH
        • Nginx
      • 本地机端
      • 原理
      • 参考

前言

原文地址:https://blog.dwj601.cn/FrontEnd/Hexo/hexo-deployment/

部署 Hexo
基于 GitHub Pages
基于自己的云服务器
基于 hexo-deploy-git
基于 GitHub Actions
基于 Git Hooks

基于 hexo-deploy-git

该方法在「Hexo 建站指南」中已详细介绍,不再赘述,见:https://blog.dwj601.cn/FrontEnd/Hexo/build-your-own-website-with-hexo/#部署云端。

基于 GitHub Actions

该方法可以利用 GitHub Actions 的 CI/CD 功能,省去「本地构建」与「手动部署」的操作,让 GitHub 平台帮助我们完成这两步操作,从而让我们只需要像维护项目代码一样专注于内容创作与版本管理,而无需关心其他任何事情。下面以「源码和站点同属一个仓库」的情景为例介绍具体地操作与工作流配置。

1)创建一个空 GitHub 仓库、创建一个鉴权 token(该 token 可以让 GitHub Actions 以你的身份操作你的仓库)、赋予 GitHub Actions 读写权限

创建一个鉴权 token:头像 >> Settings >> Developer settings >> Personal access tokens >> Tokens (classic)

创建一个鉴权 token:头像 >> Settings >> Developer settings >> Personal access tokens >> Tokens (classic)

赋予 GitHub Actions 读写权限:Settings >> Actions >> General >> Workflow permissions

赋予 GitHub Actions 读写权限:Settings >> Actions >> General >> Workflow permissions

2)初始化一个博客项目

hexo init

3)编辑 _config.yml 文件中的 url 字段

url: https://explorer-dong.github.io/demo-github-actions

4)创建工作流文件 .github/workflows/bot.yml 并编辑如下内容

name: Build and Deploy
on: [push]
jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    steps:
      # 相当于 git clone 到服务器
      - name: Checkout 🛎️
        uses: actions/checkout@v4
        with:
          persist-credentials: false

      # 安装依赖并生成页面
      - name: Install and Build 🔧
        run: |
          npm install -g hexo-cli --save
          npm install
          hexo generate

      # 部署
      - name: Deploy 🚀
        uses: JamesIves/github-pages-deploy-action@v4
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          branch: gh-pages   # 存储站点的分支
          folder: public     # 构建出来的待部署的站点文件夹名称

5)初始化 Git 版本管理并连接到远程仓库

# 初始化
git init
git add .
git commit -m 'init'

# 连接远程仓库
git remote add origin https://github.com/Explorer-Dong/demo-github-actions.git

# 首次推送
git push -u origin main

6)在 GitHub Pages 上配置站点托管分支 Settings >> Pages >> Build and deployment

在 GitHub Pages 上配置站点托管分支:Settings >> Pages >> Build and deployment

GitHub Pages 按照上述工作流的指令,检测到 push 后开始执行,即 checkout、generate 和 deploy。等待所有流程结束后,重新加载 https://<username>.github.io/<project>/ 就可以发现站点已经托管成功了!

基于 Git Hooks

由于 Github Pages 服务使用的服务器在美丽国,不用魔法访问速度过慢,国内平替 Gitee Pages 已经停止服务了。故综合考虑还是部署到国内服务器上。当然这前提是你应已拥有一台国内备案的 云服务器 和一个 域名。如果觉得备案太麻烦,可以考虑入手一台 香港云服务器。下面将基于 Git Hooks 工具,介绍如何将自己的 Hexo 静态博客项目部署到阿里云服务器上并持续集成、持续部署。

云平台端

1)域名解析。我们需要将自己的域名指向自己的服务器 IP,下图中记录值即你的云服务器 IP 地址

域名解析

服务器端

使用终端连接工具连接到服务器后开始下面的操作。常用连接工具比如 MobaXterm。

Git Hooks

1)新建服务器用户。由于 root 用户的权限过大不够安全,因此我们创建一个新用户并赋予持续集成的权限

# 创建新用户。名称任取,假设就叫 git
useradd git

# 修改新用户密码。后续采用 SSH 免密通信,因此这个密码无所谓
passwd git

# 编辑 /etc/sudoers 文件,在 root ALL=(ALL:ALL) ALL 后追加一句
git ALL=(ALL:ALL) ALL

2)创建 Git Hooks。与 Github Pages 自动部署的工作流逻辑类似,我们将静态文件推送到云服务器后,需要让云服务器帮我们持续部署。我们可以借助 Git Hooks 的功能来实现

# 创建一个 git 裸仓库
mkdir /home/repo/blog.git
cd /home/repo/blog.git
git init --bare

# 创建 hooks 文件用来监视仓库状态
cd hooks
touch post-receive

# 编辑 hooks 文件,在 post-receive 文件中输入以下内容
# --work-tree 表示站点路径
# --git-dir   表示仓库路径
git --work-tree=/home/www/blog --git-dir=/home/repo/blog.git checkout -f

# 为 hooks 文件授予可执行权限
chmod +x /home/repo/blog.git/hooks/post-receive

# 将仓库目录的所有权移交给 git 用户
chown -R git:git /home/repo

# 将站点目录的所有权移交给 git 用户
chown -R git:git /home/www/blog
SSH

为了绝对的自动化 CD,就需要避免所有的人为干预,例如要避免本地机与云主机通信时手动输入密码的操作,可以借助 SSH 来规避这个问题。

1)本地生成密钥(公钥 + 私钥),连按三次回车即可生成默认配置的密钥(如果本地已经有密钥对了,这一步可以跳过)

ssh-keygen

使用 Git Bash 生成密钥

2)在 /home/git 目录下右键新建名为 .ssh 的文件夹,并在该文件夹内新建名为 authorized_keys 的文本文件,将之前生成的公钥文件中的所有内容复制进去,保存。

3)修改文件/文件夹的权限与属主

chmod 600 /home/git/.ssh/authorized_keys
chmod 700 /home/git/.ssh
chown -R git:git /home/git/.ssh

现在我们可以在本地测试 ssh 连接

ssh git@xxx.xxx.xxx.xxx  # 填你的服务器 ip 地址

首次连接需要输入一个 yes 用来在本地存储主机信息。如果不需要输入密码就进入了命令行界面,表示 ssh 通信建立成功!

ssh 连接成功

Nginx

Nginx 实现了主机虚拟化的功能,即一台主机可以通过 Nginx 的分发功能对外提供多种服务。编辑 nginx.conf 文件(以我的配置为例)

server {
    listen 443 ssl;
    server_name blog.dwj601.cn;  # 修改为你自己的域名

    ssl_certificate      /etc/nginx/ssl/blog.dwj601.cn.pem;  # 修改为你自己的 ssl 证书路径
    ssl_certificate_key  /etc/nginx/ssl/blog.dwj601.cn.key;  # 修改为你自己的 ssl 证书路径

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    location / {
        root /home/www/blog;  # 修改为你自己的站点路径
    }
}

本地机端

我们在本地的 Hexo 项目中,编辑 _config.yml 文件。

url 字段修改为自己的域名:

url: https://blog.dwj601.cn

deploy 字段配置如下:

编辑 _config.yml 文件中的 deploy 字段

最后我们在本地只需要执行 hexo clean && hexo generate && hexo deploy 即可实现一步部署到自己的服务器!

部署后可以进入服务器的 --work-tree 目录,检查站点是否被 checkout 过来。下图表示 checkout 成功:

checkout 成功

原理

Hexo 持续部署的原理。如下图所示(我自己画的,如有不对请及时矫正)

Hexo 持续部署的原理图

Git Hooks 的定义与工作原理。可以将其类比 github workflows,可以在我们做出某些行为的前后自动执行一些我们预设定的任务。此处使用到的就是 post-receive 任务,原文 是这样解释的:

This hook is invoked by [git-receive-pack1] when it reacts to git push and updates reference(s) in its repository. It executes on the remote repository once after all the refs have been updated.

即当其接收到 push 任务并且存储库的索引被更新后,该钩子就会执行其中的内容。我们利用该功能,在将我们的站点 hexo deploy 到服务器后,hooks 检测到 git 索引更新了,就执行 checkout 命令推送上来的站点 checkout 到指定的站点托管目录下,从而实现了持续集成的功能。

SSH 的定义与工作原理。可以简单的将其理解为一种用来连接本地客户端与远程服务器的通信隧道。下面是 较为官方 的解释:

SSH(Secure Shell,安全外壳)是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。传统远程登录和文件传输方式,例如 Telnet、FTP,使用明文传输数据,存在很多的安全隐患。随着人们对网络安全的重视,这些方式已经慢慢不被接受。SSH 协议通过对网络数据进行加密和验证,在不安全的网络环境中提供了安全的网络服务。作为 Telnet 和其他不安全远程 shell 协议的安全替代方案,目前 SSH 协议已经被全世界广泛使用,大多数设备都支持 SSH 功能。

用一张图来更加清晰直观的理解:

SSH 工作原理图

参考

基于 Hexo 的静态博客网站搭建并部署至云服务器

Linux chmod 命令

Linux chown 命令

Git Hooks

githooks - Hooks used by Git

什么是 SSH?

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

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

相关文章

法律与认知战争:新时代的战略博弈

文章目录 前言全文摘要与关键词一、影响意志二、通过网络空间进行认知战1、网络行动的影响>行为本身2、与破坏性网络攻击相反,数字影响力行动可以产生战略效果三、法律作为一种战争工具四、如何反制法律战的使用?1、自由民主国家需要认识到俄罗斯等国的认知战在意图和深度上…

【Linux】其他备选高级IO模型

其他高级 I/O 模型 以上基本介绍的都是同步IO相关知识点&#xff0c;即在同步I/O模型中&#xff0c;程序发起I/O操作后会等待I/O操作完成&#xff0c;即程序会被阻塞&#xff0c;直到I/O完成。整个I/O过程在同一个线程中进行&#xff0c;程序在等待期间不能执行其他任务。下面…

Arduino D1 通过 Wi-Fi 控制 LED

Arduino D1 通过 Wi-Fi 控制 LED 硬件连接 将 LED 的正极&#xff08;长脚&#xff09;连接到 Arduino D1 的 D1 引脚。将 LED 的负极&#xff08;短脚&#xff09;通过一个电阻&#xff08;例如 220 欧姆&#xff09;连接到 Arduino D1 的 GND 引脚。 安装必要的库 在 Ard…

Flutter:自定义Tab切换,订单列表页tab,tab吸顶

1、自定义tab切换 view <Widget>[// 好评<Widget>[TDImage(assetUrl: assets/img/order4.png,width: 36.w,height: 36.w,),SizedBox(width: 10.w,),TextWidget.body(好评,size: 24.sp,color: controller.tabIndex 0 ? AppTheme.colorfff : AppTheme.color999,),]…

Tailscale 配置 subnet 实现访问 Openwrt 路由器下的子网

Openwrt 安装 Tailscale 参考 OpenWrt 配置 Tailscale 内网穿透。 tailscale两台openwrt(双lan)网对网(site to site)互通OpenWrt安装配置Tailscale 在 OpenWrt 上使用 Tailscale 使用 tailscale subnet 在openwrt terminal 执行 tailscale up --advertise-routes192.168.…

低代码可视化-转盘小游戏可视化-代码生成器

转盘小程序是一种互动工具&#xff0c;它通过模拟真实的转盘抽奖或决策体验&#xff0c;为用户提供了一种有趣且公平的选择方式。以下是对转盘小程序的详细介绍&#xff1a; 转盘小程序的应用场景 日常决策&#xff1a;转盘小程序可以帮助用户解决日常生活中的选择困难问题&a…

【Uniapp-Vue3】uni-icons的安装和使用

一、uni-icon的安装 进入到如下页面中&#xff0c;点击“点击下载&安装”。 uni-icons 图标 | uni-app官网 点击“下载插件并导入HBuilder”&#xff0c;如果没有登录就登陆一下 网页中会打开Hbuilder&#xff0c;进入Hbuilder以后&#xff0c;选择需要使用该插件的项目进…

【橘子ES】Kibana的分析能力Analytics简易分析

一、kibana是啥&#xff0c;能干嘛 我们经常会用es来实现一些关于检索&#xff0c;关于分析的业务。但是es本身并没有UI,我们只能通过调用api来完成一些能力。而kibana就是他的一个外置UI&#xff0c;你完全可以这么理解。 当我们进入kibana的主页的时候你可以看到这样的布局。…

一、引论,《组合数学(第4版)》卢开澄 卢华明

零、前言 发现自己数数题做的很烂&#xff0c;重新学一遍组合数学吧。 参考卢开澄 卢华明 编著的《组合数学(第4版)》&#xff0c;只打算学前四章。 通过几个经典问题来了解组合数学所研究的内容。 一、幻方问题 据说大禹治水之前&#xff0c;河里冒出来一只乌龟&#xff0c…

LabVIEW太阳能照明监控系统

在公共照明领域&#xff0c;传统的电力照明系统存在高能耗和维护不便等问题。利用LabVIEW开发太阳能照明监控系统&#xff0c;通过智能控制和实时监测&#xff0c;提高能源利用效率&#xff0c;降低维护成本&#xff0c;实现照明系统的可持续发展。 ​ 项目背景 随着能源危机…

5. 马科维茨资产组合模型+政策意图AI金融智能体(Qwen-Max)增强方案(理论+Python实战)

目录 0. 承前1. AI金融智能体1.1 What is AI金融智能体1.2 Why is AI金融智能体1.3 How to AI金融智能体 2. 数据要素&计算流程2.1 参数集设置2.2 数据获取&预处理2.3 收益率计算2.4 因子构建与预期收益率计算2.5 协方差矩阵计算2.6 投资组合优化2.7 持仓筛选2.8 AI金融…

【华为路由的arp配置】

华为路由的arp配置 ARP&#xff1a;IP地址与MAC地址的映射。 R1: g0/0/0:10.1.1.254/24 g0/0/1:10.1.2.254/24 PC1: 10.1.1.1/16 PC2: 10.1.1.2/16 PC3: 10.1.2.3/16 动态ARP 查看PC1的arp表&#xff0c;可以看到&#xff0c;列表为空。 查看R1的arp表 在PC3上ping命令测…

U3D的.Net学习

Mono&#xff1a;这是 Unity 最初采用的方式&#xff0c;它将 C# 代码编译为中间语言 (IL)&#xff0c;然后在目标平台上使用虚拟机 (VM) 将其转换为本地机器码执行。 IL2CPP&#xff1a;这是一种较新的方法&#xff0c;它会将 C# 代码先编译为 C 代码&#xff0c;再由 C 编译器…

机器学习-线性回归(简单回归、多元回归)

这一篇文章&#xff0c;我们主要来理解一下&#xff0c;什么是线性回归中的简单回归和多元回归&#xff0c;顺便掌握一下特征向量的概念。 一、简单回归 简单回归是线性回归的一种最基本形式&#xff0c;它用于研究**一个自变量&#xff08;输入&#xff09;与一个因变量&…

智能体的核心技能之插件,插件详解和实例 ,扣子免费系列教程(11)

欢迎来到滔滔讲AI&#xff0c;今天我们来学习智能体的核心功能点之一的插件。 插件是通过API连接集成各种平台和服务&#xff0c;它扩展了智能体的能力。平台内置了丰富的插件&#xff0c;我们可以直接调用。 一、什么是插件 首先&#xff0c;插件其实就像一个工具箱。 每个插…

Spring Security(maven项目) 3.0.2.6版本—总

通过实践而发现真理&#xff0c;又通过实践而证实真理和发展真理。从感性认识而能动地发展到理性认识&#xff0c;又从理性认识而能动地指导革命实践&#xff0c;改造主观世界和客观世界。实践、认识、再实践、再认识&#xff0c;这种形式&#xff0c;循环往复以至无穷&#xf…

超强推理大模型 QVQ-32B-preview 一键部署

QwQ-32B-Preview 是 Qwen 团队于 2024 年开发的实验研究模型&#xff0c;专注于提高 AI 推理能力。这个模型在多个基准测试中展现了卓越的性能&#xff0c;特别是在 GPQA、AIME、MATH-500 和 LiveCodeBench 等测试中&#xff0c;准确率分别达到了 65.2%、50.0%、90.6% 和 50.0%…

数据结构(Java)——二叉树

1.概念 二叉树是一种树形数据结构&#xff0c;其中每个节点最多有两个子节点&#xff0c;通常被称为左子节点和右子节点。二叉树可以是空的&#xff08;即没有节点&#xff09;&#xff0c;或者由一个根节点以及零个或多个左子树和右子树组成&#xff0c;其中左子树和右子树也分…

谷粒商城——商品服务-三级分类

1.商品服务-三级分类 1.1三级分类介绍 1.2查询三级分类查询-递归树型结构数据获取 1.2.1导入数据pms_catelog.sql到数据表pms_category 1.2.2一次性查出所有分类及子分类 1.2.2.1修改CategoryController.java /*** 查出所有分类以及子分类&#xff0c;以树形结构组装起来*/R…

AviatorScript用法

AviatorScript的介绍&#xff0c;网上有很多&#xff0c;这里就不啰嗦了。这里介绍下传参的用法 应用场景&#xff1a;如果不想频繁的打包升级&#xff0c;而是想只更新某些规则脚本重启服务就可以升级的话&#xff0c;AviatorScript无疑是最佳选择。比如说&#xff0c;今天制…