同一台小机器,我又塞进去一套资产管理系统
说实话,最开始没打算做这么完整。
机器还是那台阿里云 ECS,1.8G 内存,博客和蜜罐已经占着了。我只是想把电脑、显示器这些东西从表格和聊天记录里捞出来,让领用、归还、报修有个地方走。结果越做越深,权限、滑块、二次验证、发布别冲库……一个都躲不过。
这篇文章不写教程体。就是我这段时间真实碰到的事,以及后来怎么收的。开源脱敏版在 GitHub:LanSang11/asset-admin。现网入口是 asset.lansame.top。
一、为什么硬往这台机器上塞
事情是这样的:我不想再为这套东西加钱扩容,也不想在服务器上 Docker 构建前端。博客占着 80/443,蜜罐占着自己那一摊,资产系统只能原生跑——本机构建 Vue 的 dist,云端 Python 3.11 虚拟环境 + uvicorn,Nginx 反代。
证书跟博客共用 443,资产系统单独一个 server_name。博客站点文件这次没动,也不该动。
说白了就是一句话:同一台小机器,能分开的服务就分开,别互相踩。
二、技术选型,我没换栈
后端 FastAPI,前端 Vue 3 + Naive UI,库是 SQLite。有人会觉得 SQLite 上生产不严肃。我的判断很简单:一台设备量不大的内部台账,单文件库好备份、好回滚,也少一个 Redis/MySQL 来抢这 1.8G。
后来补过知识库、只读 AI 抽屉,仍然没上独立向量库。词面检索先能用,比假装有 embedding 强。
有一件事我刻意没做:把整站换成更花的后台模板。能力可以吸收,皮不要换。换栈的成本,这台机器和我这点时间都扛不住。
三、安全这块,我是被教训出来的
写资产页面不难。难的是你一上公网,默认就会被扫。
登录我做成了每次必过滑块,一次性票据,过期就作废。JWT 有效期最后收到 2 小时。OpenAPI 对匿名访客不吐 JSON schema,返回的是前端页面。前端 source map 生产构建直接关掉——混淆当不了主防线,但也不必把源码地图挂在公网。
角色就四套:超管、管理员、部门主管、普通员工。菜单能点,不代表数据能看。主管看本部门,员工看自己的;闲置资产的价格、序列号这类字段,不该看的人时间线里也没有。这个坑我踩过:菜单权限对了,读接口还是按“有 API 权 = 全公司数据”在吐。修完才算隔离。
高危操作另走二次验证,策略一共 18 项。导出员工这种事,管理员可以拿明文建账,但员工互看电话必须是空白,不是打几个星号假装保护。星号还能猜,空白至少不会让人把假号码抄走。
知识库有个更阴的坑。embedding 失败后如果静默写成哈希假向量,表面还能搜,实际全是垃圾命中。这种比直接报错更危险,因为你以为系统在工作。后来我改成词面为主,禁止再走这条捷径。
四、发布,我差点把自己的生产库冲掉
这是我觉得最该单独拿出来讲的。
代码在本地改,云端是运行时真相,业务数据以云端库为准。发布脚本默认只换 app 和 web/dist,不覆盖 SQLite。哪次要“含库同步”,必须自己再确认一次。
SQLite 还有个细节:停服务的时候 WAL 会收口进主文件,备份哈希跟发布前“正在用的那个文件”可能不一样。别看见哈希变了就以为冲库了。判断标准是:停服后的在用库,跟你刚打的备份,是不是同一份。
发布前先在云端拷一份 db/backups/。服务起来后看启动日志,有没有 traceback,新表是不是 CREATE TABLE IF NOT EXISTS 建出来的空表。资产条数、员工条数对不上,就停,别接着点。
五、后来补的那些“看起来很小”的东西
业务能跑之后,真正烦人的都是小口子。
导入资产时,表头跟导出对不上就等于没填。我后来加了有限列别名、预览表和失败行下载,取消写入不能偷偷 commit。扫码页点报修、调拨,以前只是跳到列表,编号还得自己填,现场根本没法用。登录第二步如果把验证器下载说明堆在按钮前面,手机上会直接把“验证并登录”挤出屏幕——这不是安全功能,这是登录事故。
再往后是管理员表格列显隐、强制下线别人的会话、导出文件头带上是谁何时导的。最后补的是资产和员工关键字段的改前改后:独立一张对照表,只记真正改过的白名单字段,手机号入库前就掩码。活数据还是当前这一行,对照账不是 Git,也不是整库备份。
这些东西单独看都不炫。合在一起,才像一个能天天用的系统,而不是演示稿。
六、我明确没做的
页面水印、空闲锁屏、换肤工作室,不做。云 WAF、短信、商业指纹,默认也不做,那是加钱项。MySQL 迁移可以以后再说,现在没有必要为了“看起来更正式”把单文件库拆掉。
博客继续是博客。资产系统再怎么改,也不该去碰 lansame.top 的站点文件和证书。这次把文章补上,是另外一件事,跟发布资产代码不是同一条流水线。
七、说了这么多,其实核心就一点
公网小机器上的业务系统,危险通常不在你少写了哪个页面,而在你把演示习惯带进了生产:冲库、过宽的读接口、假向量、把调试信息留给匿名访客。
能自己备份、能只发代码、能把权限收回到行和字段,这套东西才敢留在公网。剩下的功能,用到了再加。
关于作者:Lansame,网络安全爱好者,个人博客 lansame.top
相关链接:
- 开源脱敏仓库:github.com/LanSang11/asset-admin
- 现网入口:asset.lansame.top
- 同机蜜罐笔记:7天捕获4197次攻击
如果这篇文章对你有帮助,欢迎分享给更多人!
部分信息可能已经过时






