news 2026/7/9 5:51:45

用 WorkBuddy 把两个 Node 网站搬上云:基金导航站 + Markdown 编辑器,宝塔托管实战复盘

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用 WorkBuddy 把两个 Node 网站搬上云:基金导航站 + Markdown 编辑器,宝塔托管实战复盘

隐私说明:文中域名、服务器地址、路径等均为示意占位,非真实信息。


一、引子:一个人 + 一个 AI 助手

最早这两个站都是"借壳"跑的——一个挂在 Coze 发布页里,一个用现成模板凑合。能用,但有两个痛点:

  • 数据不在自己手里:编辑器的文档存别人家,想导出、想加功能都不自由;
  • 想加后端能力时被卡住:基金站要聚合多个数据源、做缓存,纯静态壳搞不定。

于是我决定:自己写后端、自己部署。但说实话,一个人既要写代码、又要配服务器、还要和宝塔面板较劲,体力活不少。这趟我换了个打法——让 WorkBuddy 当我的"部署搭子",从写代码到 SSH 上线,大部分脏活交给它。


二、技术选型

两个站都用Node.js + Express做后端,前端是普通静态资源,由 Express 直接托管。

站点域名后端端口特点
基金数据导航站fund.example.comNode 服务(pm2:fund-app3000聚合基金数据、导航
Markdown 在线编辑器md.example.comExpress + markdown-it + DOMPurify + highlight.js3100编辑/预览、文档存data/docs.json

编辑器这块我提了体验要求,WorkBuddy 照着实现了:深色顶/底栏、浅色编辑区、编辑/预览一键切换、标签页、字数/段落统计、状态徽章。渲染用markdown-it,防 XSS 用DOMPurify,代码高亮用highlight.js


三、WorkBuddy 是怎么帮我落地的

这部分是本文重点。部署不是"写篇文章"那么简单,它拆成了四块,WorkBuddy 各管一摊:

1. 写代码
Express 服务(server.js)、编辑器前端 UI、/api/docs增删改查、渲染管线(markdown-it + DOMPurify + highlight.js)——这些它直接产出,我负责提需求和验收。

2. 写部署脚本
它生成了deploy_md.py:用 Python 的paramiko走 SSH,自动完成"连服务器 → 上传代码 →npm install→ pm2 启动 → 写 nginx 反代 → 健康检查"一条龙。以后改完代码,跑一下脚本就上线。

3. 干上线的脏活
SSH 连进服务器、装依赖、配 pm2 守护、写 nginx 反向代理、申请 HTTPS——这些重复且容易手抖的步骤,交给它执行比我自己敲更稳。

4. 排雷并沉淀成技能
宝塔面板的「Node 项目」注册有不少暗坑(下面详述),WorkBuddy 现场一个个趟平,还顺手把整套"SSH 部署 + 面板原生 Node 项目注册"沉淀成了一个可复用技能baota-ssh-deploy。下次换台服务器,直接调技能就行。

一句话:我是"产品经理 + 验收员",WorkBuddy 是"全栈工程师 + 运维"。分工清楚了,效率就上来了。


四、部署流程(以编辑器为例)

1. 本地能跑通

npm install npm start # server.js 监听 PORT,默认 3100

2. 在宝塔建 Node 项目

  • 面板 → 网站 → Node 项目 → 创建;
  • 运行目录/www/wwwroot/md.example.com/
  • 启动脚本node server.js,端口3100
  • Node 版本选v24.18.0;勾选开机启动、进程守护(底层即 pm2)。

3. 上传代码
server.jspublic/package.json等(排除node_modulesdata/docs.json),面板自动跑npm install

4. 域名 + 反向代理

  • 域名 A 记录解析到服务器公网 IP;
  • Node 项目里「绑定域名」,宝塔自动生成反代:md.example.com:80 → 127.0.0.1:3100
  • 申请 Let's Encrypt 证书,强制 HTTPS。

5. 验证
访问https://md.example.com/healthz返回 200 即可。基金站流程一致,端口3000、域名fund.example.com


五、两个站的差异与同机要点

  • 端口隔离:同机多 Node 服务,各自占不同端口(3000 / 3100),nginx 按域名反代,避免抢端口。
  • 存储目录属主:编辑器data/由 root 写入,运行用户设为root;基金站用www,权限隔离、互不影响。
  • 端口兜底server.js写成PORT = parseInt(process.env.PORT) || 3100——宝塔启动脚本不一定注入 PORT,留默认端口能避免和已占用的 3000 冲突。

六、踩过的坑(WorkBuddy 现场趟平的)

  1. 端口冲突:基金站先占了 3000,编辑器若也用 3000 起不来。固定分配 + 代码兜底解决。
  2. 宝塔 Node 版本:面板自带版本管理器,选对v24.18.0,否则依赖装不上。
  3. 面板项目名正则:项目名只接受^\w+$,带点域名要先建md_editor再改名为域名,否则创建被拒。
  4. 域名绑定两步:先project_add_domain加域名,再bind_extranet开外网映射,才生成面板托管的反代配置。
  5. 上传别带机密node_modules和已有data/docs.json要排除,别把环境数据和依赖传上去。

七、小结

两个站跑通后,维护成本很低:本地改 → 传代码 → 重启。而这次最大的体感变化是——有 WorkBuddy 当搭子,部署从"硬扛"变成了"验收"

核心经验一句话:多个 Node 服务同机部署,用「宝塔 Node 项目 + pm2 守护 + nginx 按域名反代 + 端口隔离」最省心;把重复流程交给 AI 助手,人只管提需求和验收。

如果你也在折腾个人网站部署,或者想试试让 AI 助手帮你干运维脏活,欢迎在评论区聊聊 👇


(本文由 WorkBuddy 辅助撰写与部署,部署过程中的服务器密码等敏感信息均已脱敏,仅保留可复用流程与配置思路。)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/9 5:49:09

Cargo 发布到 crates.io:从命名、文档到 CI 自动发布的完整流水线

Cargo 发布到 crates.io:从命名、文档到 CI 自动发布的完整流水线 一、第一次 cargo publish 时踩的三个坑 第一次把自己的库发布到 crates.io 那天,我记得很清楚。先是名字被别人占了,然后 cargo publish 提示 README.md 不存在,…

作者头像 李华
网站建设 2026/7/9 5:48:26

逆向解析电商平台h5st参数:从AES加密到完整Node.js复现

1. 项目概述:从“黑盒”到“白盒”的逆向旅程 最近在分析一些电商平台的移动端数据接口时,不可避免地遇到了一个名为 h5st 的参数。这个参数就像一把加密的锁,横亘在自动化数据采集或业务逻辑分析的道路上。它通常出现在 POST 请求的 bo…

作者头像 李华
网站建设 2026/7/9 5:46:57

2026 绩效新范式:KPI 与 OKR 并行,AI 释放 HR 战略价值

2026年企业绩效管理正在经历一场系统性重构。核心趋势已经非常清晰:年度考核正在被持续反馈机制替代,绩效打分的核心目的正在从合规留档转向人才洞察,AI协同正在重塑管理者与员工的绩效对话方式。据人力资源科技行业报告,已完成绩…

作者头像 李华
网站建设 2026/7/9 5:46:02

GPT-2/3 Zero-Shot与Few-Shot实战:5个Prompt模板构建与效果对比

GPT-2/3 Zero-Shot与Few-Shot实战:5个Prompt模板构建与效果对比在当今AI技术快速发展的浪潮中,大型语言模型如GPT系列已成为开发者工具箱中不可或缺的利器。然而,如何充分发挥这些模型的潜力,特别是在零样本(Zero-Shot…

作者头像 李华
网站建设 2026/7/9 5:44:43

养殖场数字化管理系统:精准养殖,有效提升畜禽出栏品质

养殖场数字化管理系统解决方案,一套依托物联网、大数据、智能硬件、云平台打造的全流程智慧养殖解决方案,替代传统人工台账、经验管理,实现养殖环境、畜禽饲喂、疫病防控、生产溯源、能耗、人员、进销存全链路数字化、自动化、可视化管控&…

作者头像 李华
网站建设 2026/7/9 5:40:39

Claude 中转站怎么选?一篇讲透 API 中转站的稳定性、成本与安全

对于很多开发者和中小团队来说,Claude 模型已经不只是一个聊天工具,而是逐渐进入代码生成、内容生产、自动化工作流和业务协同等更深层的使用场景。随着调用频率提升,大家真正关心的问题也从“能不能用”,转向“能不能稳定长期用”…

作者头像 李华