使用github action发布hexo博客到云服务器
搭建Hexo博客
环境
> node -v
v16.15.0
> npm -v
8.5.5
安装Hexo CLI
# 在你的博客文件夹根目录下下执行
npm install -g hexo-cli
hexo init blogname
cd blogname
hexo s
# 打开http://localhost:4000 即可浏览
安装主题hexo-theme-bamboo
hexo-theme-bamboo
我们不使用npm安装,直接将主题download到themes文件夹下
github安装
git clone https://github.com/yuang01/hexo-theme-bamboo.git
gitee安装
git clone https://gitee.com/yuang01/hexo-theme-bamboo.git
修改hexo根目录下的站点配置文件_config.yml,把主题改为hexo-theme-bamboo,通过主题文件夹下的config.yml配置主题即可,然后在\themes\hexo-theme-bamboo\删除.git文件夹
然后根据https://yuang01.github.io/或者作者博客地址来配置对应的样式或者widget
修改博客名称等信息
在_config.yml和\themes\hexo-theme-bamboo\_config.yml中将自己博客名称、网址信息等进行替换
添加github action发布
1. 在github中创建自己的博客仓库
然后在Settings/Secrets/Actions中New repository secret , 其中docker信息是在阿里云容器仓库中创建了一个个人实例(创建之后需要去/个人实例/访问凭证设置固定密码),当然,你也可以使用其他的docker仓库,不过第2步的Login to Aliyun Container Registry (ACR)需要进行修改
2. 设置Secrets
| Name | Value | 说明 | 举例 |
|---|---|---|---|
| DOCKER_USERNAME | your docker username | docker仓库登陆用户名 | spatxos |
| DOCKER_PASSWORD | your docker pwd | docker仓库固定密码 | spatxospwd |
| HOST | your server ip | 服务器IP | 101.10.11.121 |
| HOST_USERNAME | your server username | 服务器ssh登陆账户名 | spatxosdocker |
| HOST_PASSWORD | your server pwd | 服务器ssh登陆密码 | spatxosdockerpwd |
| HOST_PORT | your server ssh port | 服务器ssh端口 | 22 |
| DOCKER_REGISTRY | docker registry | docker仓库地址 | registry.cn-hongkong.aliyuncs.com |
| DOCKER_REGISTRY_REGION | docker registry region id | docker仓库区域id | cn-hongkong |
| CNBLOGS_ISDOWN | Whether to pull blogs from cnblogs | 本次执行是否从cnblogs拉取博客 | true或false |
| CNBLOGS_COOKIE | cnblogs of cookie | cnblogs的cookie | __gads=ID=bbfxxxxxxxxxx |
| BLOG_NAME | blog of name | 博客的名称,发布到docker或者服务器上创建的文件夹都将使用这个 | spatxos |
3. 在/.github/workflows/下添加一个yml文件,可以进行自定义
我写好了一个yml,是将hexo发布到阿里云的docker仓库,然后进行服务器部署,后期将会添加发布到github pages的yml
name: Build Docker Image
on:
push:
tags:
- "v*.*.*" # 后面每次更新提交,只有打上tag之后才会进行发布更新,减少actions执行次数
workflow_dispatch:
jobs:
build:
env:
CNBLOGS_ISDOWN: ${{secrets.CNBLOGS_ISDOWN}}
CNBLOGS_COOKIE: ${{secrets.CNBLOGS_COOKIE}}
runs-on: ubuntu-latest
steps:
- name: Checkout source
uses: actions/checkout@v2
with:
ref: master
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: '16.15.0'
- name: Set up Go 1.18.3
if: ${{ env.CNBLOGS_ISDOWN == 'true' }} # 是否从博客园下载,可通过更改CNBLOGS_ISDOWN的值进行提交时的下载控制
uses: actions/setup-go@v1
with:
go-version: 1.18.3
id: go
- name: Pull blogs from cnblogs
if: ${{ env.CNBLOGS_ISDOWN == 'true' }} # 是否从博客园下载,可通过更改CNBLOGS_ISDOWN的值进行提交时的下载控制
run: |
cd source/_posts/
echo $env.CNBLOGS_COOKIE |wc -L
echo ${{env.CNBLOGS_COOKIE}} |wc -L
go run downmyblogs.go -cookie ${{env.CNBLOGS_COOKIE}}
ls -la
- name: Setup Hexo
run: |
npm install hexo-cli -g
npm install hexo-generator-search --save
npm install hexo-generator-feed --save
npm i hexo-wordcount
npm install
# get image tag name
- name: Get Image Tag Name
run: |
if [ x${{ github.event.inputs.tag }} == x"" ]; then
echo "TAG_NAME=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
else
echo "TAG_NAME=${{ github.event.inputs.tag }}" >> $GITHUB_ENV
fi
- name: Login to Aliyun Container Registry (ACR)
uses: aliyun/acr-login@v1
with:
login-server: "${{ secrets.DOCKER_REGISTRY }}"
region-id: "${{ secrets.DOCKER_REGISTRY_REGION }}" # 3
username: "${{ secrets.DOCKER_USERNAME }}"
password: "${{ secrets.DOCKER_PASSWORD }}"
- name: Deploy and Build Image
run: |
hexo clean
hexo deploy
ls -la
pwd
docker build -t "${{ secrets.DOCKER_REGISTRY }}/${{secrets.BLOG_NAME}}/${{secrets.BLOG_NAME}}-blog:${{env.TAG_NAME}}" -f Dockerfile .
- name: Push Image
run: |
docker images
docker push "${{ secrets.DOCKER_REGISTRY }}/${{secrets.BLOG_NAME}}/${{secrets.BLOG_NAME}}-blog:${{env.TAG_NAME}}"
# Docker 自动部署
deploy-docker:
needs: [build]
name: Deploy Docker
runs-on: ubuntu-latest
steps:
# get image tag name
- name: Get Image Tag Name
run: |
if [ x${{ github.event.inputs.tag }} == x"" ]; then
echo "TAG_NAME=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV
else
echo "TAG_NAME=${{ github.event.inputs.tag }}" >> $GITHUB_ENV
fi
- name: Deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.HOST }} # 服务器ip
username: ${{ secrets.HOST_USERNAME }} # 服务器登录用户名
password: ${{ secrets.HOST_PASSWORD }} # 服务器登录密码
port: ${{ secrets.HOST_PORT }} # 服务器ssh端口
script: |
docker info
echo $(docker ps -aqf "name=${{secrets.BLOG_NAME}}-blog")
docker stop $(docker ps -aqf "name=${{secrets.BLOG_NAME}}-blog")
docker container rm ${{secrets.BLOG_NAME}}-blog
docker rmi ${{secrets.BLOG_NAME}}-blog
echo 查看是否成功删除${{secrets.BLOG_NAME}}-blog
docker ps -a
echo 从harbor拉取docker镜像
chmod 777 /root/${{secrets.BLOG_NAME}}-blog/html/
docker pull ${{ secrets.DOCKER_REGISTRY }}/${{secrets.BLOG_NAME}}/${{secrets.BLOG_NAME}}-blog:${{env.TAG_NAME}}
docker tag ${{ secrets.DOCKER_REGISTRY }}/${{secrets.BLOG_NAME}}/${{secrets.BLOG_NAME}}-blog:${{env.TAG_NAME}} ${{secrets.BLOG_NAME}}/${{secrets.BLOG_NAME}}-blog:${{env.TAG_NAME}}
docker run -it --rm -d -p 80:80 --name ${{secrets.BLOG_NAME}}-blog ${{secrets.BLOG_NAME}}/${{secrets.BLOG_NAME}}-blog
docker cp ${{secrets.BLOG_NAME}}-blog:/usr/share/nginx/html /root/${{secrets.BLOG_NAME}}-blog/html
docker system prune -f
echo docker容器启动成功
另一种办法,直接fork
现在我已经把仓库创建好并且上传到了github,仓库地址https://github.com/spatxos/spatxos-blog,可以直接进行fork,然后去阿里云容器仓库中创建一个个人实例,购买或者使用一个云服务器,在github仓库中填写一下Secrets表格中Secrets即可
从博客园拉取之间创建的博客到新建的hexo
在Secrets表格中设置好CNBLOGS_ISDOWN是true,然后去登陆博客园,F12,随便找一个xhr类型的请求,查找对应的cookie,然后到/source/_posts下执行一下go run convertcnblogbookie.go -cookie "替换成你的cookie"将会获得一个输出的新cookie,将新的cookie作为CNBLOGS_COOKIE的value写入进去(github action中使用secrets时,不能包含某些特殊字符,否则会被截断,所以这次执行其实是对特殊字符的替换,后面拉取博客时再替换回来)
在每次执行提交时,将会把docker里面的hexo静态页面映射到服务器的/root/${{BLOG_NAME}}-blog/html文件夹下,首次拉取博客园的文章之后,如何博客园文章未进行更新,我们可以更改一下CNBLOGS_ISDOWN为false,那么就不会从博客园拉取了,原本的文件还会存在,不会进行覆盖
遇到的问题
1.阿里云登陆和docker push 时tag错误,问题描述参见docker tag error,解决办法参见GitHub Actions持续集成阿里云容器镜像服务(ACR),我后面这么写的
docker build -t "${{ secrets.DOCKER_REGISTRY }}/${{secrets.BLOG_NAME}}/${{secrets.BLOG_NAME}}-blog:${{env.TAG_NAME}}" -f Dockerfile .
2.go传入参数和secrets截断问题
go传入参数使用conf来做,secrets截断问题通过先替换掉会截断的字符,然后使用时替换回去
博客github地址
使用github action发布hexo博客到云服务器的更多相关文章
- 如何优雅地发布Hexo博客
前言 就目前而言,我所知道的发布Hexo的博客有如下几种: 1.原始方式,也就是在服务器上编写md文件,然后利用hexo g来生成,详见:hexo从零开始到搭建完整: 2.利用github+hook来 ...
- 使用 GitHub Actions 实现 Hexo 博客自动部署
一.Hexo 相关知识点 静态博客简单,但是发布博文时稍显麻烦,一般需要下面两步: hexo clean hexo g -d // 相当于 hexo g + hexo d 如果考虑到同步源文件,还需要 ...
- 在Github上面搭建Hexo博客(一):部署到Github
什么是Hexo Hexo是一个基于Node.js的静态博客程序,可以方便的生成静态网页托管在Github和Heroku上.并且有很多人为其制作了很多优秀的主题(theme),你可以根据自己的喜好进行设 ...
- 在github上搭建hexo博客
准备工作 安装git 系统是win10家庭版,采用git v1.9.5版本,比较简单,一路next直到finsh完成安装. 安装node.js hexo是基于node.js驱动的一款快速.简单且功能强 ...
- github page 配置hexo 博客 的常见错误
缘起 最近看到好多的公众号作者推荐大家搭建自己的博客,自己手痒也搭建了一个个人博客lumang,具体过程就是一开始上网搜索一番教程,按照教程开始搭建,由于是windows的环境,同时教程也有很多的老旧 ...
- GitHub上搭建私人hexo博客操作教程
GitHub上搭建hexo博客 安装GitGit:主要用于上传博客页面到github和命令操作安装NodeNode.js:Hexo的运行环境安装HexoHexo:博客程序打开安装Git后的生成的右键菜 ...
- [Node.js] 3、搭建hexo博客
一.安装新版本的nodejs和npm 安装n模块: npm install -g n 升级node.js到最新稳定版 n stable 二.安装hexo note: 参考github,不要去其 ...
- w10环境下Hexo博客搭建
w10使用hexo+github手把手搭建自己的第一个博客 对一个程序员来说,博客的重要性不言而喻,不但可以积累知识,还可以更好的给别人分享自己的心得.今天就以时下比较流行的hexo博客搭建属于自己的 ...
- Hexo博客(Snail主题)搭建回顾概览
Hexo博客(Snail主题)搭建回顾概览 笔者搭建博客地址:https://saltyfishyjk.github.io 目录 Hexo博客(Snail主题)搭建回顾概览 Part 0 前言 写作背 ...
随机推荐
- 栈在go语言中实现,及解决388.文件的最长绝对路径的思路
今天在LeetCode刷每日一题,遇到了388. 文件的最长绝对路径的思路,这道题让我想到了系统的目录是栈结构,果然在题解中找到了栈的解法(暴力半天没出来,跑去看题解了QWQ). 所以我就捎带复习了一 ...
- Svelte3.x网页聊天实例|svelte.js仿微信PC版聊天svelte-webchat
基于Svelte3+SvelteKit+Sass仿微信Mac界面聊天实战项目SvelteWebChat. 基于svelte3+svelteKit+sass+mescroll.js+svelte-lay ...
- 1903021121—刘明伟—Java第四周作业—java分支语句学习
项目 内容 课程班级博客链接 19信计班(本) 作业要求链接 第四周作业 要求 每道题要有题目,代码(使用插入代码,不会插入代码的自己查资料解决,不要直接截图代码!!),截图(只截运行结果). 扩展阅 ...
- OAuth2.0笔记
OAuth2.0笔记 角色 一般资源服务器和授权服务器是一个 资源拥有者 客户端应用 资源服务器 授权服务器 客户端类型 OAuth 2.0规范定义了两种客户端类型: 保密的:web应用 公有的:用户 ...
- 124_Power Pivot&Power BI DAX优化计算最大连续次数
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 最大连续次数或者是最大连续子序列问题,在DAX中如何快速计算呢? 思路 1.N-1:按照INDEX错位 2.ST ...
- MySql笔记Ⅰ
MySql part 1: 数据库概念 数据库:(DataBase, 简称DB):数据库中的数据按一定的数据模型组织.描述和储存,具有较小的冗余度.较高的数据独立性和易扩展性,并可为各种 用户共享 数 ...
- 优秀开源平台,前后端分离快速开发平台,一站式多端开发(PC+APP)
JNPF平台架构介绍 JNPF快速开发平台采用前后端分离技术.采用B/S架构开发,形成一站式开发多端(APP+PC)使用. PC端版本介绍 第一个当然是当下热门的.net core了,运行环境为Vis ...
- 开源流程引擎Camunda BPM如何扩展数据库表
前言 在使用开源流程引擎(如:JBPM.Activiti.Flowable.Camunda等)的时候,经常会遇到这样的需求,我们需要按照业务需求增加一张数据库的表,而且这张表是跟工作流引擎有交互的(注 ...
- php公立转农历
<?php function nongli($riqi) { //优化修改 20160807 FXL $nian=date('Y',strtotime($riqi)); $yue=date('m ...
- Go写文件的权限 WriteFile(filename, data, 0644)?
本文来自博客园,作者:阿伟的博客,转载请注明原文链接:https://www.cnblogs.com/cenjw/p/go-ioutil-writefile-perm.html 前言 go iouit ...