前言

利用私有部署把Twikoo评论部署在博客上,网上基本都是Docker方式的安装,因为对Docker不熟悉而且常规的私有部署教程全网基本没有,所以记录一下,给需要的人使用linux(非Docke版)安装。

下载node

下载

进入nodejs nodejs官方网站

找到需要下载的版本号,右键复制出下载地址 https://nodejs.org/dist/v18.12.1/node-v18.12.1-linux-x64.tar.xz

链接服务器

利用Xshell/Finalshell/宝塔连接你的服务器

进入目录解压

可以自定义,知道自己的在哪就行

  • 创建/usr/local/nodejs目录
  • 使用tar -xvf [指定的压缩档案包] -C [指定的解压目录]解压包到指定目录。

首先应该先进入目录

1
cd  /usr/local/

新建一个nodejs的目录

1
mkdir nodejs

cd到nodejs目录,用wget下载 这样就直接下载到你的目录里面

1
2
cd nodejs
wget https://nodejs.org/dist/v18.12.1/node-v18.12.1-linux-x64.tar.xz

tar xf 解压文件

1
tar xf node-v18.12.1-linux-x64.tar.xz

mv 重命名为node18 这个命名自己清楚就行

1
2
mv node-v18.12.1-linux-x64 nodejs18
cd nodejs18 #进入目录检查一下

创建node全局模块目录和缓存目录

1
2
mkdir -p /usr/local/nodejs/nodejs18/node_global
mkdir -p /usr/local/nodejs/nodejs18/node_cache

配置环境变量

跳回最初目录然后进入root

1
2
cd /
cd root

在root里面找两个文件.bash_profile.bashrc

有`bash_profile就配置bash_profile

两个都有就配置.bashrc

都没有就直接创建

编辑文件

  1. 使用vim编辑器修改.bashrc文件

  2. 点击按键“i”,进入插入模式

  3. 下到文件末尾,添加两行,分别声明nodejs的NODEJS_HOME(nodejs安装目录)和PATH(nodejs的bin目录)

1
2
3
4
5
6
7
# nodejs环境变量
export NODEJS_HOME=/usr/local/nodejs/nodejs18
export PATH=$NODEJS_HOME/bin:$PATH

# nodejs全局模块目录环境变量
export NODEJS_GLOBAL_HOME=/usr/local/nodejs/nodejs18/node_global
export PATH=$NODEJS_GLOBAL_HOME/bin:$PATH
  1. 点击按键“Esc”退出插入模式回到命令行模式

  2. 输入“:wq”回车保存修改并退出vim编辑器

  3. 重启服务器或执行source .bashrc刷新环境变量(改哪个刷新哪个)

  4. 使用命令export检查环境变量是否成功(下面这个图是以前的,我懒得截图了-.-)

image-20240107013128158

  1. 输入“node -v”验证,如果输出版本信息则配置成功

  2. 设置全局模块目录和缓存目录

    1
    2
    npm config set prefix "/usr/local/nodejs/nodejs18/node_global"
    npm config set cache "/usr/local/nodejs/nodejs18/node_cache"

​ 如何需要 cnpm自己百度安装

下载Twikoo

  1. 安装 Twikoo server: npm i -g tkserver
  2. 根据需要配置环境变量,所有的环境变量都是可选的
名称 描述 默认值
MONGODB_URI MongoDB 数据库连接字符串,不传则使用 lokijs null
MONGO_URL MongoDB 数据库连接字符串,不传则使用 lokijs null
TWIKOO_DATA lokijs 数据库存储路径 ./data
TWIKOO_PORT 端口号 8080
TWIKOO_THROTTLE IP 请求限流,当同一 IP 短时间内请求次数超过阈值将对该 IP 返回错误 250
TWIKOO_LOCALHOST_ONLY true时只监听本地请求,使得 nginx 等服务器反代之后不暴露原始端口 null
TWIKOO_LOG_LEVEL 日志级别,支持 verbose / info / warn / error info
TWIKOO_IP_HEADERS 在一些特殊情况下使用,如使用了CloudFlare CDN 它会将请求 IP 写到请求头的 cf-connecting-ip 字段上,为了能够正确的获取请求 IP 你可以写成 ['headers.cf-connecting-ip'] []
  1. 启动 Twikoo server: tkserver

  2. 访问 http://服务端IP:8080 测试服务是否启动成功

  3. 配置前置代理实现 HTTPS 访问(可以用 Nginx、负载均衡或 Cloudflare 等)

    设置环境变量

    老规矩 参考设置node的环境变量 在.bashrc文件后面加入

    1
    export TWIKOO_PORT=8087

    重启服务器或执行source .bashrc刷新环境变量(改哪个刷新哪个)

    使用命令export检查环境变量是否成功

    image-20240107015353711

后台启动

  1. Linux 服务器后台启动应该使用这个:nohup tkserver >> tkserver.log 2>&1 & disown
  2. 执行成功后出现的是类似于字符引用1[d3ak231]或者看看文件data没有生成
  3. 在哪个目录启动的,data和log就会出现
  4. 数据默认在 data 目录,请注意定期备份数据

配置 Nginx 反代(进阶)

现在基本都是 HTTPS 的时代,Twikoo 的默认服务不支持 HTTPS,所以还得用个反代来解决下这个问题。 下面这个是例子 看懂再修改,别硬搬

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
vim /etc/nginx/conf.d/twikoo.conf

BASH
server {
listen 443 ssl;
server_name twikoo.neko7ina.com;

ssl_certificate /home/syncthing/ssl/cert.pem;
ssl_certificate_key /home/syncthing/ssl/key.pem;

location / {
proxy_set_header Host $host;
proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Scheme $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:8087;
}
}

NGINX
nginx -t
nginx -s reload

BASH

需要注意的是如果碰到跨域问题,需要额外的配置来解决

CND和跨域(可选)

cdn

  1. 打开腾讯云 CDN 控制台,添加域名,加速域名为后续要使用的域名,加速类型为 CDN 网页小文件,开启 IPv6 访问(可选),源站类型为自有源、回源协议为 http,源站地址为 Twikoo 后端所在的服务器地址(即服务器的域名。需要在 DNS 控制台添加一条 A 记录,指向服务器 IP 地址),端口为 Twikoo 后端服务使用的端口(默认是 8080,可自行修改):
    2022-10-07-11-29-46

  2. 检查无误后点击确认添加,然后提交配置(推荐配置保持默认即可,后续有需要再慢慢细调):

    2022-10-07-11-30-22

  3. 最后一步是配置 CNAME,点击一键配置,确定。
    2022-10-07-11-31-06
    2022-10-07-11-31-38
    点击验证 CNAME 状态,显示已生效后,点击完成即可。
    2022-10-07-11-33-29

  4. 博客(针对butterfly主题前端配置)

    修改_config.butterfly.yml 中的相关配置项即可:

    1
    2
    3
    4
    5
    6
    YAML
    twikoo:
    envId: http://加速域名/
    region: #留空
    visitor: false
    option: #留空

跨域

跨域是什么百度,可以使用nginx 代理,也可以使用重定向,下面几种情况

  1. 因为个人的博客是放在腾讯云静态存储且套了 CDN,我直接在 CDN 上设置了 HTTP 响应头配置

    img

  2. 没有CDN配置Nginx代理,和cdn那里的一样,改成你自己的

  3. 我的Twikoo评论系统是http:// ip:端口这种 博客上(https://blog.aiheadn.cn/)https协议 思路如下

    nginx配置如下:

    1
    2
    3
    4
    5
    6
    7
    8
    location / {
    proxy_pass http:// ip:端口;
    add_header 'Access-Control-Allow-Origin' '*';
    add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
    add_header 'Access-Control-Allow-Headers' 'DNT,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header 'Access-Control-Max-Age' 1728000;
    }

参考文章

https://www.neko7ina.com/3pYN3eKz7vaZ1z.html

https://tokiame.cn/2022/10/04/Twikoo%E7%A7%81%E6%9C%89%E5%8C%96%E9%83%A8%E7%BD%B2%E7%AC%AC%E4%B8%80%E5%BC%B9%EF%BC%9A%E5%9F%BA%E7%A1%80%E7%AF%87/

https://tokiame.cn/2022/10/06/Twikoo%E7%A7%81%E6%9C%89%E5%8C%96%E9%83%A8%E7%BD%B2%E7%AC%AC%E4%BA%8C%E5%BC%B9%EF%BC%9A%E8%BF%9B%E9%98%B6%E7%AF%87/

https://twikoo.js.org/backend.html#%E7%A7%81%E6%9C%89%E9%83%A8%E7%BD%B2

https://juejin.cn/post/7111644029021405198

https://blog.csdn.net/qq_26572789/article/details/135418697