附件从本地 filestore 迁到对象存储,核心不是「改个配置」,而是历史 ir.attachment 的 store_fname/内容可回读、新上传落新后端、旧 URL 不裂、出问题可回退。本文给出迁移步骤、校验方法、CDN 与签名 URL 注意点。
迁移前盘点
统计附件数量、总容量、最大对象、是否含私有人事/财务文件。确认备份:库与 filestore 同一时刻(参见备份文)。选定对象存储桶权限:默认私有,应用用密钥读写。
推荐步骤
- 冷数据先迁移并校验哈希。
- 开启双写或切换读路径(按所用存储模块能力)。
- 抽检图片、PDF、邮件附件、电子签文件。
- 新上传抽样确认落在新后端。
- 保留旧后端只读窗口,观察期后再下线。
CDN 与签名 URL
CDN 强缓存可能导致替换附件仍看到旧文件——注意缓存键与失效策略。签名 URL 过期时间要覆盖业务场景(客户下载体量大文件)。公有读桶慎用,优先应用侧鉴权下载。
回退条件
错误率上升、大面积 403/404、性能不可接受时,切回旧读路径。回退演练要在预生产做过,不要第一次在生产试。
验收标准
- 随机 20 个旧链接可打开。
- 新上传落在新后端;备份文档含对象存储版本说明。
- 回退开关可用。
迁移观察期指标
切换读路径后 7–14 天观察:附件 404/403 率、平均下载耗时、对象存储费用、
签名 URL 过期投诉。每天随机抽 20 条历史 ir.attachment(含邮件与发票)做哈希/可读校验。
观察期保留旧后端只读;达标后再只读归档或下线。回退演练脚本放在运维仓库,
标题写清「附件存储回退」,与数据库回滚预案分开,避免误操作。
迁移窗口选低峰;迁移期间暂停大规模附件清理 cron,避免与拷贝互相抢 IO。
双写窗口的操作纪律
双写开启后,禁止手工改存储后端开关「试试看」。每日比对:新附件后端分布、旧附件可读抽样、 错误日志。对象存储权限最小:仅应用角色可 Put/Get,禁止公共 list。CDN 若启用,附件更新要带版本参数或主动刷新。 回退时先切读路径再观察,最后停双写。备份文档写明桶名、区域、版本控制开关、密钥保管人。
大附件(安装包、视频)是否允许上传要单独策略,避免对象存储费用失控。
对象存储费用异常上涨时,先查是否误开公共读或未设生命周期策略。
预生产勾选表需覆盖文章编号 325 全部验收点后再约生产窗口。
将文章编号 325 的配置变更记入发版说明,便于回滚对照。
将文章编号 325 的配置变更记入发版说明,便于回滚对照。
将文章编号 325 的配置变更记入发版说明,便于回滚对照。
将文章编号 325 的配置变更记入发版说明,便于回滚对照。
费用与生命周期
对象存储开启生命周期与版本控制;费用异常先查公共读与未删除多版本。
观察期指标达标再下线旧后端。回退脚本与库回滚分章。大附件单独策略。
每日抽样 20 条历史 ir.attachment。CDN 缓存键带版本。备份说明含桶与密钥保管人。
落地备忘(325-0):把本文验收项做成检查表,预生产逐条勾选并附截图;生产窗口前提交负责人签字。相关模型与字段以当前 Odoo 19 实例开发者模式显示为准。
落地备忘(325-1):把本文验收项做成检查表,预生产逐条勾选并附截图;生产窗口前提交负责人签字。相关模型与字段以当前 Odoo 19 实例开发者模式显示为准。
中国Odoo网|对照 Odoo 19 企业版附件存储实践:ir.attachment 双写校验,旧链接可回读,迁移可回退。