twikoo:从MongoDB Atlas到本地部署

一.必备环境下载

1.安装 Node.js 环境

  1. 更新系统包索引
bash 复制代码
sudo apt update

2.添加 NodeSource 仓库

bash 复制代码
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
  • Ubuntu 默认源没有新版本 Node
  • NodeSource 提供官方维护的高版本 Node

3.安装 Node.js

bash 复制代码
sudo apt install -y nodejs

4.验证安装

bash 复制代码
node -v
npm -v

回显版本号即成功安装

2.npm 配置

设置国内镜像,因为默认 npm 源在国外

bash 复制代码
npm config set registry https://registry.npmmirror.com

3.MongoDB 数据库安装

  1. 安装 MongoDB
bash 复制代码
sudo apt update
sudo apt install -y mongodb-org

2.启动 MongDB

bash 复制代码
sudo systemctl start mongod
sudo systemctl enable mongod

3.进入 MongoDB Shell

bash 复制代码
mongosh
  1. 创建数据库和用户
sql 复制代码
use twikoo

db.createUser({
  user: "twikoo",
  pwd: "你的密码",
  roles: [
    { role: "readWrite", db: "twikoo" }
  ]
})

5.验证登录

bash 复制代码
mongosh -u twikoo -p --authenticationDatabase twikoo

根据提示内容输入密码即可

二、部署 tkserver(Twikoo 后端)

1.全局安装 tkserver(此处需要前面的 Node.js)

bash 复制代码
sudo npm install -g tkserver

2.启动 tkserver

bash 复制代码
MONGODB_URI="mongodb://twikoo:密码@127.0.0.1:27017/twikoo" HOST=127.0.0.1 PORT=8080 tkserver
  • MONGODB_URI:数据库连接字符串
  • HOST=127.0.0.1:只允许本机访问(安全)
  • PORT=8080:服务端口
名称 描述 默认值
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"] []

3.后台运行(即24 小时不间断运行)

方法一:nohup(官方推荐)

bash 复制代码
nohup env MONGODB_URI="mongodb://twikoo:密码@127.0.0.1:27017/twikoo" HOST=127.0.0.1 PORT=8080 tkserver > /var/log/tkserver.log 2>&1 &

方法二:systemctl(规范)

创建服务

bash 复制代码
sudo nano /etc/systemd/system/tkserver.service

内容:

bash 复制代码
[Unit]
Description=Twikoo Service
After=network.target

[Service]
Type=simple
Environment="MONGODB_URI=mongodb://twikoo:密码@127.0.0.1:27017/twikoo"
Environment="HOST=127.0.0.1"
Environment="PORT=8080"
ExecStart=/usr/bin/node /usr/lib/node_modules/tkserver/server.js
Restart=always
User=root

[Install]
WantedBy=multi-user.target

启动:

bash 复制代码
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl start tkserver
sudo systemctl enable tkserver

三、安装 Nginx

  1. 如果没有配置 Nginx,那么:
bash 复制代码
sudo apt install -y nginx

2.配置站点

bash 复制代码
sudo nano /etc/nginx/sites-available/twikoo
  1. 配置(以我的站点为例):

注意:要将子域名申请 ssl 证书,如果你是阿里云用户可以申请个人测试证书,这样才能通过 https 访问,避免中间人攻击

如图:

bash 复制代码
# HTTP 强制跳 HTTPS
server {
    listen 80;
    server_name twikoo.sirens007.cn;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name twikoo.sirens007.cn;

    ssl_certificate /粘贴你的证书路径.crt;
    ssl_certificate_key /粘贴你的私钥路径.key;

    # TLS 安全增强
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    # 关键:允许评论内容上传
    client_max_body_size 10m;

    location / {
        proxy_pass http://127.0.0.1:8080;

# 基础代理头
        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 X-Forwarded-Proto $scheme;

        # WebSocket 支持(Twikoo兼容)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # 超时优化
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }
}

4.启用配置:

bash 复制代码
sudo ln -s /etc/nginx/sites-available/twikoo /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

反向代理的目的是为了避免直接暴露 8080,并且浏览器会拦截

检验部署成功与否

如果运行出现什么问题,随时查看

1.检查 MongoDB

bash 复制代码
systemctl status mongod

2.检查 tkserver 是否运行

bash 复制代码
sudo systemctl status tkserver

4.检查 tkserver 是否监听 8080 端口

bash 复制代码
ss -tlnp | grep 8080

正常应该得到

5.检查 MongDB 是否监听端口

bash 复制代码
ss -tlnp | grep 27017

6.测试接口

浏览器访问:

bash 复制代码
https://你的站点

得到如图所示即表示 tkserver 没有问题,以上配置完后即可正常在博客主题中加入对应接口,类似以下:

bash 复制代码
twikoo: {
		envId: "https://twikoo.sirens007.cn",
		lang: SITE_LANG,
	},

至此,以上配置完后相应的评论数据可以通过各种可视化数据库查看,相应访问速度也会更快!

参考文章:

私有部署 - Twikoo 官方文档

以上是我关于twikoo的笔记分享,也可以关注关注我的Sirens-Blog🥰

感谢你读到这里,这也是我学习路上的一个小小记录。希望以后回头看时,能看到自己的成长~

相关推荐
蜗牛一步步往上爬4 分钟前
第六章 BMC常用的调试工具
服务器
小李不困还能学12 分钟前
VSCode_RemoteSSH_一直卡在下载服务器_解决教程
服务器·ide·vscode
瑞雪兆丰年兮12 分钟前
JavaWeb-day11-SpringBootWeb案例(文件上传)
java·运维·服务器·javaweb·oss
那明眸似水29 分钟前
云原生项目三:Docker秒级启动NextCloud个人网盘存储办公系统
linux·运维·docker·云原生·容器
小南家的青蛙2 小时前
微服务体系下DevOps运维岗位面试方案设计
运维·面试·职场和发展·devops
知已难寻12 小时前
Docker 入门:容器技术与 Docker 基础
java·运维·服务器·docker·云原生·容器
星恒随风19 小时前
MySQL 从零入门(三):表的约束详解
linux·服务器·数据库·笔记·mysql
Alluxio19 小时前
Alluxio + OCI:为 AI 工作负载实现亚毫秒访问延迟与可扩展吞吐
运维·数据库·人工智能·分布式·缓存·ai·语言模型
坤坤子吖1 天前
Linux网络编程:自定义应用层协议与 JSON 序列化
linux·服务器·网络·c++·笔记·json
Sayai1 天前
Neo4j 图数据质量检查实战:环路检测、孤立节点与连通分量,两条 Cypher 引出的数据体检清单(含变长路径性能陷阱)
运维·neo4j·图数据库·数据质量·cypher