前言

使用hexo博客也挺久的,最开始是本地hexo clean && hexo g,最后hexo d推送到服务器。后来是本地hexo clean && hexo g,最后将生成文件推送到GitHub,GitHub actions 推送到服务器。后来本地文件丢失,GitHub 仅仅存着编译好public文件夹内容,该丢失就丢失了。有GitHub actions何不直接把编译、部署都交给他,还能备份博客,本地也不用安装一堆环境,使用这个方法也有段时间了,记录下。为了方便建站和编写,还是本地建议安装hexo。


一、初始配置

ssh密钥配置

ps: 只有且使用一个密钥就不要看了

github配置

建立私有仓库fungit.org ,不要初始化仓库。

本地生成两份ssh密钥,一份用来本地push到GitHub,一份GitHub actions用来推送到服务器

ssh-keygen -t rsa -b 4096 -f /c/Users/Administrator/Documents/ssh/fungit_blog_github
ssh-keygen -t rsa -b 4096 -f /c/Users/Administrator/Documents/ssh/github_to_server

在GitHub私有仓库fungit.org添加 Depoly key,把刚刚生成的fungit_blog_github.pub添加进去,勾选write权限,用来推送本地文件。

添加一个Secret,把刚刚生成的github_to_server添加进去(注意是私钥)名为GITHUB_TO_SERVER_KEY,用来GitHub actions推送到服务器。

服务器配置

新建git用户并配置密码

useradd -m -s /bin/bash git
passwd git

将认证公钥加入git用户认证文件

ssh-copy-id -i /c/Users/Administrator/Documents/ssh/github_to_servera.pub git@ip -p 22222
  • -i: 指定文件
  • -p: ssh连接端口

你也可以手动在/home/git 新建.ssh/authorized_keys 文件,把github_to_servera.pub添加到authorized_keys。.ssh文件夹默认权限为700,authorized_keys文件默认权限是600。

本地配置

安装hexo最新版本,最好安装git-scm, git bash挺好用的。

本地配置多个ssh-key,需要手动配置使用指定的ssh密钥。使用git bash,新建config文件

vim ~/.ssh/config
#添加以下内容
Host fungit.blog
HostName github.com
IdentityFile C:\\Users\\Administrator\\.ssh\\fungit_blog_github
PreferredAuthentications publickey
IdentitiesOnly yes
  • Host: 区分默认的github.com,仓库链接使用fungit.blog 替换 github.com推送时就会匹配IdentityFile对应的密钥文件。

配置hexo站点

hexo init fungit.org
cd fungit.org
rm -rf .git
git init

连接私有仓库fungit.org

git remote -add origin git@fungit.blog:kroyoo/fungit.org.git
  • 注意git@github.com使用上面config配置的git@fungit.blog替换。

测试是否可以正常通信

$ ssh -T git@fungit.org
Hi fungit.org! You've successfully authenticated, but GitHub does not provide shell access.

至此,ssh密钥配置完成,当然,如果本地只有使用一个默认密钥id_rsa,不用那么麻烦,直接新建站点连接仓库就行了。


二、自动化部署

本地配置

如果你是跟我一样不喜欢本地安装依赖,只需手动把依赖添加到package.json

我的package.json文件参考:

{
....
...
"dependencies": {
"hexo": "^5.0.0",
"hexo-deployer-git": "^2.1.0",
"hexo-generator-archive": "^1.0.0",
"hexo-generator-category": "^1.0.0",
"hexo-generator-index": "^2.0.0",
"hexo-generator-tag": "^1.0.0",
"hexo-renderer-ejs": "^1.0.0",
"hexo-renderer-jade": "^0.5.0",
"hexo-renderer-marked": "^3.0.0",
"hexo-renderer-stylus": "^2.0.0",
"hexo-server": "^2.0.0",
"hexo-wordcount": "^6.0.1"
}
}

GitHub Actions配置

不多说,先看yaml文件:

name: Auto Deploy
on:
watch:
types: [started]
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-18.04
if: github.event.repository.owner.id == github.event.sender.id
steps:
- name: Checkout source
uses: actions/checkout@v2
with:
ref: main
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: '12'
- name: Setup Hexo
run: |
git config --global user.email "deploy@fungit.org"
git config --global user.name "deploy"
npm install hexo-cli -g --no-audit
npm install --no-audit - name: hexo clean and hexo g
run: |
hexo clean
hexo g - name: Deploy to Server
uses: easingthemes/ssh-deploy@v2.1.5
env:
SSH_PRIVATE_KEY: ${{ secrets.GITHUB_TO_SERVER_KEY }}
ARGS: "-rltgoDzvO --delete"
SOURCE: "public/"
REMOTE_HOST: ${{ secrets.SERVER_IP }}
REMOTE_PORT: ${{ secrets.SERVER_PORT }}
REMOTE_USER: ${{ secrets.SERVER_USER }}
TARGET: ${{ secrets.REMOTE_TARGET }} - name: Deploy gh-pages
env:
ACTION_DEPLOY_KEY: ${{ secrets.HEXO_DEPLOY_KEY }}
run: |
rm -rf ~/.ssh
mkdir -p ~/.ssh/
echo 'fungit.org' > public/CNAME
echo "$ACTION_DEPLOY_KEY" > ~/.ssh/id_rsa
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
hexo deploy

为了方便,使用了easingthemes/ssh-deploy@v2.1.5推送工具,详细可以去了解下。随便看看peaceiris/actions-gh-pages@v3还有最后我推送到gh-pages分支的写法。

  • SOURCE: 需要推送的目录,hexo生成在public。
  • SSH_PRIVATE_KEY: ssh私钥、私钥。前面配置的GITHUB_TO_SERVER_KEY。
  • TARGET: 服务器目录如/home/wwwroot/fungit.org

ps: 所需依赖最好放在package.json里面,这样Vervel部署也方便。 部署到ph-pages分支和连接vercel是为了以后服务器炸了、迁移方便切过去(懒,不想修)

Vercel:


GitHub Actions:

作者: Yeksha

連結: https://fungit.org/2021/github-acionts-automatically-compile-deploy/

來源: Fungit

著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

使用GitHub Actions自动编译部署hexo博客的更多相关文章

  1. 基于 Github Actions 自动部署 Hexo 博客

    前言 前不久使用了 Hexo 搭建独立博客,我是部署在我的腾讯云轻量应用服务器上的,每次都需要 hexo deploy 然后打包.上传.解压和刷新 CDN,非常麻烦.我的服务器配置也不高 2C2G 无 ...

  2. 使用Travis CI自动部署Hexo博客

    自从使用GitHub Pages和Hexo来发布博客之后,不得不说方便了许多,只需要几个简单的命令博客就发布了.但在不断的使用中发现每次的发布操作也挺耗时的. 我一般的操作是将平时整理好的md文件放到 ...

  3. 在腾讯云上部署Hexo博客

    推荐理由 ----搭建个人的空间博客目前深受个人开发者的追捧,然而博客的种类和平台有很多,Hexo是一个开源的静态博客生成器.相比于其他博客而言它只要是web容器就能用.除了闷头专研技术之外,程序员还 ...

  4. 在 Ubuntu 14.04 服务器上部署 Hexo 博客

    版权声明:本文由宋秉金 原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/241080001487926962 来源:腾云阁  ...

  5. 码云上部署hexo博客框架

    title: 码云上部署hexo博客框架 Hexo框架在码云上实现个人博客 本文受 https://www.jianshu.com/p/84ae2ba1c133 启发编写 本地调试 安装完Node.j ...

  6. 使用 Azure 静态 Web 应用服务免费部署 Hexo 博客

    一.前言 最近在折腾 Hexo 博客,试了一下 Azure 的静态 Web 应用服务,发现特别适合静态文档类型的网站,而且具有免费额度,支持绑定域名.本文只是以 Hexo 作为示例,其他类型的框架也是 ...

  7. [还不会搭建博客吗?]centos7系统部署hexo博客新手入门-进阶,看这一篇就够了

    @ 目录 *本文说明 请大家务必查看 前言 首先介绍一下主角:Hexo 什么是 Hexo? 环境准备 详细版 入门:搭建步骤 安装git: 安装node: 安装Hexo: 进阶:hexo基本操作 发布 ...

  8. github travis-ci持续部署hexo博客

    引言 目前我的博客源码是在coding上的,因为有很方便的持续部署,但是coding目前还不提供push文件的开放API. 因为最近做了一个一键分发平台,将博客分发到简书.CSDN等等的平台,但是我的 ...

  9. 如何用 windows+github搭建一个优美的hexo博客

    1.Hexo简单介绍 Hexo 是一个快速.简洁且高效的博客框架.Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页. 风一般的速度Hexo基于Nod ...

随机推荐

  1. CSP-S2020 浙江 游记

    2020.10.9 今天是 \(2020\) 年 \(10\) 月 \(9\) 日,距离初赛还有两天(算两天吗,完整的应该只有一天多了). 原本对于比赛还是没什么感觉的,每天做做题,水水文章,感觉时间 ...

  2. C#9.0新特性详解系列之六:增强的模式匹配

    自C#7.0以来,模式匹配就作为C#的一项重要的新特性在不断地演化,这个借鉴于其小弟F#的函数式编程的概念,使得C#的本领越来越多,C#9.0就对模式匹配这一功能做了进一步的增强. 为了更为深入和全面 ...

  3. IDM(Internet Download Manager)—下载各类安装包(github代码、python包)、软件、视频、文档的神器,居家必备良药

    自从有了IDM (Internet Download Manager),不知迅雷.github加速器.镜像为何物.鸟枪换炮,过上了,"他娘的意大利炮"的幸福生活[CoderBaby ...

  4. Happens-Before原则到底规定了什么

    Happens-Before 规则 如何理解 Happens-Before 呢?如果望文生义(很多网文也都爱按字面意思翻译成"先行发生"),那就南辕北辙了,Happens-Befo ...

  5. Linux下安装mysql-5.7.24

    Mysql数据库的安装对于开发者来说,是我们必然会面对的问题,它的安装过程其实并不复杂,并且网络上的安装教程也非常多,但是对于新手来说,各种不同形式的安装教程,又给新手们带来了要选择哪种方式进行安装的 ...

  6. tomcat中配置jndi数据库源

    tomcat添加依赖 lib目录下添加依赖mysql-connector-java-8.0.16 配置数据源 介绍两种方法:tomcat中配置或web应用中配置 tomcat/conf/context ...

  7. Linux命令-1.远程登录

    原网站:http://www.runoob.com/linux/linux-remote-login.html Linux一般作为服务器使用,而服务器一般放在机房,你不可能在机房操作你的Linux服务 ...

  8. html 07-HTML5举例:简单的视频播放器

    07-HTML5举例:简单的视频播放器 我们采用 Bootstrap 网站的图标字体,作为播放器的按钮图标. index.html的代码如下: <!DOCTYPE html> <ht ...

  9. JQuery ajax request及Java服务端乱码问题及设置

    今天花了半天功夫才搞定2个乱码问题 1. 原先一直用form提交,现在改作JQuery ajax 提交,发现乱码. 2. window.location url中含有中文提交后,乱码. 第一个问题: ...

  10. python 字符串拼接 + 与 join 的区别

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 python在进行字符串的拼接时,一般有两种方法,一种是使用+直接相加,另一种是使用join a = ...