Github Actions Hexo 自动部署 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
imba97
V2EX    分享创造

Github Actions Hexo 自动部署

  • &bsp;
  •   imba97
    imba97 2022 年 12 月 10 日 2351 次点击
    这是一个创建于 1174 天前的主题,其中的信息可能已经有所发展或是发生改变。

    来龙去脉

    最近重装了电脑,近几年内每次重装也好,装备新电脑也好,越来越觉得维护博客是令我比较头疼的事

    因为前几年从 WordPress 迁移到了 Hexo,虽然变成了纯静态,访问速度上提高了。但本地文件的维护、文章的发布就变得很繁琐

    比如

    • 重装必须备份
    • 多台电脑必须同步最新的
    • 发布文章需要在本地跑三条命令

    多台电脑同步的问题,我在家里树莓派上建了个 git 仓库,专门同步文章。不过大部分时间都会忘记,并且配置文件、主题的配置文件都不在文章目录,所以没法同步

    觉醒

    最近一次重装我依然是手动备份,重装后看着这个备份,觉得这样下去不行,得赶紧拿出个更完美(懒)的方案

    想起之前在一个浏览器插件的仓库看到了自动发布脚本,我有个浏览器插件每次发布都很繁琐,因此早就想研究一下自动化

    所以这次第一个念头也是自动化:Github Actions

    旧流程

    按照之前手动挡的流程是这样的

    1. 清除缓存 hexo clean
    2. 生成静态文件 hexo g
    3. 部署 hexo d(执行一次 git 推送)
    4. 远程仓库 hooks 被触发,自动去网站根目录,git pull

    最后网站根目录拉取到文章,部署成功

    其中 3 之前你需要在本地手动执行的,而且重装或者换电脑意味着需要在远程服务器配置新的公钥

    新流程

    新的半自动挡解决了 1-3,你只需要进行一次 git 提交

    其他的事情交给 Github Actions

    整个流程是

    • 创建密钥,用于连接博客服务器
    • 安装 hexo
    • 安装 hexo 插件
    • 拉取主题
    • 安装主题依赖包
    • 检查主题目录
    • 配置 git
    • 生成静态文件
    • 部署!

    工作流配置

    name: publish on: push: branches: - master jobs: publish-blog: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 with: node-version: 14 registry-url: https://registry.npmjs.org/ - name: create keys run: | mkdir -p ~/.ssh echo '${{secrets.PRIVATE_KEY}}' > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan -t rsa 1.2.3.4 >> ~/.ssh/known_hosts ls -l -a ~/.ssh - name: install hexo-cli if: steps.cache.outputs.cache-hit != 'true' run: npm i -g hexo-cli - name: install hexo dependencies run: npm i working-directory: hexo - name: pull themes run: | mkdir -p hexo/themes git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git hexo/themes/butterfly echo 'themes config' cp hexo/themes_butterfly_config.yml hexo/themes/butterfly/_config.yml echo 'background image' cp hexo/images/bg.png hexo/themes/butterfly/source/img/bg.png - name: install themes package run: npm i working-directory: hexo/themes/butterfly - name: check themes package run: ls -l working-directory: hexo/themes/butterfly - name: git config run: | git config --global user.name imba97 git config --global user.email [email protected] git config --global init.defaultBranch master working-directory: hexo - name: hexo generate run: | hexo clean hexo g working-directory: hexo - name: deploy! run: | git init git add . git commit -m "deploy!" git remote add origin [email protected]:/git/blog.git git push --force origin master working-directory: hexo/public 

    经过了大概 40 次左右的测试,最后终于是成功部署

    主要问题

    期间主要解决 git push 不成功,私钥问题

    问题的关键是,你不但需要在 ~/.ssh/ 下创建私钥,还需要创建一个 known_hosts,记录已知的服务器 IP

    私钥创建流程,我是在我本地创建了一对密钥,把私钥复制出来放到仓库配置中

    工作流使用的时候就把它写入到文件

    echo '${{secrets.PRIVATE_KEY}}' > ~/.ssh/id_rsa 

    记录已知的服务器 IP 也就是工作流的这一步

    ssh-keyscan -t rsa 1.2.3.4 >> ~/.ssh/known_hosts 

    其他小问题

    主要是主题,主题自定义的配置文件和图片,解决方案是直接放在仓库,复制过去

    所以如果你打算用以上工作流,还得根据自己的主题去改改

    收工

    至此,我本地将不在管理博客的任何东西,甚至写博客都可以随时打开 Github 来写,比如现在

    而且依然也可以在本地写,如果换主题肯定还是要本地跑一下测一下的

    总之,爽到了

    其他补充

    为啥说是半自动挡呢,因为我感觉服务器部分也需要继续优化,不能通过 git hooks 的方式部署,这样的话迁移到另一台服务器还得配置一遍,也是很麻烦的

    之后考虑在工作流中用 sftp 直接上传的方式部署,需要解决的问题是生成静态文件数量非常多,目前考虑可以先压缩,再上传,再给博客服务器发送解压命令

    等不懒了搞一搞,再水一篇文章 ( _`)

    7 条回复    2022-12-14 11:34:31 +08:00
    Noicdi
        1
    Noicdi  
       2022 年 12 月 10 日 via iPhone
    关于服务器迁移后需要重新配置部署的问题,我的解决办法是写 dockerfile
    Croxx
        2
    Croxx  
       2022 年 12 月 10 日
    活捉
    mohuani
        3
    mohuani  
       2022 年 12 月 10 日   3
    推荐使用 https://vercel.com/ 自动托管 你的 hexo 仓库,乱七八糟的配置就不用管了,你就可以专注于写文章了
    imba97
        4
    imba97  
    OP
       2022 年 12 月 13 日
    @Noicdi 好办法,下次试试
    Noicdi
        5
    Noicdi  
       2022 年 12 月 13 日 via iPhone
    @imba97 #4 顺手推一下我的解决方案

    https://www.noicdi.com/posts/88e2d01a.html
    imba97
        6
    imba97  
    OP
       2022 年 12 月 14 日
    @mohuani 也是个方法,不过个人还是想放自己服务器上
    imba97
        7
    imba97  
    OP
       2022 年 12 月 14 日
    @Noicdi 好嘞,感谢分享
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5668 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 31ms UTC 06:57 PVG 14:57 LAX 22:57 JFK 01:57
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86