如何自动发布obsidian库或logseq库为网站

Tags
Star
工具
其实就是自动将md文件渲染为html文件,本质上和hugo、hexo、Jekyll等博客渲染工具一样的。但是本方法支持全文搜索、双链和关系图谱。
效果可见: logseq.fishyer.com
适用场景:
  • 1-分享双链大纲,因为WorkFlowy在国内访问太慢了,而且不支持双链。超适合分享一些卡片笔记,一个卡片笔记的案例:Logseq,可以存放一些主题的相关资源、书签、笔记,一定程序上可以代替书签管理工具,并分享书签集锦。
2-批量分享md文件,比如一些付费内容,通过MarkDownLoad插件下载为本地md文件后,可以通过这种方式分享
  • 以前试过批量上传md到Notion分享,但是批量上传md到Notion很不方便,慢,而且会改变md格式,不是很方便
 
只想快速部署,不关心具体细节的,可以直接移步最后:极简部署的模板

1-自动提交到github仓库

  • 1-1-将logseq库作为obsidian库的子文件夹,将要公开的md文件移动到logseq库的pages里面
    • notion image
  • 1-2-配置logseq为全部公开
    • 虽然logseq能在指定md文件里添加public:: true 属性来公开此页面,但是批量管理很麻烦,建议直接将所有可公开的md存放到一个库里面,或放在一个单独的文件夹通过git忽略配置来隐藏私有文件夹(不提交到gihub就不会参与后续的编译了)
    • logseq库的config.edn路径
      • notion image
    • 修改logseq的config.edn,我的配置文件已存放到github-gist: logseq-config.edn ,直接复制粘贴即可
    • :publishing/all-pages-public? true
      :default-home {:page "README" :sidebar ["contents"]}
    • 如上,可以配置网站的起始页面为README.md
  • 1-3-配置logseq的git自动提交
    • 本来Obsidian库也有git插件自动提交,但是好像没法指定特定文件夹,只能全库提交,这里只提交公开的logseq库
    • notion image
  • 1-4-配置git hooks,commit时自动push到github仓库
    • 主要是因为logseq的git,只能自动commit,不能自动push,故需添加git hooks
    • 路径如下
      • notion image
    • shell脚本文件如下
      • #!/bin/sh
        
        git push origin main

2-配置github actions自动生成html

  • 在logseq库下新建.github文件夹添加main.yml
  • 路径如下
    • notion image
  • 配置文件如下:
    • # This is a basic workflow to help you get started with Actions
      
      name: CI
      
      # Controls when the workflow will run
      on:
        push:
          branches: [main]
      
        # Allows you to run this workflow manually from the Actions tab
        workflow_dispatch:
      
      # A workflow run is made up of one or more jobs that can run sequentially or in parallel
      jobs:
        # This workflow contains a single job called "build"
        build:
          # The type of runner that the job will run on
          runs-on: ubuntu-latest
      
          # Steps represent a sequence of tasks that will be executed as part of the job
          steps:
            # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
            - uses: actions/checkout@v2
            # - name: change config.edn and custom.css
            #   run: cp logseq/config-public.edn logseq/config.edn && cp logseq/custom-public.css logseq/custom.css
            - name: Logseq Publish 🚩
              uses: pengx17/logseq-publish@main
            # - name: Inject Script
              # run: sed -i "s@</body>@$( cat logseq/inject.html | tr '\n' ' ' | sed 's@&@\\&@g' )</body>@"  www/index.html
            - name: add a nojekyll file
              run: touch $GITHUB_WORKSPACE/www/.nojekyll
            - name: Deploy 🚀
              uses: JamesIves/github-pages-deploy-action@v4
              with:
                repository-name: fishyer/MyLogseq-Publish
                branch: master # The branch the action should deploy to.
                folder: www # The folder the action should deploy.
                clean: true
                single-commit: true
                token: ${{ secrets.ACCESS_TOKEN }}
  • 还可以添加评论模块,具体可以查看:配置Logseq自动发布相关流程,不过我现在已经关闭了,感觉会增加编译耗时,而且也没啥用,没人评论
  • 上面的repository-name: fishyer/MyLogseq-Publishtoken: ${{ secrets.ACCESS_TOKEN }}其实是可选的
    • 如果自己生成的html存放到本仓库的指定分支,而不是存放到其它仓库,可以不配置。
    • 配置的顺序貌似不可修改,容易导致action执行出错。
  • 推荐保存到其它仓库,因为强迫症无法忍受每次打开github仓库时都提示两个分支有差异,提示合并。命名规范推荐为(加一个publish的后缀而已):
    • 我的md仓库为:
    • 对应 的html仓库为:
  • secrets.ACCESS_TOKEN的生成,点击,创建新token,然后勾选所有的权限
    • notion image
  • secrets.ACCESS_TOKEN的配置
    • notion image
  • 生成的html文件效果,其实并没有将每个md都生成一个html,而是都聚合在index.html里面。好处是在https://logseq.fishyer.com 这里查看时,可以快捷键Ctrl+K进行全文搜索,可以折叠展开,支持双链和关系图谱。感觉比hugo这种博客引擎更方便。
    • notion image

3-vercel自动发布为网站

  • 其实可以直接借助github pages来发布,无须vercel,但是github page实在是访问太慢了,不如vercel自带cdn,国内也有节点,访问速度大大加快
  • 新建vercel项目,导入github仓库
    • notion image
  • 啥都不用配置,直接deploy即可
    • notion image
  • 可以查看自动发布的历史,可以看到,一般每次发布耗时不足10s
    • notion image
       

4-通过CloudFlare绑定自定义域名[可选]

  • 不是每个人都有自己的域名的,其实直接用vercel自动生成的.vercel.app域名也挺好的,唯一的缺点就是在微信里面打开时会提示风险
  • 4-1-先在GoDaddy购买一个域名:GoDaddy | 购买域名,费用看你的名称而定,我的域名:fishyer.com 费用为平均81人民币/年。
    • 建议优先选择.com .cn .net之类的域名,不然小心在微信里面打不开,比如.me .top .app等小众域名
    • 推荐选择国外域名的原因,是因为可以免备案,直接在国内的阿里云买域名也可以,就是必须备案了,感觉备案挺麻烦的,要上传很多资料,还只能线下办理,懒得去折腾
  • 4-3- 在自己的CloudFlare管理后台,添加一个DNS解析记录,解析到Vercel-DNS
    • 类型为CNAME,名称为logseq(实际上就是logseq.fishyer.com,可自定义,不过建议命名为这个,方便区分和记忆,因为还可能会有notion.fishyer.com mweb.fishyer.com hugo.fishyer.com等等),内容为cname.vercel-dns.com ,代理状态选仅限DNS(不需要CloudFlare的cdn,因为Vercel自带cdn,比CloudFlare的cdn好像还快一点)
      • notion image
  • 4-4-在Vercel的项目配置里面,输入自定义的域名,比如:logseq.fishyer.com ,然后Add
notion image

极简部署的模板

  • 1-直接下载我的,解压
    • notion image
  • 2-拖动到自己的ob库下面,在logseq文件夹的路径下,配置好git仓库-origin和分支名称-main
    • 将第3行的仓库路径git@github.com:fishyer/MyLogseq-Template.git修改为自己的仓库路径,然后依次执行即可
    • git init
      cp assets/post-commit .git/hooks/post-commit
      git remote add origin git@github.com:fishyer/MyLogseq-Template.git
      git checkout -b main
      git add .
      git commit -m "init"
      git push -f origin main
  • 3-等待github action执行完毕后,导入到vercel中,等待Vercel发布完成,就大功告成了 🎉 
  • 极简版本的注意事项:
    • 1-注意仓库的名称和分支的名称要和git hooks里面的post-commit脚本对应,不然会导致自动push失效
      • 为了让自动commit和自动push生效,logseq软件需要开着,并打开了这个仓库
    • 2-本模板已经添加好了github-actions脚本,但为简单起见,是发布到原始仓库的gh-pages分支下面,不同于正文中是发布到另一个MyLogseq-Publish仓库下面
    • 3-需要修改vercel中对于的git分支为gh-pages
    •  
如果你在部署过程中,遇到什么问题,欢迎和我交流讨论,微信:fishyer2850,或者加入我们的群聊来讨论:https://blog.fishyer.com/about
 

© fishyer 2022