Warning: 观前提示
注意:本文主要涉及最简单的Notion部署方法,即保留Notion原有页面结构,而不做其他任何修改。如果需要将Notion当作自己的博客或者个人网页等(仅将Notion当作后端,不想保留其页面基础结构),请移步至transitive-bullshit/nextjs-notion-starter-kit、tangly1024/NotionNext等。
1 前言
前几天突然很想把自己的课堂笔记投放至搜索引擎,使得自己的页面被Bing、Google等搜索引擎搜索到,但是这就涉及到网站认证的过程:单纯使用Notion免费版生成网页链接所得到的这个域名,无法进行所有权认证,因为认证过程一般需要比如:
- 一些DNS认证
- 上传认证的
HTML
文件 - 自主编辑
HTML
源代码
而且,使用Notion页面链接分享,国内点开链接加载速度很慢,原因你懂的;右上角还会出现一个大大的「Built with Notion」,别的同学想在你的页面留下评论也不方便。种种因素叠加下,我决定想个办法,把自己的Notion「部署」到Github
等DIY空间更大的网站上,这样不仅可以自定义域名,还可以上传认证的HTML
文件,自主编辑Notion页面源代码。
当然,我这里提到的「部署」,并不是将Notion上的数据以某种方式下载到Github
等地,然后再以类似Hugo
、Mkdocs
等方式创建静态资源;而是保留Notion作为后端,Github
等地部署的脚本只作为一个类似 「渲染器」 的东西,通过Notion API抓取Notion数据库的数据,将这些数据渲染成网页。
2 获取页面ID
1、首先确定需要部署的根页面。后续部署获得网页的主页就是这个页面,只有这个页面的子页面才会在后续部署的自定义域名下。
2、在需要部署的根页面的右上角,依次点击share
⇒Publish
⇒Publish
,获得根页面的分享链接;
3、复制根页面的页面ID。Notion的页面ID通常是由32个字母+数字构成。
Tip
页面ID不包括前面你的页面名称的一部分(用短线-
分隔),也不包括?
后面的部分。
比如我打算分享的根页面链接为https://zhenh.notion.site/ZJU-f21d69aaa7214868b465490a9bc6eee2?pvs=4
或者https://www.notion.so/ZJU-f21d69aaa7214868b465490a9bc6eee2?pvs=21
,那么我的页面ID为f21d69aaa7214868b465490a9bc6eee2
。
3 在Github上获取脚本代码
如果想要从头开始自定义,推荐Github
上一个项目叫做react-notion-x,本文也是基于此。
我在摸索的过程中,发现一个极快的方法: 只需要复制这个仓库examples/full下的代码,再设置刚刚获得的页面ID,就可以基于Next.js
轻松部署Notion页面渲染器了 。具体的细节也可以查看刚刚提供链接中的README,细节就不多涉及了。我的仓库就是基于刚刚给的examples/full
下的代码,再加了个自定义的Giscus
评论区。你也可以选择Fork我的项目进行修改。
4 配置渲染器
4.1 填入PageId
获得需要的脚本代码后,只需要进入lib/config.ts
中,把rootNotionPageId
修改成刚刚获取的根页面ID即可。SpaceId
可填可不填,如果你的Notion加入了Space的话是需要填的(不过我也没试过,因为我就是打算免费白嫖的,怎么可能给Notion充钱(乐))。
然后一切就大功告成了,就是这么简单。接下来是一些选做的配置。
4.2 (选做)自定义网站描述和图片
如图,在components/NotionPage
中,修改socialDescription
以及socialImage
可以自定义网站描述和图片。
4.3 (选做)配置Giscus评论区
使用Github
还有个好处就是可以基于Discussions
利用Giscus
配置评论区。
如图,我在NotionPage.tsx
中加入了一个giscus
的元素,然后加入Giscus官网生成的脚本代码,选择notion-page
及notion-full-page
属性即可。这样就可以非常简单地在自己部署的Notion页面中添加评论区了。也可以选择直接Fork我的项目,自己在官网获得Giscus
脚本代码后,将信息填到自定义的部分。
5 安装必要库
如果之前有安装过npm
或者yarn
,或者如果并不想自己在本地先跑下看看,可以直接跳过这部分。这里也不涉及具体的安装教程,Google一下应该非常容易。我自己是用了yarn
包管理器,在终端输入:
1npm install -g yarn
2yarn install
3yarn add next react react-dom notion-client notion-compat notion-utils react-notion-x notion-types
如果有出现权限不够的记得给sudo
。我自己在摸索的时候发现好像还是得手动yarn add
,不过无所谓了,能够把react-notion-x
所必需的库装好就行。
然后使用yarn dev
就可以在本地运行了。如果一切正常没有报错的话,可以在浏览器中输入http://localhost:3000/
查看部署出来的最终效果。要进行进一步自定义修改也是可以的,并且localhost
也会即时更新。
6 创建Git仓库并推送至Github
关于Git
的使用不是本篇的重点,因此仅简单列出必要步骤:
1、在目前你所在的文件夹中(比如我现在是react-notion-x
)创建本地Git
仓库:
git init
2、将目前所有的修改好的文件添加到本地Git
仓库:
git add .
3、在本地提交commit,可以备注一些提交信息:
git commit -m "想要提交的信息"
4、在Github官网创建一个公开的空repo,比如我的是https://github.com/ZhenHuangLab/notion,这是到时渲染器脚本的位置。
5、将刚刚创建的远程Github仓库与本地仓库绑定:
git remote add origin "远程仓库地址"
6、将之前本地的commit推送到远程仓库中:
git push -u origin master
本地默认创建的是master
分支,因此这里用master
。如果创建了别的名称的分支(比如main
),则需要改成相应的分支名。
至此,本地的react-notion-x
项目应该已经推送到远程的Github
仓库中了。
如果之后在本地进行了一些修改,比如说在README.md
中写了一些文字作为项目的介绍,就可以使用以下命令推送同步到远程仓库:
git add .
git commit -m "提交信息"
git push
7 部署到Vercel
1、注册并进入Vercel
:打开https://vercel.com/new/,建议使用Github
进行登录,然后准备创建一个Vercel
项目。
2、然后需要将Vercel APP
添加到你的Github
应用中,应该在创建Vercel
项目时会有相应提示,反正安装Vercel
应用即可,这样Vercel
就可以访问你的个人Github
仓库了;
3、再在创建页面选择Import Git Repository
,也就是导入刚刚创建的与react-notion-x
相关的个人仓库,然后设置框架和命令可以参考我现在写的:
其中Install Command
是:(当然,我这写得可能啰嗦了点,但是无所谓,能跑就行)
1npm install -g yarn && yarn add next react react-dom notion-client notion-compat notion-utils react-notion-x notion-types
其他的像root directory
和环境变量Environment Variables
可以不管,因为无论是我们之前设置的页面ID还是评论系统,都是公开的信息,无所谓;如果需要配置一些key,则需要考虑设置环境变量来保证安全性了。
4、点击Deploy
进行自动部署。部署成功后会出现Congratulations
界面,说明部署完成;点击Project
可以看到已经成功部署网页了:
- 如果出现部署失败的问题(按道理来讲在本地跑通了就没问题),在本地修改排查之后推送到
Github
仓库,然后Vercel
会进行重新部署。 - 如果是
Vercel
配置的问题(比如我一开始不熟悉Vercel
这玩意以及如何正确安装必要库,试错了几次),那么可以修改Vercel
设置后,在对应失败的Deployment
中点击重新部署Redeploy
:
8 配置自定义域名
成功部署至Vercel
后,每一次推送到Github
的commit,Github
都会交给Vercel
进行部署,于是我们得到了能够自定义渲染Notion页面的脚本(只不过在本文中是最朴素的渲染)。
Vercel
会自动生成一个网址,别人可以用这个域名访问你的Notion页面了,而不是xxx.notion.site
或者notion.so/xxx
了。
然后我们可以在Vercel
中自定义域名:在部署成功的Vercel
项目中点击Settings - Domains
,然后将自定义的域名输入(需要自己先有域名,比如我打算给notion.zhenhuang.site),那么我就将该域名输入其中,点击Add
就行,Vercel
会指引你如何配置该域名(通常就是给自己的域名添加一个CNAME
记录就好)。等待几分钟之后,Vercel
会将你自定义的域名与它给的域名绑定,这样就完成配置了。
这样,别人通过你给的自定义域名就可以访问到你的自定义Notion页面(比如我的是notion.zhenhuang.site);你在Notion中直接编辑页面,过一两分钟就会同步到你的自定义网页中,而不用Github
推送(因为Github
和Vercel
部署的本质是个渲染脚本,内容还是在Notion中;Vercel
会隔一小会刷新一次,抓取一次数据。在Domains
设置中也可以进行手动刷新)
配置结束后,就可以按照搜索引擎给的流程,在public/
中添加相应的认证文件(比如Bing需要的BingSiteAuth.html
),来进行所有权认证,使得自己的Notion页面被搜索引擎收录。
通过这一通操作,就可以免费白嫖Notion自定义域名、使搜索引擎收录自己的Notion页面、自定义评论系统,并且给了非常大的DIY空间。我目前这个还是最简单的方案,是几乎没有进行任何自定义的,而有很多大神已经把Notion玩得贼溜了,直接当博客用了,也非常强大,例子可以参考我之前给的链接NotionNext,我看学校也有一些同学用这个做了自己的博客,比如fufu酱のNoteBook。
Info: 说在最后
因为自己把Notion部署到Vercel
上是一步步摸索过来的,也没有一边记录过程,所以只是回忆了一下一些重要的步骤,也没有重新走一遍流程认真配图,所以如果有细节没有提及的欢迎补充,网上搜一下应该也能找到解决方案。