对象存储与 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
- 登录 对象存储 OSS 控制台,在目标地域创建 Bucket。
- 记录 Bucket 名称 与 外网 Endpoint(如
oss-cn-hangzhou.aliyuncs.com)。
预期结果:Bucket 状态正常,地域与后续 Endpoint 一致。
步骤二:授权 RAM 子账号
- 进入 Bucket 权限控制 → Bucket 授权策略,新增授权。
- 选择用于 Baklib 的 RAM 子账号,授权操作选 完全控制(或按最小权限原则自定义读写策略)。
预期结果:该子账号可对 Bucket 上传与读取对象。
步骤三:配置跨域(CORS)
浏览器直传与编辑器内上传需要 CORS。在 数据安全 → 跨域设置 新建规则:
| 项 | 值 |
|---|---|
| 来源 | *(或限定您的 Baklib 域名) |
| 方法 | GET、PUT |
| Allow-Headers | authorization、content-md5、content-type、x-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
- 添加加速域名:CDN 控制台 → 域名管理 → 新增;加速区域、业务类型按资源特征选择(图片小文件 / 大文件下载)。
- 源站:类型选 OSS 域名,指向上一步 Bucket。
- DNS:在域名服务商为加速域名添加 CNAME 到 CDN 分配的地址;列表状态应为「已配置 / 正常运行」。
- 回源:回源配置 → 开启 阿里云 OSS 私有 Bucket 回源(同账号回源)。
- 缓存:缓存配置 → 修改出站响应头,例如:
Cache-Control: max-age=2592000,private Access-Control-Allow-Origin: * - URL 鉴权(防盗刷):访问控制 → URL 鉴权 → 类型 B,设置主 KEY 与有效时长(如 300 秒)。
- HTTPS:为加速域名配置证书并开启 HTTP/2。
CDN 相关变量示例:
STORAGE_ALIYUN_CDN_HOST = 'https://static.example.com'
STORAGE_ALIYUN_CDN_KEY = 'your-long-secret-key'
预期结果:用户访问静态资源走 CDN 域名;私有 Bucket 通过回源与鉴权访问。
步骤六:重启并验证
- 保存
.env后执行:./baklib restart(或baklib.cmd restart)。 - 在 Baklib 中上传图片或附件。
- 在 OSS 控制台确认对象已写入;浏览器访问资源 URL 返回 200(私有 Bucket 为带签名 URL)。
预期结果:新上传资源走 OSS(及 CDN);旧本地存储文件不会自动迁移,需另行规划。
其他存储后端
Docker 部署还支持 本地(local)、七牛(qinium)、Amazon S3 等,变量前缀与示例见仓库
.env.example。本地试用可用 local;生产大流量建议对象存储 + CDN。常见问题
Q:上传成功但图片无法打开?
A:检查 Endpoint 地域是否与 Bucket 一致;勿将仅内网 Endpoint 填到公网环境。检查 CDN CNAME 与 HTTPS 是否生效。
A:检查 Endpoint 地域是否与 Bucket 一致;勿将仅内网 Endpoint 填到公网环境。检查 CDN CNAME 与 HTTPS 是否生效。
Q:修改
A:存储类变量需 restart;若改动了 Traefik 相关项,建议重新
.env 后不生效?A:存储类变量需 restart;若改动了 Traefik 相关项,建议重新
./baklib config 同步。Q:SaaS 与私有化 OSS 配置是否相同?
A:变量模型一致,但 Bucket、CDN 域名、密钥由客户自行在阿里云创建;SaaS 由平台托管,无需客户配 OSS。
A:变量模型一致,但 Bucket、CDN 域名、密钥由客户自行在阿里云创建;SaaS 由平台托管,无需客户配 OSS。
Q:help 旧文中的 Endpoint 笔误?
A:外网 Endpoint 应为
A:外网 Endpoint 应为
https://oss-cn-{region}.aliyuncs.com,勿使用错误域名后缀。