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

文章目录

    • 前言
    • 基于 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-lateststeps:# 相当于 git clone 到服务器- name: Checkout 🛎️uses: actions/checkout@v4with:persist-credentials: false# 安装依赖并生成页面- name: Install and Build 🔧run: |npm install -g hexo-cli --savenpm installhexo generate# 部署- name: Deploy 🚀uses: JamesIves/github-pages-deploy-action@v4with: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.rhkb.cn/news/6276.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

双指针+前缀和习题(一步步讲解)

前言&#xff1a;如果解决下面这几道题有些问题&#xff0c;或者即使看了我画的过程图也不理解的可以去看看我的上一篇文章&#xff0c;有可能会对你有帮助。 一、《数值元素的目标和》---来自AcWing 数组元素的目标和 给定两个升序排序的有序数组 A和 B&#xff0c;以及一个…

springboot 配置redis

环境配置 springboot3.4 redis5.0.14 redis准备参考下面文章 window下安装redis以及启动 redis客户端安装 引入依赖 <!-- 集成redis依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-…

TODO: Linux 中的装机硬件测试工具

TODO: Linux 中的装机硬件测试工具 装机时需要测一些硬件参数&#xff0c;希望选择一些跨平台的开源软件。 https://linux.do/t/topic/22175 https://www.baeldung-cn.com/linux/system-testing-tools https://blog.csdn.net/weixin_45358801/article/details/142701279

LabVIEW 太阳能光伏发电系统智能监控

本文介绍了基于 LabVIEW 的太阳能光伏发电监控系统的设计与实现&#xff0c;着重探讨了其硬件配置、软件架构以及系统的实现方法。该系统能够有效提高太阳能光伏发电的监控效率和精确性&#xff0c;实现了远程监控和数据管理的智能化。 ​ 项目背景 在当前能源紧张与环境污染…

doris:Broker Load

Broker Load 通过 MySQL API 发起&#xff0c;Doris 会根据 LOAD 语句中的信息&#xff0c;主动从数据源拉取数据。Broker Load 是一个异步导入方式&#xff0c;需要通过 SHOW LOAD 语句查看导入进度和导入结果。 Broker Load 适合源数据存储在远程存储系统&#xff0c;比如对…

WPF5-x名称空间

1. x名称空间2. x名称空间内容3. x名称空间内容分类 3.1. x:Name3.2. x:Key3.3. x:Class3.4. x:TypeArguments 4. 总结 1. x名称空间 “x名称空间”的x是映射XAML名称空间时给它取的名字&#xff08;取XAML的首字母&#xff09;&#xff0c;里面的成员&#xff08;如x:Class、…

网站HTTP改成HTTPS

您不仅需要知道如何将HTTP转换为HTTPS&#xff0c;还必须在不妨碍您的网站自成立以来建立的任何搜索排名权限的情况下进行切换。 为什么应该从HTTP转换为HTTPS&#xff1f; 与非安全HTTP于不同&#xff0c;安全域使用SSL&#xff08;安全套接字层&#xff09;服务器上的加密代…

煤矿场景下拖链检测数据集VOC+YOLO格式21407张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;21407 标注数量(xml文件个数)&#xff1a;21407 标注数量(txt文件个数)&#xff1a;2140…

栈和队列(C语言)

目录 数据结构之栈 定义 实现方式 基本功能实现 1&#xff09;定义&#xff0c;初始化栈 2&#xff09;入栈 3&#xff09;出栈 4&#xff09;获得栈顶元素 5)获得栈中有效元素个数 6&#xff09;检测栈是否为空 7&#xff09;销毁栈 数据结构之队列 定义 实现方…

Flutter鸿蒙化中的Plugin

Flutter鸿蒙化中的Plugin 前言鸿蒙项目内PluginFlutter端实现鸿蒙端实现创建Plugin的插件类注册Plugin 开发纯Dart的package为现有插件项目添加ohos平台支持创建插件配置插件编写插件内容 参考资料 前言 大家知道Flutter和鸿蒙通信方式和Flutter和其他平台通信方式都是一样的&…

探索JavaScript前端开发:开启交互之门的神奇钥匙(二)

目录 引言 四、事件处理 4.1 事件类型 4.2 事件监听器 五、实战案例&#xff1a;打造简易待办事项列表 5.1 HTML 结构搭建 5.2 JavaScript 功能实现 六、进阶拓展&#xff1a;异步编程与 Ajax 6.1 异步编程概念 6.2 Ajax 原理与使用 七、前沿框架&#xff1a;Vue.js …

DeepSeek-R1:性能对标 OpenAI,开源助力 AI 生态发展

DeepSeek-R1&#xff1a;性能对标 OpenAI&#xff0c;开源助力 AI 生态发展 在人工智能领域&#xff0c;大模型的竞争一直备受关注。最近&#xff0c;DeepSeek 团队发布了 DeepSeek-R1 模型&#xff0c;并开源了模型权重&#xff0c;这一举动无疑为 AI 领域带来了新的活力。今…

假期day1

第一天&#xff1a;请使用消息队列实现2个终端之间互相聊天 singal1.c #include <stdio.h>#include <string.h>#include <unistd.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include &l…

go-zero框架基本配置和错误码封装

文章目录 加载配置信息配置 env加载.env文件配置servicecontext 查询数据生成model文件执行查询操作 错误码封装配置拦截器错误码封装 接上一篇&#xff1a;《go-zero框架快速入门》 加载配置信息 配置 env 在项目根目录下新增 .env 文件&#xff0c;可以配置当前读取哪个环…

考研机试:买房子

描述 某程序员开始工作&#xff0c;年薪 N万&#xff0c;他希望在中关村公馆买一套 60平米的房子&#xff0c;现在价格是 200 万&#xff0c;假设房子价格以每年百分之 K 增长&#xff0c;并且该程序员未来年薪不变&#xff0c;且不吃不喝&#xff0c;不用交税&#xff0c;每年…

Ansible fetch模块详解:轻松从远程主机抓取文件

在自动化运维的过程中&#xff0c;我们经常需要从远程主机下载文件到本地&#xff0c;以便进行分析或备份。Ansible的fetch模块正是为了满足这一需求而设计的&#xff0c;它可以帮助我们轻松地从远程主机获取文件&#xff0c;并将其保存到本地指定的位置。在这篇文章中&#xf…

前端开发中的模拟后端与MVVM架构实践[特殊字符][特殊字符][特殊字符]

平时&#xff0c;后端可能不能及时给接口给前端进行数据调用和读取。这时候&#xff0c;前端想到进行模拟后端接口。本文将介绍如何通过vite-plugin-mock插件模拟后端接口&#xff0c;并探讨MVVM架构在前端开发中的应用。此外&#xff0c;我们还将讨论Vue2与Vue3的区别&#xf…

JAVA毕业设计210—基于Java+Springboot+vue3的中国历史文化街区管理系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootvue3的中国历史文化街区管理系统(源代码数据库)210 一、系统介绍 本项目前后端分离(可以改为ssm版本)&#xff0c;分为用户、工作人员、管理员三种角色 1、用户…

docker的前世今生

docker来自哪里&#xff1f; 从我们运维部署的历史来看&#xff0c;宿主机从最初的物理机到虚拟机&#xff0c;再到docker&#xff0c;一步步演进到现在。技术演进其实是为了解决当前技术的痛点&#xff0c;那我们来看看有哪些痛点以及如何克服痛点的。 物理机 一般来说&…

电脑办公技巧之如何在 Word 文档中添加文字或图片水印

Microsoft Word是全球最广泛使用的文字处理软件之一&#xff0c;它为用户提供了丰富的编辑功能来美化和保护文档。其中&#xff0c;“水印”是一种特别有用的功能&#xff0c;它可以用于标识文档状态&#xff08;如“草稿”或“机密”&#xff09;、公司标志或是版权信息等。本…