linux自建 Twikoo 评论系统私有部署保姆级(非Docker)

ps:原文地址 ~

前言

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

下载node

下载

进入nodejs nodejs官方网站

找到需要下载的版本号,右键复制出下载地址 nodejs.org/dist/v18.12...

链接服务器

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

进入目录解压

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

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

首先应该先进入目录

bash 复制代码
cd  /usr/local/

新建一个nodejs的目录

arduino 复制代码
mkdir nodejs

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

bash 复制代码
cd nodejs
wget https://nodejs.org/dist/v18.12.1/node-v18.12.1-linux-x64.tar.xz

tar xf 解压文件

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

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

bash 复制代码
mv node-v18.12.1-linux-x64 nodejs18
cd nodejs18 #进入目录检查一下

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

bash 复制代码
mkdir -p /usr/local/nodejs/nodejs18/node_global
mkdir -p /usr/local/nodejs/nodejs18/node_cache

配置环境变量

跳回最初目录然后进入root

bash 复制代码
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目录)

bash 复制代码
# 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检查环境变量是否成功(下面这个图是以前的,我懒得截图了-.-)

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

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

    arduino 复制代码
    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文件后面加入

    ini 复制代码
    export TWIKOO_PORT=8087

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

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

后台启动

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

配置 Nginx 反代(进阶)

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

ini 复制代码
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,可自行修改):

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

  3. 最后一步是配置 CNAME,点击一键配置,确定。 点击验证 CNAME 状态,显示已生效后,点击完成即可。

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

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

    yaml 复制代码
    YAML
    twikoo:
      envId: http://加速域名/
      region: #留空
      visitor: false
      option: #留空

跨域

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

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

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

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

    nginx配置如下:

    rust 复制代码
    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;
    }

参考文章

www.neko7ina.com/3pYN3eKz7va...

tokiame.cn/2022/10/04/...

tokiame.cn/2022/10/06/...

twikoo.js.org/backend.htm...

juejin.cn/post/711164...

blog.csdn.net/qq_26572789...

相关推荐
昨天;明天。今天。3 分钟前
案例-任务清单
前端·javascript·css
zqx_71 小时前
随记 前端框架React的初步认识
前端·react.js·前端框架
惜.己2 小时前
javaScript基础(8个案例+代码+效果图)
开发语言·前端·javascript·vscode·css3·html5
什么鬼昵称2 小时前
Pikachu-csrf-CSRF(get)
前端·csrf
长天一色2 小时前
【ECMAScript 从入门到进阶教程】第三部分:高级主题(高级函数与范式,元编程,正则表达式,性能优化)
服务器·开发语言·前端·javascript·性能优化·ecmascript
NiNg_1_2342 小时前
npm、yarn、pnpm之间的区别
前端·npm·node.js
秋殇与星河3 小时前
CSS总结
前端·css
BigYe程普3 小时前
我开发了一个出海全栈SaaS工具,还写了一套全栈开发教程
开发语言·前端·chrome·chatgpt·reactjs·个人开发
余生H3 小时前
前端的全栈混合之路Meteor篇:关于前后端分离及与各框架的对比
前端·javascript·node.js·全栈
程序员-珍3 小时前
使用openapi生成前端请求文件报错 ‘Token “Integer“ does not exist.‘
java·前端·spring boot·后端·restful·个人开发