用对象存储 OBS 做静态资源托管的实践笔记
最近把项目里的图片、附件和前端静态文件从云服务器本地磁盘迁到了华为云对象存储 OBS,整体过程比预想的顺。这篇笔记记录一下迁移的步骤、几个容易踩的坑,以及日常运维上我觉得值得固化下来的做法。
一、为什么要迁
原来静态文件都放在 ECS 的数据盘上,问题慢慢攒了几个:磁盘容量跟着业务涨,扩容要停机;备份靠手动打包,经常忘;图片一多,服务器带宽被下载流量占满,接口响应跟着变慢。OBS 按量计费、容量不用预估,文件天然多份冗余,正好对症。
二、迁移步骤
第一步是建桶。桶名全局唯一,区域要和 ECS 选同一个,后面走内网 endpoint 传输不花公网流量费。存储类别先选标准存储,访问量低的老文件后面再用生命周期规则转低频。
第二步传文件。少量文件直接在控制台拖拽就行;这次量比较大,用的是 obsutil 命令行工具,sync 命令把本地目录和桶做增量同步,断点续传省了不少事。命令大概是:
obsutil sync /data/static obs://my-bucket/static -acl=public-read
第三步改引用。把代码里拼本地路径的地方换成 OBS 的访问域名,历史数据用脚本批量更新数据库里存的 URL 字段。建议保留一段时间的双读兼容:新地址读不到时回退到旧路径,等确认无误再下线本地文件。
三、三个坑
权限别图省事全开。 桶可以设公共读,但写权限一定要收紧:业务程序用单独的 AK/SK,只授权到指定桶,别用主账号密钥。之前见过把桶设成公共读写的案例,被人当免费图床不说,还可能产生大额流量费。
防盗链要配。 公共读的资源裸奔在公网上,别人盗链会直接消耗你的流量。在桶的防盗链里配 Referer 白名单,只放行自己的域名,空 Referer 是否允许按业务决定(App 内嵌场景常需要允许)。
跨域别忘了。 前端页面用 JS 直接读 OBS 资源时,桶要配 CORS 规则,允许的来源、方法(GET/HEAD)和响应头提前配好,不然浏览器控制台一片红色报错。
四、日常运维的两个习惯
一是开版本控制和生命周期:桶开启多版本后误删能找回;生命周期规则把 90 天前的日志类文件自动转归档存储,成本能降一大截。二是重要文件开服务端加密(SSE-KMS),配置几乎零成本,合规上也交代得过去。
五、小结
OBS 这类对象存储的迁移门槛主要在规划:桶怎么分、权限怎么收、域名和防盗链怎么配,一次想清楚,后面基本不用操心。真正省下来的,是磁盘扩容、备份和带宽这三笔长期账。
- 点赞
- 收藏
- 关注作者
评论(0)