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
都没有就直接创建
编辑文件
-
使用vim编辑器修改
.bashrc
文件 -
点击按键"i",进入插入模式
-
下到文件末尾,添加两行,分别声明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
-
点击按键"Esc"退出插入模式回到命令行模式
-
输入":wq"回车保存修改并退出vim编辑器
-
重启服务器或执行
source .bashrc
刷新环境变量(改哪个刷新哪个) -
使用命令
export
检查环境变量是否成功(下面这个图是以前的,我懒得截图了-.-)
-
输入"node -v"验证,如果输出版本信息则配置成功
-
设置全局模块目录和缓存目录
arduinonpm config set prefix "/usr/local/nodejs/nodejs18/node_global" npm config set cache "/usr/local/nodejs/nodejs18/node_cache"
如何需要 cnpm自己百度安装
下载Twikoo
- 安装 Twikoo server:
npm i -g tkserver
- 根据需要配置环境变量,所有的环境变量都是可选的
名称 | 描述 | 默认值 |
---|---|---|
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'] |
[] |
-
启动 Twikoo server:
tkserver
-
访问
http://服务端IP:8080
测试服务是否启动成功 -
配置前置代理实现 HTTPS 访问(可以用 Nginx、负载均衡或 Cloudflare 等)
设置环境变量
老规矩 参考设置node的环境变量 在
.bashrc
文件后面加入iniexport TWIKOO_PORT=8087
重启服务器或执行
source .bashrc
刷新环境变量(改哪个刷新哪个)使用命令
export
检查环境变量是否成功
后台启动
- Linux 服务器后台启动应该使用这个:
nohup tkserver >> tkserver.log 2>&1 & disown
- 执行成功后出现的是类似于字符引用
1[d3ak231]
或者看看文件data没有生成 - 在哪个目录启动的,data和log就会出现
- 数据默认在 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
-
打开腾讯云 CDN 控制台,添加域名,加速域名为后续要使用的域名,加速类型为 CDN 网页小文件,开启 IPv6 访问(可选),源站类型为自有源、回源协议为 http,源站地址为 Twikoo 后端所在的服务器地址(即服务器的域名。需要在 DNS 控制台添加一条 A 记录,指向服务器 IP 地址),端口为 Twikoo 后端服务使用的端口(默认是 8080,可自行修改):
-
检查无误后点击确认添加,然后提交配置(推荐配置保持默认即可,后续有需要再慢慢细调):
-
博客(针对butterfly主题前端配置)
修改
_config.butterfly.yml
中的相关配置项即可:yamlYAML twikoo: envId: http://加速域名/ region: #留空 visitor: false option: #留空
跨域
跨域是什么百度,可以使用nginx 代理,也可以使用重定向,下面几种情况
-
因为个人的博客是放在腾讯云静态存储且套了 CDN,我直接在 CDN 上设置了
HTTP 响应头配置
, -
没有CDN配置Nginx代理,和cdn那里的一样,改成你自己的
-
我的Twikoo评论系统是http:// ip:端口这种 博客上(blog.aiheadn.cn/)https协议 思路如下
nginx配置如下:
rustlocation / { 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; }