把三个站点拆开:一次域名与部署的整理
事情是这样的:我一台服务器上跑着三个互不相干的站点——一个给孩子用的识字站,一个整理古籍药酒的资料库,还有一个我自己写公众号时用的出稿工具。它们最初都被塞在同一个域名下面,靠不同的路径区分。
一开始觉得挺省事,一个域名、一份证书、一套配置。但用着用着问题就来了:改其中一个站点的配置,很容易顺手动到另一个,因为它们的路由规则缠在一起;做搜索收录时,搜索引擎也搞不清这几个路径到底算一个站还是三个站;更麻烦的是备份和排查——出了故障,我得先想清楚这条路径到底属于谁。
于是我决定把它们拆开:主域名留作我自己的入口页,其余三个各给一个子域名,域名分开、数据分开,谁坏都不影响别人。
拆分时踩到的第一件事:配置文件是被挂载进去的
服务是用容器跑的,反代用 Caddy。改完 Caddy 配置之后重启容器,按理说新配置应该生效了——但偏偏没有。查了半天才明白:这个配置文件是以「单个文件」的形式挂载进容器的。宿主机上如果重新拉取代码,文件被替换成了一个新文件,而容器里挂载的仍然是老文件(挂载记录指向的是原来那个文件本身)。这种情况下重启是没用的,必须把容器整个重建,让它重新做一次挂载。
这个坑很隐蔽,因为配置看起来完全正确,日志也不报错,只是「改了没反应」。后来我把「重建 Caddy 容器」这一步固定写进了部署脚本,避免下次再忘。
第二件事:静态资源的缓存反而害了我
为了让页面打开快一点,我给静态资源设了很长的强缓存,一周内浏览器直接用本地副本。这在页面不变的时候是好事,可一旦我改了样式或脚本,老访客看到的还是旧版本,而且不会主动去问服务器有没有更新——因为浏览器认为「这个文件一周内都有效」。
解决方案是在资源地址后面带一个版本号:每次部署时把版本号替换成新的,文件内容变了、地址也变了,浏览器自然会重新下载。这样既能保留长缓存的好处,又不会出现「我明明改了,用户却没看到」的尴尬。
顺带收尾的事情
拆完之后我把旧路径做了跳转,保证以前收藏过链接的人还能被送到新地址;未知的路径则统一返回一个自己写的 404 页,而不是反代默认的空白错误页。数据库和上传文件都各自独立,互不干扰。
回头看,这次拆分没有用到什么高深的技术,更多是一次「整理」:把本来就该分开的东西分开。麻烦的地方不在写代码,而在照顾那些已经存在、正在被使用的旧链接和旧习惯。做完之后维护起来确实轻松了不少——至少再出故障时,我不用先猜这条路径属于谁。
← 返回文章列表