部署目录的核心设计,是按生命周期和写入职责划分内容。发布物应可替换,配置应独立于版本,持久数据必须跨版本保留,日志则需要独立容量与保留策略。这样的边界让升级和回滚能只切换应用代码,而不意外覆盖运行状态。
可将每次发布放入独立版本目录,例如 /opt/app/releases/版本号,并用受控的当前版本引用供服务启动。部署时先写入新版本,再校验文件完整性和权限,最后切换引用并重启或重新加载服务。保留有限数量的旧版本便于回滚,但清理策略应识别当前服务正在使用的路径。
发布目录应尽量只读。如果程序需要生成缓存、上传文件或运行状态,不要写回发布物目录;否则代码目录会在运行中漂移,版本内容难以复现,也会让回滚把新产生的数据一起覆盖。
环境差异较大的配置放在版本目录之外,由部署流程明确引用。敏感凭据通过受控的秘密管理机制提供,避免进入代码仓库、普通启动参数和应用日志。运行账号只应读取必要配置,不能拥有修改发布物或秘密源的额外权限。
用户上传、业务状态和数据库文件属于持久数据,应放在独立数据路径或专用存储中,并明确备份、恢复和容量管理责任。应用启动时检查目标目录确实挂载且属主正确,避免存储未挂载时在根文件系统下创建同名目录。
日志可以写到系统日志收集器,也可以写入独立目录;关键是明确轮转、保留、权限和磁盘告警由谁负责。临时文件使用专门目录并设置清理周期,缓存与持久业务数据分开,避免清理临时内容时误删需要恢复的数据。
/opt/app/releases/:只读发布物,可并存多个版本。/etc/app/:环境配置,权限受控。/var/lib/app/:持久运行数据,纳入备份。/var/log/app/:日志,配置轮转与保留。验收不能只看目录是否存在。用服务实际运行账号检查可读写边界,确认服务启动时引用预期版本和配置;部署新版本后验证持久数据仍在,回滚后旧版本仍能读取兼容数据。检查日志可持续写入并按策略轮转,临时文件清理不会触及业务状态。将目录映射、属主权限和回滚步骤记录下来,后续发布才能沿用同一契约。