全是人才宝藏群工具箱 - 部署指南

Linux + 宝塔面板 | 从零到上线,跟着走就行

目录

  1. 在 Windows 上打包部署文件
  2. 宝塔面板安装 Node.js 22
  3. 宝塔面板安装 PM2 管理器
  4. 上传项目到服务器
  5. 运行部署脚本
  6. 配置 Nginx 反向代理
  7. 访问安装向导完成配置
  8. 日常维护命令
  9. 常见问题
1在 Windows 上打包部署文件

在你的电脑上,进入项目目录 toolbox/,双击运行打包脚本:

> 双击 deploy\pack-deploy.bat

脚本会自动:

  1. 删除 data/toolbox.db(数据库文件,含测试数据)
  2. 删除 server/config.local.js(本地配置,含密钥)
  3. 打包生成 toolbox-deploy-YYYYMMDD.zip
这个 zip 包里有什么?
所有代码文件(server/、public/、install/、docs/、package.json、start.sh),但不含数据库、不含管理员账号、不含 API 密钥。这些都在安装向导时重新配置。
打包完成后,你会得到一个 zip 文件,这就是要上传到服务器的部署包。
2宝塔面板安装 Node.js 22 宝塔操作

登录宝塔面板,按以下步骤操作:

  1. 左侧菜单点击 软件商店
  2. 搜索框输入 Node.js版本管理器
  3. 找到「Node.js版本管理器」,点击 安装
  4. 安装完成后,点击 设置 进入版本管理器
  5. 点击 安装新版本,选择 v22.x.x(选最新的 22 版本)
  6. 等待下载安装完成(约1-2分钟)
宝塔面板路径
软件商店 → 搜索 "Node.js" → 安装 "Node.js版本管理器" → 设置 → 安装 v22 版本
注意:本项目依赖 Node.js 22 内置的 SQLite 模块,不能用 Node.js 18 或更低版本。必须装 22 以上。
3宝塔面板安装 PM2 管理器 宝塔操作

PM2 是 Node.js 的进程守护工具,保证服务崩溃后自动重启、开机自动启动。

  1. 仍在 软件商店
  2. 搜索 PM2管理器(或 PM2)
  3. 找到「PM2管理器」,点击 安装
  4. 安装完成即可,不需要额外配置
宝塔面板路径
软件商店 → 搜索 "PM2" → 安装 "PM2管理器"
PM2 装好后,你的 Node.js 服务就能 7x24 运行,崩了自动重启,开机自动启动。
4上传项目到服务器

有两种方式上传,选你顺手的:

方式一:宝塔文件管理(推荐新手)

  1. 宝塔面板左侧点击 文件
  2. 进入 /www/wwwroot/ 目录
  3. 点击 上传,把 zip 包传上去
  4. 上传完成后,右键 zip 文件 → 解压 到当前目录
  5. 解压后会有一个 toolbox/ 或类似文件夹,进入确认里面有 package.json

方式二:宝塔终端 + 命令行

# 宝塔面板 -> 终端,依次执行: $ cd /www/wwwroot $ # 用 scp 或其他方式把 zip 传上来后: $ unzip toolbox-deploy-*.zip -d toolbox $ cd toolbox $ ls # 确认看到 package.json server/ public/ install/
假设项目最终路径是 /www/wwwroot/toolbox,后续命令都基于这个路径。如果你放在了别的路径,自行替换。
5运行部署脚本 命令行

在宝塔终端(或 SSH)中,进入项目目录运行部署脚本:

$ cd /www/wwwroot/toolbox $ bash deploy/deploy.sh

脚本会自动完成:

  1. 检查 Node.js 版本是否 22+
  2. 检查/安装 PM2
  3. npm install 安装项目依赖
  4. 创建 data 目录
  5. 用 PM2 启动服务(进程名 toolbox
  6. 设置开机自启

看到 部署完成! 就说明服务已经跑起来了。

此时服务在 http://127.0.0.1:80 运行,但外部还访问不了,需要下一步配置反向代理。

如果 deploy.sh 没有执行权限:

$ chmod +x deploy/deploy.sh && bash deploy/deploy.sh
6配置 Nginx 反向代理 宝塔操作
注意:本服务默认监听 80 端口。宝塔面板通常自带 Nginx 也会占用 80 端口。

方案 A(推荐):直接访问,不用 Nginx
停掉 Nginx 即可,服务直接监听 80,外部可直接访问:
systemctl stop nginx && systemctl disable nginx
跳过本步骤,直接去第 7 步。

方案 B:用 Nginx 反向代理
把 Node 服务端口改成 3000(安装向导里改),Nginx 监听 80 转发到 3000。按下面步骤操作:

让外部通过域名/IP访问你的服务,需要配置 Nginx 反向代理。

  1. 宝塔面板左侧点击 网站
  2. 点击 添加站点
  3. 域名填写你的域名(如 toolbox.example.com)或直接用服务器 IP
  4. 根目录选择 /www/wwwroot/toolbox
  5. PHP版本选 纯静态(不需要 PHP)
  6. 点击 提交 创建站点

创建好站点后,配置反向代理:

  1. 在网站列表中,点击你刚创建的站点 设置
  2. 找到 反向代理 标签
  3. 点击 添加反向代理
  4. 代理名称:toolbox
  5. 目标URL:http://127.0.0.1:80
  6. 发送域名:$host(默认即可)
  7. 点击 提交
宝塔面板路径
网站 → 添加站点 → 填域名 → 创建 → 站点设置 → 反向代理 → 添加 → 目标URL填 http://127.0.0.1:80
配置完成后,访问 http://你的域名 就能看到工具箱首页了。

如果需要 HTTPS(推荐):

  1. 站点设置中找到 SSL 标签
  2. 选择 Let's Encrypt → 申请免费证书
  3. 申请成功后开启 强制HTTPS
7访问安装向导完成配置

服务跑起来了,但还没初始化。打开浏览器访问:

浏览器地址栏输入: http://你的域名/install

按安装向导填写:

  1. 管理员账号:你想用的管理员用户名(3-20位字母数字下划线)
  2. 管理员密码:至少8位,必须包含字母+数字
  3. API开发者ID:已预填 10007301(接口盒子账号ID)
  4. API开发者KEY:已预填 d46096657dd63fd429a09fc315237852(接口盒子密钥)
  5. 服务端口:默认 80,不要改

点击 开始安装,看到"安装成功"就完成了。

安装完成后,访问 http://你的域名 是用户前台,http://你的域名/admin 是管理后台。用刚才设置的管理员账号密码登录。
安装完成后需要重启服务让配置生效:
pm2 restart toolbox
日常维护命令

在宝塔终端或 SSH 中执行:

查看服务状态

$ pm2 status toolbox

查看实时日志

$ pm2 logs toolbox $ pm2 logs toolbox --lines 100 # 最近100行

重启服务

$ pm2 restart toolbox

停止服务

$ pm2 stop toolbox

备份数据库(数据库就一个文件,直接复制)

$ cp /www/wwwroot/toolbox/data/toolbox.db /www/backup/toolbox-$(date +%Y%m%d).db

更新代码(上传新代码后)

$ cd /www/wwwroot/toolbox $ npm install --production # 如果依赖有变化 $ pm2 restart toolbox
常见问题

Q: 访问 /install 提示"系统已安装"怎么办?

说明数据库里已有安装记录。如果你想重新安装,删除数据库文件后重启:

$ pm2 stop toolbox $ rm /www/wwwroot/toolbox/data/toolbox.db $ pm2 start toolbox $ # 然后重新访问 /install

Q: 端口 80 被占用了怎么办?

说明 Nginx 或其他 Web 服务正在占用 80 端口。两个方案:
1. 直接用宝塔反向代理到 80 端口(推荐)——此时 Node 服务改用其他端口如 3000,Nginx 监听 80 转发
2. 停掉 Nginx:systemctl stop nginx,让 Node 直接监听 80

Q: 管理员密码忘了怎么办?

删除数据库重新安装(会清空所有数据),或者通过宝塔 phpMyAdmin / 命令行直接改数据库中的密码哈希。

Q: API 接口调用失败怎么办?

检查 server/config.local.js 中的 apiCredentials.idapiCredentials.key 是否正确。也可以在管理后台的系统设置中修改。

Q: 服务器重启后服务没有自动启动?

$ pm2 startup # 生成开机自启脚本 $ pm2 save # 保存当前进程列表
全是人才宝藏群工具箱 v1.1.0 | 如有问题请在群里提问