折腾记:从自建邮局到换装 AI 助手,这几天的项目复盘(AI书写)

这几天几乎是在"折腾"里度过的。

从一台服务器上自建邮局开始,到给博客修插件、写安卓 App、换装 AI 助手……看起来是几件不相干的事,但做完回头看,它们其实共用同一套方法论。这篇就当作一次复盘,把过程和学习记下来。


一、自建邮局:把"发信"这件小事彻底搞明白

起因很简单——想要一个完全开源、支持 Exchange(ActiveSync)、有 webmail、还中文友好的邮箱。

踩过的坑比想象中多:

  • "能收能发"和"不被人当垃圾"是两回事。 本地 Postfix 跑起来不等于对外可投递。SPF、DKIM、DMARC 三件套缺一不可,还得有正确的 PTR 反解析。最后用邮件检测工具逐项验证,看到 SPF/DKIM/iprev 全 pass 才敢说"成了"。
  • 出站和入站可以拆开。 用一台带 PTR 的中继服务器专门负责往外发,本地只管收和内部投递——这个架构比想象中清爽。
  • 管理入口要留后路。 管理员密码、别名、DKIM 密钥这些,一定要落在文档里;不然三天后自己都记不住。

收获一句话:邮件系统的难点从来不是"装软件",而是"让全局的可信度成立"。


二、给博客修插件:四个 Bug,一条都没有白踩

博客用的是 Typecho,装了插件之后前台一直不出订阅入口。于是一路追下去,居然揪出四个独立的问题:

  1. 类声明写法导致按钮消失。 PHP8 会把完整命名空间当一整个 token,主题的解析逻辑只认短名,于是插件的启用/配置/停用按钮全被判定为"不可用"。加一行 use 导入就解决了。
  2. 数据库接口调用写错。 新旧 ORM 的 insert() 签名不一致,调用直接抛异常又被静默吞掉,前台只显示一句含糊的"订阅失败"。改成正确的参数形式即可。
  3. CDN 缓存了 404。 站点挂了 CDN,动态接口没带缓存指令,旧结果被缓存下来。补上 no-store 才恢复。
  4. 地址拼接出现了"双地址"。 某个工具函数会把绝对路径再拼一次前缀,最终请求 URL 变成了两个域名叠在一起,自然 404。

修完之后,前台订阅、后台测试邮件全部打通。

收获一句话:一个"不工作"的现象背后,往往叠着好几个"各自独立"的 bug。得有耐心一个层一个层剥。


三、两个安卓 App:从"能跑"到"能用"之间隔着真实世界

这几天顺手做了两个自用的小 App:一个记油耗、一个读车载 OBD 诊断。

  • 离线优先是对的。 本地先存、联网再同步,用户体验立刻不一样。
  • "数据不能丢"是硬约束。 于是写了数据库自动补列逻辑,升级版本不丢历史数据。
  • 真实设备永远比模拟器更"野"。 车机适配器返回的数据会带一堆奇怪的帧头前缀,解析器必须先清洗再解析——这种问题只有接上真机才会暴露。
  • 升级必须用同一签名。 否则用户装新版得先卸载,还得重登同步。这个教训值得刻在墙上。

收获一句话:Demo 到产品之间,隔着的全是"边界情况"。


四、换装 AI 助手:同一件事,可以有很多种做法

把服务器上原来那套 AI 网关换成了另一款开源助手,整个过程也算一次选型练习:

  • 先看清"它到底是什么"再动手。 同名项目在生态里可能有好几个,动手前先确认官网、仓库、许可证,别把 A 当成 B。
  • 容器化 + 反向代理 + 自动签证书,是一套可复用的最小部署模板。
  • 安全要主动收紧:端口只绑本地、由前置代理统一暴露 443、强制 HTTPS、限制来源。默认配置永远不要直接上线。

收获一句话:选型不是选"最好",而是选"最匹配当下需求 + 自己维护得动"。


五、几种"顺手做的"小改进

  • 日志告警从"每天一封"改成"只在异常时提醒"。 用一份基线做对比,只有明显偏离才发信,噪音立刻降下来。
  • 登录失败提示改成友好的中文文案,把"技术错误"翻译成"人话"。
  • 被防火墙误封时先查封禁记录,很多"网站打不开"其实是本机 IP 进了黑名单,解封即可。

这些小改动单看不起眼,但它们共同的主题是:让系统更"有人情味"——出问题时给清楚的反馈,没事时别打扰。


这几天通用的六条经验

  1. 先搞清对象是什么,再动手。 (尤其是复用一个已有域名/服务前,务必确认它原本的用途。)
  2. 硬事实要对官方来源核实。 本地打包的文档会过时,踩过这个坑。
  3. 一个故障,往往是一堆 bug 叠出来的。 分层排查,别急着下结论。
  4. "能跑"不等于"能用"。 边界情况、真实设备、升级路径,才是产品力所在。
  5. 默认不安全。 安全配置要主动做,而不是等出事。
  6. 写下文档。 三天后的自己,和陌生人没差。

写在最后

折腾的乐趣,大概不在于最后那个"完成了",而在于过程中不断发现"原来是这样"。

这几天学到的东西,技术层面各有各的,但底层其实是一回事:面对不确定,保持耐心,一层一层把问题拆开,然后老老实实记录。

只要还在折腾,就还在进步。

—— 本文由AI根据这几天的项目要求复盘所写。

✉

订阅「曾墨」更新

留下邮箱,提交后到邮箱点击确认链接完成订阅,可随时一键退订

人机验证9 + 4 =

😊
提交

评论区

共 7 条评论
  1. 头像
    Tourists Lv1
    提问:为什么主页的定位只有首次进入的时候会显示访问地址后面刷新页面不会再提示定位信息,是这样设计的还是说设计缺陷
    1天前 湖南省岳阳市联通
    1. 头像
      曾墨 博主
      @Tourists是这样设计的,弹出式欢迎卡片,同一cookie下仅第一次弹出。
      1天前 湖南省岳阳市电信
  2. 头像
    文章不错非常喜欢,支持一下
    10月6日 广西河池市联通
  3. 头像
    前端时间是好像看到你博客rss订阅异常
    10月6日 湖南省岳阳市联通
    1. 头像
      曾墨 博主
      @全局变量京东云上买的一年期的主机到期了搞得忘记了。
      10月6日 湖南省岳阳市电信
  4. 头像
    珍惜 Lv1
    😮现在AI真是无所不能。
    10月4日 湖南省岳阳市电信
    1. 头像
      曾墨 博主
      @珍惜让菜鸟体验当大佬的感觉🤔
      10月6日 湖南省岳阳市电信