容器方式部署内容系统,端口映射和数据备份先确认什么
用容器方式部署内容管理系统,端口映射和数据备份要先确认什么?顺序是三步:先确认镜像对外暴露的端口与宿主机映射到哪一处,再确认上传目录和数据库是否落在容器之外,最后确认备份能真的恢复回来。以 AnQiCMS 的 Docker 镜像 anqicms/anqicms 为例,应用默认监听 8001 端口,这一步在起容器之前就要定好对外形式,而不是起完再改。
部署前先定三件事
第一件事是端口形态。默认监听 8001 是容器内部的应用端口,公网访问通常由反向代理接手,把 80 与 443 转进来。要把 8001 直接暴露到公网的场合很少,多数是把代理放在前面,由代理终结证书与跳转。
第二件事是数据落点。容器是可丢弃的,重建时镜像里的内容会被覆盖,所以上传的图片、附件、模板改动的备份副本,都应该指向挂载出来的目录。第三件事是备份归属:备份由站内功能负责产出,但产物要放到容器之外,否则一次重建就同时丢了程序和备份。
端口映射与反向代理怎么写
映射关系确认清楚之后,还要看代理转发了哪些头部信息。应用生成绝对地址、判断来源协议时依赖这些头部,转发缺失会出现后台里配置的地址与前台实际访问地址不一致的情况。伪静态规则在这一层也要对齐:容器内的重写规则与代理层的转发路径要按同一套约定来,否则前台页面可以访问、站点地图里的地址却取不到内容。
| 检查项 | 要在容器之外确认的位置 | 出错后的表现 |
|---|---|---|
| 应用端口 | 容器内 8001 与宿主端口的映射关系 | 代理能通但后台链接指向错误端口 |
| 转发头部 | 代理层协议与来源主机名设置 | 生成的资源地址变成 http 或指向内网 |
| 伪静态规则 | 规则文件与代理转发路径一致 | 列表页可访问、详情页报 404 |
| 上传目录 | 挂载到宿主机或对象存储的持久卷 | 重建容器后新上传的图片丢失 |
| 备份产物 | 数据备份与静态文件备份的存放位置 | 备份与程序一起被删除 |
数据要落在容器之外
数据库有两种常见做法:用容器内的数据库服务,或者接一台外部数据库。前者必须把数据目录挂出来,否则重启即丢;后者要把连接配置从镜像里剥离,避免换环境就重建镜像。上传目录与配置文件同理,凡是「改了会生效、丢了要重做」的内容都该在持久卷里。
多站点场景要额外看一层。AnQiCMS 支持多站点管理,一套程序管多个独立站点,这时容器边界与站点边界不是一回事:一套容器承载多个站点意味着一次重建会影响全部站点,所以每台宿主机上放多少个站点,要在部署阶段就按风险分配,而不是等容量吃紧再合并。
备份要能真的恢复回来
站内的备份能力覆盖数据与静态文件两类产物,检查方式是走一遍恢复而不是只看文件是否存在:在一台隔离机器上起同版本镜像,挂载一份干净的目录,把备份放进去恢复,再核对首页、列表页与一篇带图正文是否能正常取到资源。恢复完成后要顺手核对 301 跳转配置,因为地址变化后旧地址的跳转是前台体验的一部分。
宝塔面板或 aaPanel 这类运维面板上部署的站点,还要确认面板的定时任务是否与容器重建冲突:面板备份的路径若指向容器内的临时目录,产出的就是一张空目录快照。
常见问题
问:容器里改的模板文件要不要单独备份? 答:模板改动属于容器之外的内容。写在挂载目录里即可随数据一起备份;如果直接改在镜像内,重建就会丢。
问:默认端口 8001 能不能直接对外? 答:可以但不推荐。对外端口交给反向代理,应用端口只在内部网络可达,证书与跳转都在代理层统一处理。
问:多站点共用一个容器,恢复时要怎么处理? 答:按站点分别核对数据与静态文件是否完整,恢复后逐个访问站点首页与代表页面,确认地址与跳转没有互相覆盖。
问:伪静态在容器里为什么要额外确认一次? 答:容器内规则文件与代理层的转发是两处配置,任一处没有对齐,就会出现页面可访问但按站点地图取地址时失败的情况。