搭建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/ActionsNew 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_ISDOWNtrue,然后去登陆博客园,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_ISDOWNfalse,那么就不会从博客园拉取了,原本的文件还会存在,不会进行覆盖

遇到的问题

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博客到云服务器的更多相关文章

  1. 如何优雅地发布Hexo博客

    前言 就目前而言,我所知道的发布Hexo的博客有如下几种: 1.原始方式,也就是在服务器上编写md文件,然后利用hexo g来生成,详见:hexo从零开始到搭建完整: 2.利用github+hook来 ...

  2. 使用 GitHub Actions 实现 Hexo 博客自动部署

    一.Hexo 相关知识点 静态博客简单,但是发布博文时稍显麻烦,一般需要下面两步: hexo clean hexo g -d // 相当于 hexo g + hexo d 如果考虑到同步源文件,还需要 ...

  3. 在Github上面搭建Hexo博客(一):部署到Github

    什么是Hexo Hexo是一个基于Node.js的静态博客程序,可以方便的生成静态网页托管在Github和Heroku上.并且有很多人为其制作了很多优秀的主题(theme),你可以根据自己的喜好进行设 ...

  4. 在github上搭建hexo博客

    准备工作 安装git 系统是win10家庭版,采用git v1.9.5版本,比较简单,一路next直到finsh完成安装. 安装node.js hexo是基于node.js驱动的一款快速.简单且功能强 ...

  5. github page 配置hexo 博客 的常见错误

    缘起 最近看到好多的公众号作者推荐大家搭建自己的博客,自己手痒也搭建了一个个人博客lumang,具体过程就是一开始上网搜索一番教程,按照教程开始搭建,由于是windows的环境,同时教程也有很多的老旧 ...

  6. GitHub上搭建私人hexo博客操作教程

    GitHub上搭建hexo博客 安装GitGit:主要用于上传博客页面到github和命令操作安装NodeNode.js:Hexo的运行环境安装HexoHexo:博客程序打开安装Git后的生成的右键菜 ...

  7. [Node.js] 3、搭建hexo博客

      一.安装新版本的nodejs和npm 安装n模块: npm install -g n 升级node.js到最新稳定版 n stable   二.安装hexo note: 参考github,不要去其 ...

  8. w10环境下Hexo博客搭建

    w10使用hexo+github手把手搭建自己的第一个博客 对一个程序员来说,博客的重要性不言而喻,不但可以积累知识,还可以更好的给别人分享自己的心得.今天就以时下比较流行的hexo博客搭建属于自己的 ...

  9. Hexo博客(Snail主题)搭建回顾概览

    Hexo博客(Snail主题)搭建回顾概览 笔者搭建博客地址:https://saltyfishyjk.github.io 目录 Hexo博客(Snail主题)搭建回顾概览 Part 0 前言 写作背 ...

随机推荐

  1. Spring Authorization Server 实现授权中心

    Spring Authorization Server 实现授权中心 源码地址 当前,Spring Security 对 OAuth 2.0 框架提供了全面的支持.Spring Authorizati ...

  2. 对象、Map、Set、WeakMap、WeakSet

    对象.Map.Set.WeakMap.WeakSet 本文写于 2020 年 11 月 24 日 总的来说,Set 和 Map 主要的应用场景分别在于数据重组和数据储存.Set 是一种叫做「集合」的数 ...

  3. 斯坦福NLP课程 | 第12讲 - NLP子词模型

    作者:韩信子@ShowMeAI,路遥@ShowMeAI,奇异果@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/36 本文地址:http://www. ...

  4. Java高并发-概念

    一.为什么需要并行 业务要求 http处理多个客户端请求 java虚拟机启动多个线程 进程开销比线程大的多 性能 多线程在多核系统比单线程要好的多 摩尔定律失效 二.几个重要概念 2.1 同步和异步 ...

  5. EasyExcel-合并单元格

    pom版本 <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</ ...

  6. 12.web基础与HTTP协议

    web基础与HTTP协议 目录 web基础与HTTP协议 web基础 域名概述 HTML概述 HTML基本标签 HTML语法规则 HTML文件结构 头标签中常用标签 内容标签中常用标签 静态网页与动态 ...

  7. 6000字Locust入门详解

    目录 一.Locust 性能测试 (一). 性能测试工具 主流性能测试工具对比 认识Locust (二) locust 基本用法 1.安装locust 2.编写用例 3. 启动测试 GUI 模式启动 ...

  8. BUUCTF-[BJDCTF2020]认真你就输了

    [BJDCTF2020]认真你就输了 下载通过16进制查看发现是压缩包,直接就binwalk分离查看. 分离直接得到几个文件,不过好像压缩包里的和外面的文件是一样的,所以直接翻一下目录 直接就找到了 ...

  9. Javaweb-在idea中配置Tomcat

    解决警告问题 为什么会有这个问题:我们访问一个网站,需要制定一个文件夹名字 最后点OK,Tomcat就亮起来了 运行成功弹出界面:

  10. SAP FICO 常用table

    Table 描 述 "Table Type" "Application Class" "Data Class" Description &q ...