服务器部署之nextjs-notion-starter-kit

服务器部署

部署到Vercel上,国内访问速度一般,而且有时候还存在访问障碍,这里记录的是在自己服务器上部署。
我使用的是腾讯云的轻量应用服务器,操作系统为CentOS 7.9 64bit,安装的是宝塔Linux面板 7.6.0
以及之后在群晖7.1内安装的centos+宝塔面板,也可以同样操作。

安装Git

宝塔面板直接在软件商店搜索git,选择一个版本进行安装。

安装Nodejs环境

宝塔面板在软件商店搜索node,安装PM2管理器
安装完成之后,点击 PM2管理器 - 设置,切换nodejs版本v16.20.2
等切换完成之后,进入模块管理,需要安装以下模块
  • npm
  • pm2
  • yarn
  • eslint

拉取项目

我的宝塔默认在网站在 /www/wwwroot 文件夹下
宝塔面板可以直接在文件夹下使用终端,或者在终端通过代码进入文件夹
git clone https://github.com/yunzhongci/notion
或者
先创建一个文件夹比如 notion文件夹,然后进入文件夹初始化这个新文件夹的git仓库
git init
然后在git仓库的代码过来(非公开的仓库):
git pull git@github.com:*****/notion.git

安装依赖

按照教程,在项目根目录通过npm 或者 yarn 安装依赖。
可以先查看npm或者yarn的当前版(比较推荐实用yarn)。
npm -v
yarn -v
如果有需要可以先将npm升级到最新版本,这样可以避免版本太低产生的某些问题。
npm install npm@latest -g
升级npm的时候,可能需要以管理员或 root 用户身份运行该命令,可以尝试使用 sudo 再次运行该命令:
sudo npm install npm@latest -g
然后安装所有依赖,也可以跳过更新最新版本直接先执行安装依赖,有问题再试着升级版本或者其他方式解决遇到的问题。
yarn install
如果实用npm则是 npm install 后续也可以通过npm outdated 来检查项目的依赖包是否过期,如果过期则会列出它们的最新版本。然后通过npm update更新当前项目中的所有 npm 包。它会读取项目中的 package.json 文件,并将所有已安装的包更新到其最新版本。
在依赖安装完成之后执行:
如果是npm则是用 npm run
yarn build
这一步会在终端中打印很多页面内容,相当于是把Notion上的页面内容抓取到服务器存起来。
启动服务:
yarn start
返回
[root@centos notion]# yarn start yarn run v1.22.17 $ next start ready - started server on 0.0.0.0:3000, url: http://localhost:3000
这时候就可以访问本地3000端口查看了。
确定服务启动成功,并且没有问题,使用ctrl + C 返回,进行下一步。

使用PM2管理进程持久化

这时候的测试的,关闭终端就没有内容了
需要使Node进程持久化,使用进程管理工具,推荐使用pm2
安装pm2
yarn install -g pm2
在项目目录下,启动进程
pm2 start npm --name notion -- run start # --name 后面可以修改为你喜欢的名字
检查进程是否启动成功,即查看该进程的日志,检查是否有 error,
pm2 logs notion
查看所有进程
pm2 l
有时会遇到服务卡死的情况,这时就需要重启该进程
nginx reload notion
以上是常规pm2操作,在宝塔面板下,我们可以使用pm2管理器来查看、关闭和启用进程。位置在 pm2管理器 - 设置 - 项目列表

更新服务

之后如果项目有代码更新,关闭进程,进入项目根文件夹依次执行以下步骤即可
## 更新项目代码 git pull ## 重新启动进程 pm2 start npm --name "notion" -- start

反向代理到域名

宝塔面板反向代理非常简单
直接在面板中点 网站 - 添加站点,加上域名,PHP版本选择静态
然后站点设置中,添加反向代理,将网站指向 3000 端口,如下图:
notion image
notion image
之后做好域名解析,就可以通过域名访问了。
同时也可以通过这里设置SSL,并且强制https访问。

其他Linux服务器

其他Linux服务器上部署,基本方式是一样的
安装Git,安装Nodejs环境,最后使用Nginx来反向代理。

Nginx反向代理

使用源里默认的nginx
apt install nginx -y
/etc/nginx/site-enables 创建配置文件 yourdomian.conf
server { listen 80; listen [::]:80; server_name yourdomain.com; server_name www.yourdomain.com; listen 443 ssl http2; listen [::]:443 ssl http2; ssl_certificate /etc/nginx/ssl/youdomian.com/fullchain.pem; ssl_certificate_key /etc/nginx/ssl/youdomian.com/key.pem; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr; }
修改 server_name 后面的 domain 为你的域名,为你的域名申请证书并放到指定目录下,配置正确的 ssl_certificatessl_certificate_key ,配置完成后,检验nginx 配置
nginx -t
如有错误,可根据错误Debug,如无误,重载nginx 配置,
nginx -s reload
设置好对应的域名解析,即可顺利用你的域名访问你的网站了。

指令说明

部分在安装、调试和后续更新中可能用到到指令
指令
说明
-v
用于查看版本,比如 node -v 查看nodejs版本,或者查看yarn 或者 nmppm2的版本
yarn install
默认安装 package.json中所有依赖的模块的指定版本
yarn add <模块名>
安装指定依赖模块的最新版本
yarn build
yarn run build 或者 npm run build 启动 package.json 文件 scripts 区域的 build 指令应用程序拉取到静态文件中进行生产。
yarn strat
yarn run start 或者 npm run start 启动 package.json 文件 scripts 区域的 start 指令
pm2 delete 0
关闭并删除指定id为 0 的应用
pm2 delete all
关闭并删除所有应用
pm2 restart all
重启所有应用

更新依赖

部分Notion后续更新的特性不被支持,其实只是依赖没有更新到最新
package.jsonnotion-clientnotion-typesnotion-utilsreact-notion-x 四项更新到更新的版本就可以。
⚠️
其他依赖如果不懂不要乱动,容易出问题
npm更新指定指定的依赖到最新版本,可以使用以下命令:
npm install <package-name>@latest --save
"--save" 选项将更新的包版本写入 package.json 文件。
例如本项目需要更新四个依赖如下:
npm install notion-client@latest --save npm install notion-types@latest --save npm install notion-utils@latest --save npm install react-notion-x@latest --save
yarn更新指定依赖的方式:
yarn add notion-client yarn add notion-types yarn add notion-utils yarn add react-notion-x

参考