对象存储与 CDN 配置

巴克励步
生产环境私有化部署时,建议将图片、视频等静态资源存到 对象存储,并通过 CDN 加速访问。Baklib Docker 通过 .env 中的 STORAGE_ALIYUN_* 变量注入应用;修改后需 重启服务./baklib restart)。
变量名注意:前缀为 STORAGE_ALIYUN_(Aliyun)。若旧 .env 仍使用错误拼写 STORAGE_ALIIYUN_,请改正后重启。

前置条件

  • 已开通阿里云并完成实名认证。
  • 已创建 RAM 子账号(勿在生产使用主账号 AccessKey),授予 OSS 读写及(若启用 CDN 鉴权)相应权限。
  • 已完成 Docker 免费部署安装.env 基础项可用。

目标结果

  • RAM 子账号 AccessKey / SecretKey 已获取
  • OSS Bucket 已创建,跨域与授权已配置
  • (推荐)CDN 加速域名、CNAME、HTTPS、URL 鉴权已配置
  • 中 及相关变量已填写并重启验证

操作步骤

步骤一:创建 OSS Bucket

  1. 登录 对象存储 OSS 控制台,在目标地域创建 Bucket。
  2. 记录 Bucket 名称外网 Endpoint(如 oss-cn-hangzhou.aliyuncs.com)。
预期结果:Bucket 状态正常,地域与后续 Endpoint 一致。

步骤二:授权 RAM 子账号

  1. 进入 Bucket 权限控制 → Bucket 授权策略,新增授权。
  2. 选择用于 Baklib 的 RAM 子账号,授权操作选 完全控制(或按最小权限原则自定义读写策略)。
预期结果:该子账号可对 Bucket 上传与读取对象。

步骤三:配置跨域(CORS)

浏览器直传与编辑器内上传需要 CORS。在 数据安全 → 跨域设置 新建规则:
来源 *(或限定您的 Baklib 域名)
方法 GET、PUT
Allow-Headers authorizationcontent-md5content-typex-oss-date
预期结果:前端上传不再因跨域被浏览器拦截。

步骤四:填写 OSS 环境变量

baklib-docker 项目 .env 中设置(示例值请替换):
STORAGE_SAAS_DEFAULT_SERVICE = 'aliyun'

STORAGE_ALIYUN_ACCESS_KEY = 'LTAIxxxxxxxxxxxx'
STORAGE_ALIYUN_SECRET_KEY = 'xxxxxxxxxxxxxxxx'
STORAGE_ALIYUN_BUCKET     = 'baklib-dev-oss'
STORAGE_ALIYUN_ENDPOINT   = 'https://oss-cn-hangzhou.aliyuncs.com'
STORAGE_ALIYUN_PUBLIC     = false
也可运行 ./baklib config,在交互流程中选择存储类型 aliyun 并按提示填写。
预期结果:应用默认存储指向阿里云 OSS。

步骤五:(推荐)配置 CDN

  1. 添加加速域名:CDN 控制台 → 域名管理 → 新增;加速区域、业务类型按资源特征选择(图片小文件 / 大文件下载)。
  2. 源站:类型选 OSS 域名,指向上一步 Bucket。
  3. DNS:在域名服务商为加速域名添加 CNAME 到 CDN 分配的地址;列表状态应为「已配置 / 正常运行」。
  4. 回源:回源配置 → 开启 阿里云 OSS 私有 Bucket 回源(同账号回源)。
  5. 缓存:缓存配置 → 修改出站响应头,例如:
    Cache-Control: max-age=2592000,private
    Access-Control-Allow-Origin: *
    
  6. URL 鉴权(防盗刷):访问控制 → URL 鉴权 → 类型 B,设置主 KEY 与有效时长(如 300 秒)。
  7. HTTPS:为加速域名配置证书并开启 HTTP/2。
CDN 相关变量示例:
STORAGE_ALIYUN_CDN_HOST = 'https://static.example.com'
STORAGE_ALIYUN_CDN_KEY  = 'your-long-secret-key'
预期结果:用户访问静态资源走 CDN 域名;私有 Bucket 通过回源与鉴权访问。

步骤六:重启并验证

  1. 保存 .env 后执行:./baklib restart(或 baklib.cmd restart)。
  2. 在 Baklib 中上传图片或附件。
  3. 在 OSS 控制台确认对象已写入;浏览器访问资源 URL 返回 200(私有 Bucket 为带签名 URL)。
预期结果:新上传资源走 OSS(及 CDN);旧本地存储文件不会自动迁移,需另行规划。

其他存储后端

Docker 部署还支持 本地(local)七牛(qinium)Amazon S3 等,变量前缀与示例见仓库 .env.example。本地试用可用 local;生产大流量建议对象存储 + CDN。

常见问题

Q:上传成功但图片无法打开?
A:检查 Endpoint 地域是否与 Bucket 一致;勿将仅内网 Endpoint 填到公网环境。检查 CDN CNAME 与 HTTPS 是否生效。
Q:修改 .env 后不生效?
A:存储类变量需 restart;若改动了 Traefik 相关项,建议重新 ./baklib config 同步。
Q:SaaS 与私有化 OSS 配置是否相同?
A:变量模型一致,但 Bucket、CDN 域名、密钥由客户自行在阿里云创建;SaaS 由平台托管,无需客户配 OSS。
Q:help 旧文中的 Endpoint 笔误?
A:外网 Endpoint 应为 https://oss-cn-{region}.aliyuncs.com,勿使用错误域名后缀。

相关阅读