使用github action发布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 即可浏览
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中将自己博客名称、网址信息等进行替换

然后在 Settings/Secrets/ActionsNew repository secret , 其中docker信息是在阿里云容器仓库中创建了一个个人实例(创建之后需要去 /个人实例/访问凭证设置固定密码),当然,你也可以使用其他的docker仓库,不过第2步的 Login to Aliyun Container Registry (ACR)需要进行修改

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

我写好了一个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容器启动成功

在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,那么就不会从博客园拉取了,原本的文件还会存在,不会进行覆盖

docker build -t "${{ secrets.DOCKER_REGISTRY }}/${{secrets.BLOG_NAME}}/${{secrets.BLOG_NAME}}-blog:${{env.TAG_NAME}}" -f Dockerfile .

  go传入参数使用conf来做,secrets截断问题通过先替换掉会截断的字符,然后使用时替换回去

Original: https://www.cnblogs.com/spatxos/p/16478352.html
Author: spatxos
Title: 使用github action发布hexo博客到云服务器

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/582904/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • linux free命令available小于free值

    问题:前段时间在做服务器巡检时发现系统可用内存值小于空闲内存值 分析:查询网上各种资料,都说的是 available=free + buff/cache 这样一个大致计算方式,按这…

    Linux 2023年6月14日
    0178
  • 进程间通信(IPC)

    进程间通信(Interprocess Communication,IPC)是指两个或者多个进程之间进行数据交换的过程 进程拥有独立的内存空间 命令行参数(向子进程传递和exec系列…

    Linux 2023年6月6日
    0125
  • VirtualBox网络模式 宿主机无法访问虚拟机问题记录

    问题背景 最近在公司使用VirtualBox虚拟机,使用虚拟的ubuntu系统,家里的路由能使用桥接模式,然后能双向ping通(宿主机 现在经常要打开虚拟Linux跑一些脚本和编译…

    Linux 2023年6月6日
    0110
  • 网络设备配置–8、利用ospf配置动态路由

    一、前言 同系列前几篇:网络设备配置–1、配置交换机enable、console、telnet密码网络设备配置–2、通过交换机划分vlan网络设备配置&#8…

    Linux 2023年6月8日
    0114
  • 2020年12月-第01阶段-前端基础-HTML CSS 项目阶段(一)

    品优购项目(一) 目标: 能会引入ico图标 能简单看懂网站优化的三大标签 能使用字体图标 ( 重点 ) 能说出我们css属性书写顺序 1. 品优购项目介绍 项目名称:品优购 项目…

    Linux 2023年6月8日
    0123
  • 请求方式

    题目如下 题目描述为请求方式,HTTP的请求方式一共有八种,读者自行去查 打开靶场如下 题目的意思需要以CTF**B为请求方式,由于平台名为CTFHUB,于是试了一下 接着抓包,推…

    Linux 2023年6月7日
    0109
  • MySQL提示sql_mode=only_full_group_by解决办法

    MySQL异常sql_mode=only_full_group_by 原因:在MySQL 5.7后MySQL默认开启了SQL_MODE严格模式,对数据进行严格校验。会报sql_mo…

    Linux 2023年6月13日
    0129
  • Ubuntu16.04部署django+nginx项目

    项目使用django+nginx部署。这个项目断断续续地部署4遍了。感觉每次部署都挺费时间的(找各种配置的资料),于是写一个博客总结一下。 安装vsftpd $ sudo apt-…

    Linux 2023年6月7日
    070
  • Redis的快照持久化-RDB与AOF

    Redis为了内部数据的安全考虑,会把本身的数据以文件形式保存到硬盘中一份,在服务器重启之后会自动把硬盘的数据恢复到内存(redis)的里边。 数据保存到硬盘的过程就称为&#822…

    Linux 2023年5月28日
    0109
  • MySQL之外键、表关系及SQL查询关键字

    一、外键 假设现在我们有一张员工信息表,表的字段如下: id # 主键 name # 姓名 age # 年龄 dep_name # 部门名称 dep_desc # 部门描述 单从数…

    Linux 2023年6月14日
    083
  • PMP 考试常见工具与技术点总结

    转载请注明出处: 网络图:项目进度活动之间的逻辑关系,用来推算关键路径,最大浮动时间等; 横道图(甘特图):以图示的方式,通过活动列表和时间刻度,来展示项目获得那个顺序和持续时间 …

    Linux 2023年6月14日
    094
  • DDR4 SDRAM -时序参数小册子

    如前所述,大神的原文链接如下:https://www.systemverilog.io/ddr4-timing-parameters-cheatsheet 参数 功能 ACTIVA…

    Linux 2023年6月7日
    0107
  • 大数据——克隆主机并配置集群

    利用VMware的克隆功能,克隆出 hadoop102、 hadoop103、 hadoop104三台主机 克隆完成后,记得修改文件( root用户下) vim /etc/sysc…

    Linux 2023年6月8日
    0353
  • 统计算法_探索性统计

    最近不知道写什么了,基本python的各种功能百度一下,都能搜到一大把,最近itchat好像很火,不过对这个不是很感冒,等以后有兴趣或者用的上的时候研究研究准备把统计方面的东西再看…

    Linux 2023年6月6日
    094
  • MySQL-配置参数时 报错:remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu……

    报错:remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu…… 原因: 1、第一次配置参数时,不完整…

    Linux 2023年6月13日
    0127
  • Linux 配置Maven(避免踩坑篇)

    前言:请各大网友尊重本人原创知识分享,谨记本人博客: 南国以南i 二、下载好的maven安装包放在磁盘的 /usr/local/ 目录下,如下图: 三、解压该压缩文件 tar -z…

    Linux 2023年5月27日
    0102
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球