云服务器部署 Twikoo
1. 背景
本站评论系统采用的是 twikoo,开源免费,并且部署方式多样,具体可以查看 《twikoo 中文文档》。
之前选择通过 Zeabur 的方式部署,操作比较简单,但是非常不稳定,经常挂,后面又试了 Netlify,介绍说会更稳定,但是居然收费,果断放弃。
最近入了新的云服务器,正好可以试一下私有部署方式。
2. 私有部署
按照官方文档的操作步骤,服务器部署 twikoo 主要包括下面几步:
服务器上安装下载 Node.js,也就是需要 Node 环境。
通过 npm 安装 twikoo 服务:
npm i -g tkserver
。根据需要配置环境变量,可选,配置项如下:
MONGODB_URI
:MongoDB 数据库连接字符串,不传则使用 lokijs。MONGO_URL
:MongoDB 数据库连接字符串,不传则使用 lokijs。TWIKOO_DATA
:lokijs 数据库存储路径。TWIKOO_PORT
:端口号,默认8080
。TWIKOO_THROTTLE
:IP 请求限流,当同一 IP 短时间内请求次数超过该阈值将返回错误。TWIKOO_LOCALHOST_ONLY
:为true
时只监听本地请求,使得 nginx 反代后不暴露原始端口。TWIKOO_LOG_LEVEL
:日志级别,支持verbose
/info
/warn
/error
。TWIKOO_IP_HEADERS
:特殊情况使用,通常用不到,详见官方文档。
启动 twikoo 服务。
配置前端代理实现 https 访问。
博客配置。
下面记录详情过程及其中的一些坑
2.1 node 环境
新入的云服务器,操作系统选的 centos7 ,没有 node 环境,需要重新安装。
选择编译安装的方式,准备安装 v18.20.3
长期支持版本,这里遇到了第一个坑,具体操作如下:
- 首先到
/usr/local
路径下创建nodejs
文件夹,然后把下载的二进制文件放到这里,解压缩:
tar -xvf node-v18.20.3-linux-x64.tar.xz
- 创建软连接:
# 建立node软链接
ln -s /usr/local/nodejs/node-v18.20.3-linux-x64/bin/node /usr/local/bin
# 建立npm软链接
ln -s /usr/local/nodejs/node-v18.20.3-linux-x64/bin/npm /usr/local/bin
然后 npm -v
查看是否成功,这时候就报错了。
查了下,从 node v18
版本开始需要 glibc-2.28
支持,可能装更低版本的 node 就不会有这个问题。
根据提示安装所需的 glibc-2.28
:
cd /usr/local
mkdir glibc && cd glibc
wget http://ftp.gnu.org/gnu/glibc/glibc-2.28.tar.gz
tar xf glibc-2.28.tar.gz
cd glibc-2.28/ && mkdir build && cd build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
此时报关于 bison
和 make
的错误:
configure: error:
*** These critical programs are missing or too old: make bison compiler
*** Check the INSTALL file for required versions.
查看 bison
版本:
bison -V
发现服务器还没安装 bison
,安装:
yum install -y bison
更新 gcc
与 make
:
# 升级GCC
yum install -y centos-release-scl
yum install -y devtoolset-8-gcc*
mv /usr/bin/gcc /usr/bin/gcc-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc
mv /usr/bin/g++ /usr/bin/g++-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++
# 升级make
cd /usr/local && mkdir make && cd make
wget http://ftp.gnu.org/gnu/make/make-4.3.tar.gz
tar -xzvf make-4.3.tar.gz && cd make-4.3/
./configure --prefix=/usr/local/make
make && make install
cd /usr/bin/ && mv make make.bak
ln -sv /usr/local/make/bin/make /usr/bin/make
此时再执行上面配置 glibc
的步骤:
cd /usr/local/glibc/glibc-2.28/build
../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
配置没报错,继续安装 glibc
:
make && make install
这个过程比较长,大概要 20 分钟,安装好之后验证 node 环境是否装好:
npm -v
仍有报错,未找到 CXXABI_1.3.9
:
node: /lib64/libstdc++.so.6: version `CXXABI_1.3.9' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by node)
node: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by node)
此时需要更新 libstdc++.so.6.0.26
:
cd /usr/local/ && mkdir libstd && cd libstd
wget https://cdn.frostbelt.cn/software/libstdc%2B%2B.so.6.0.26
cp libstdc++.so.6.0.26 /usr/lib64/
cd /usr/lib64/
ln -sfn ./libstdc++.so.6.0.26 libstdc++.so.6
再次验证 node
环境,没有问题。
2.2 安装 twikoo
按照官方文档介绍安装:
npm i -g tkserver
第三步跳过,直接使用默认配置
2.3 运行 twikoo
按照官方文档介绍,直接运行 twikoo
命令启动服务会报错,可能是因为没配全局环境。
此时查看 node
仓库地址:
npm config ls
进入仓库找到 tkserver
包并进入其 bin 目录,其中 server.js
文件就是程序的入口文件,通过 node
运行:
node server.js
程序启动后,默认会监听 8080
端口,访问 http://服务端IP:8080
查看,页面会显示一段 json 信息:
{
"code": 100,
"message": "Twikoo 云函数运行正常,请参考 https://twikoo.js.org/frontend.html 完成前端的配置",
"version": "1.6.36"
}
但此时不是后台运行,一旦连接窗口关闭,运行就会停止,官方文档也给了解决办法,即通过 nohup
命令后台运行:
nohup tkserver >> tkserver.log 2>&1 &
但由于 tkserver
不是全局命令,直接运行上面命令会报错,此问题可以通过 shell
脚本很方便地解决:
查看 server.js
完整路径:
realpath server.js
新建 run.sh
文件,内容就一行:
node /usr/local/nodejs/node-v18.20.3-linux-x64/lib/node_modules/tkserver/server.js
执行 nohup
命令:
chmod +x run.sh
nohup ./run.sh >> tkserver.log 2>&1 &
此时就可后台运行 twikoo
服务。
2.4 配置 https
twikoo
默认是 http 访问,官方文档建议配置 https
,由于之前配置过 https,只需加个路径即可:
location /twikoo {
proxy_pass http://localhost:8080;
}
当通过 https 访问该路径时,代理到 twikoo 服务。
2.5 博客配置
配置 https 之后,envId
就是 https://域名/twikoo
,将其正确配置到博客配置文件中,twikoo
的私有化部署就完成了^-^。