简 述: 本站 ifmet.cn 迁移一份到国内服务器后,分享一下我当前的博客运行设计方案实行,以及我如何利用 GitHubAction 设置脚本,进行双解析:阿里云服务器 + GitHub Pages

[TOC]


本文初发于 “偕臧的小站“,同步转载于此。


部署原理

​ 当前博客的部署原理如上图,解决了之前在国内访问略慢的遗憾。现在这套方案,非常的满足我的个人所需。

图解注释:
本电脑 M:主力编程机器,也可以是任意一台设备
服务器 A:GitHub 仓库 xmuliMark,存放源文件(*.md),只使用 master 分支
服务器 B:GitHub 仓库 xmuli.github.io,存放解析后网页(*. html),使用 master 分支 (非默认分支)
服务器 C:国内阿里云的轻量级服务器,存放解析后网页(*. html),使用 master 分支

优点如下:

  • 任意电脑写 Markdown 文章,然后推送到 A 仓库即可(不用配置关心环境)
  • 不需本地解析,都是远程服务器解析,在部署到另外两台远程服务器
  • 国内 IP 访问,解析到阿里云服务器
  • 国外 IP 访问,解析到 GitHub 的服务器
  • 仅一份源文件,两份部署后的解析文件,各自部署
  • 源文件仅自己可访问,提高安全(将源文件与解析后的网页文件分开)
  • 全程自己搭建,学习动手部署,甚是快乐
  • 费用极低(阿里云服务器 + 域名费用)
  • 自己的服务器又部署一个服务,感觉惬意

如何搭建

关于如何部署,详细可以参考这两篇

再之前的,可以参考 此系列 ,记录着我搭建博客的一些记录


配置 GitHub Action:

​ 部署中的一个痛点:A 仓库存放 markdown 文件,然后可以利用 GitHub 的 Action 服务,自动解析为一份 html 网页文件,但是如何使用一个 .yml 部署到 阿里云服务器 + GitHub Pages 呢?

​ 附上我比较优雅的解决方案,其中 A 仓库的 .yml 如下

# 工作流程的名称
name: Hexo Deploy GitHub Page + Aliyun

on:
  push:
    branches:
      - master

jobs:
  build:
    runs-on: ubuntu-20.04
    
    steps:
    - name: Checkout
      uses: actions/checkout@v2.3.4
      
    - name: Setup Node.js environment
      uses: actions/setup-node@v2.1.5
      with: 
        node-version: "14.x"
    
    - name: Hexo deploy
      env:
        HEXO_DEPLOY_KEY: ${{ secrets.HEXO_DEPLOY_KEY }}
        
      run: |
        mkdir -p ~/.ssh/
        echo "$HEXO_DEPLOY_KEY" > ~/.ssh/id_rsa
        chmod 600 ~/.ssh/id_rsa
        ssh-keyscan github.com >> ~/.ssh/known_hosts
        ssh-keyscan ifmet.cn >> ~/.ssh/known_hosts
        git config --global user.name "xmuli"
        git config --global user.email "xmulitech@gmail.com"
        npm i -g hexo-cli
        npm i
        hexo clean && hexo generate && hexo deploy

​ 其中 HEXO_DEPLOY_KEY 是本地机器秘钥,也是 A 仓库(书写 *.md 文章) 中的 “settings-Secrets and variables” ,而 C 服务器有着对应的公钥,其值为本地机器的 git 私有秘钥( cat ~/.ssh/id_rsa 所输出的值);且设置了免密登录,而其中末尾的 run: | 中则下面两行是关键,同时部署两个服务器的重点

ssh-keyscan github.com >> ~/.ssh/known_hosts
ssh-keyscan ifmet.cn >> ~/.ssh/known_hosts