Docker里跑的ERPNext升级前怎么备份,数据和配置要备哪几样
公司那台老一体机上用 docker 跑着 ERPNext 管进销存,从 v14 升 v15 的教程看了一堆,没人敢动手——万一升级翻车,账目和单据找不回来就是大事故。想先备份再升级,却发现连"数据到底存在哪"都说不清:容器里?数据库里?还是哪个目录里?
原因分析
容器化应用的备份难,难在数据和容器是分离的:ERPNext(Frappe 架构)的站点数据放在数据库容器里,上传的附件和站点配置放在 sites 卷里,数据库密码等连接信息在环境配置文件里。三样缺一不可——只拷了 sites 目录没有数据库导出,恢复出来的站点是空壳;数据库备份有了但环境配置丢了,新栈起不来。很多人以为"把容器停了、把目录拷一份"就是备份,恰恰漏掉应用自身的导出这一层。升级的正规路径也不是把旧数据库直接挂到新版镜像上硬升,而是"备好包、新起一套、恢复数据"。
分步解决
- 盘点数据都落在哪:对着 docker-compose 配置把三类位置找齐——数据库容器(MariaDB)、文件卷(sites 目录映射到宿主机的哪个路径)、环境配置(.env / compose 文件)。列一张清单,备份就按这张清单走。
- 做应用级备份(核心一步):进入 backend 容器,执行
bench --site all backup --with-files,会在 sites/站点名/private/backups 下生成数据库备份包和附件备份包;用docker cp把这两个包拷出到宿主机,至少存两处。 - 卷和配置一起备:停掉整套容器后,把宿主机上映射的 sites 等目录整体再打包一份,连同 compose 文件、.env、站点配置文件单独存放。第 2 步的应用备份和这一步的卷备份互为保险,升级窗口前必须两样都有。
- 升级走"新起一套":v15 用新的数据库实例起栈,建好同名站点后用备份包恢复数据,验证无误再切换访问入口;旧环境保留到业务部门验收结束才下线。直接把旧库挂到新版镜像上跨版本升,出错时连退路都没有。
- 恢复后按业务验收:登录新环境核对科目、客户、单据的条数与升级前一致;抽几张单据的附件能正常打开;打印模板、权限角色抽查正常。容器应用恢复必须验到业务层,页面能打开不等于数据没丢。
预防
把"双备份再升级"写死成制度:应用级备份包和卷备份统一归档到 NAS(一台入门机型如 DS425+ 就能承担这个归档角色),再留一份到异地;大版本升级前先在测试机把整套流程演练一遍。容器里跑的业务系统,备份和升级这类活正是诚鑫致达科技日常承接的范围,怕断业务可以先找我们评估一遍再动手。