部署doccano至Cloud Run后,如何将数据库保存到Google Cloud Storage?
解决doccano Cloud Run容器数据持久化到GCS的方案
1. 先理清doccano的存储逻辑
doccano默认用本地SQLite+本地文件保存数据,重启就丢是因为Cloud Run的本地存储属于临时存储。要对接GCS,得从文件存储和数据库两个维度入手,至少先搞定文件存储的持久化。
2. 给Cloud Run服务配置GCS权限
- 找到你的Cloud Run服务对应的服务账号,给它添加
Storage Object Admin权限(遵循最小权限原则,别给过于宽泛的权限),确保容器能正常读写GCS存储桶。 - 部署Cloud Run时,记得开启「允许服务账号访问Cloud API」的选项,否则权限设置无法生效。
3. 配置doccano核心环境变量
doccano支持通过环境变量切换存储后端,直接在Cloud Run的环境变量配置里添加以下内容:
必配变量
STORAGE_BACKEND: 设置为storages.backends.gcloud.GoogleCloudStorage,指定doccano使用GCS作为文件存储后端GS_BUCKET_NAME: 填写你的GCS存储桶名称,比如my-doccano-data-bucketDJANGO_SETTINGS_MODULE: 设置为config.settings.production,生产环境配置才支持外部存储扩展
可选变量(按需配置)
GS_DEFAULT_ACL: 比如设为private,控制文件的默认访问权限GS_FILE_OVERWRITE: 设为False,避免同名文件被覆盖
部署时的环境变量配置示例(直接在Cloud Run控制台填键值对即可):
STORAGE_BACKEND=storages.backends.gcloud.GoogleCloudStorage GS_BUCKET_NAME=my-doccano-data-bucket DJANGO_SETTINGS_MODULE=config.settings.production
4. 验证配置是否生效
- 重新部署Cloud Run服务,导入测试数据并完成几个标注操作。
- 登录GCS控制台查看对应存储桶,应该会生成
media目录,里面包含你导入的数据集和标注数据文件。 - 手动重启Cloud Run服务,再次登录doccano检查数据是否保留。
5. 额外注意事项
- 不要将SQLite数据库直接存到GCS!SQLite不兼容网络文件系统,会引发各种异常。要持久化数据库的话,建议改用Cloud SQL的PostgreSQL/MySQL,同时配置
DATABASE_URL环境变量对接。 - GCS存储桶的区域尽量和Cloud Run服务区域保持一致,减少读写延迟。
- 若自定义了容器启动命令,不要覆盖默认启动脚本,否则环境变量可能无法正常加载。
内容的提问来源于stack exchange,提问作者Arthuro
相关产品推荐
相关产品推荐

