Files
AIclinicalresearch/docs/05-部署文档/0126部署/02-OSS环境配置方案.md
HaHafeng 2481b786d8 deploy: Complete 0126-27 deployment - database upgrade, services update, code recovery
Major Changes:
- Database: Install pg_bigm/pgvector plugins, create test database
- Python service: v1.0 -> v1.1, add pymupdf4llm/openpyxl/pypandoc
- Node.js backend: v1.3 -> v1.7, fix pino-pretty and ES Module imports
- Frontend: v1.2 -> v1.3, skip TypeScript check for deployment
- Code recovery: Restore empty files from local backup

Technical Fixes:
- Fix pino-pretty error in production (conditional loading)
- Fix ES Module import paths (add .js extensions)
- Fix OSSAdapter TypeScript errors
- Update Prisma Schema (63 models, 16 schemas)
- Update environment variables (DATABASE_URL, EXTRACTION_SERVICE_URL, OSS)
- Remove deprecated variables (REDIS_URL, DIFY_API_URL, DIFY_API_KEY)

Documentation:
- Create 0126 deployment folder with 8 documents
- Update database development standards v2.0
- Update SAE deployment status records

Deployment Status:
- PostgreSQL: ai_clinical_research_test with plugins
- Python: v1.1 @ 172.17.173.84:8000
- Backend: v1.7 @ 172.17.173.89:3001
- Frontend: v1.3 @ 172.17.173.90:80

Tested: All services running successfully on SAE
2026-01-27 08:13:27 +08:00

9.4 KiB
Raw Permalink Blame History

📦 OSS存储环境配置方案

文档版本v1.0
创建日期2026-01-26
适用范围阿里云OSS对象存储
变更类型:环境分离 + 新Bucket创建


📋 一、变更概述

1.1 变更内容

变更项 描述 优先级
创建开发环境Bucket ai-clinical-data-dev, ai-clinical-static-dev 🔴
创建生产环境Bucket ai-clinical-data, ai-clinical-static 🔴
更新环境变量 OSS_BUCKET, OSS_BUCKET_STATIC, OSS_INTERNAL 🔴
配置RAM权限 确保SAE服务可访问新Bucket 🔴

1.2 当前OSS状态

现有Bucket: ai-clinical-research
用途: 所有环境混用
RAM用户: oss-bucket-put-object@1991407246109125.onaliyun.com
AccessKeyId: LTAI5tB2Dt3NdvBL3G7nYGv7

1.3 目标状态

开发环境:
  数据Bucket: ai-clinical-data-dev
  静态Bucket: ai-clinical-static-dev
  
生产环境:
  数据Bucket: ai-clinical-data
  静态Bucket: ai-clinical-static

保留:
  原有Bucket: ai-clinical-research保留逐步迁移

🗂️ 二、Bucket规划

2.1 Bucket用途说明

Bucket名称 环境 用途 存储内容
ai-clinical-data-dev 开发 业务数据 PDF、文档、临时文件
ai-clinical-static-dev 开发 静态资源 头像、图片、公共资源
ai-clinical-data 生产 业务数据 PDF、文档、临时文件
ai-clinical-static 生产 静态资源 头像、图片、公共资源

2.2 目录结构规划

ai-clinical-data[-dev]/
├── uploads/
│   ├── pdfs/           # PDF文件上传
│   ├── docx/           # Word文档上传
│   ├── txt/            # 文本文件上传
│   └── excel/          # Excel文件上传
├── exports/            # 导出文件临时存储
├── temp/               # 临时文件(定期清理)
└── backups/            # 备份文件

ai-clinical-static[-dev]/
├── avatars/            # 用户头像
├── images/             # 公共图片
├── templates/          # 模板文件
└── public/             # 公开资源

🔧 三、创建Bucket操作步骤

Step 1登录OSS控制台

地址https://oss.console.aliyun.com/
地域华北2北京

Step 2创建开发数据Bucket

  1. 点击"创建Bucket"
  2. 填写配置:
    • Bucket名称ai-clinical-data-dev
    • 地域华北2北京
    • 存储类型:标准存储
    • 存储冗余类型:同城冗余存储
    • 版本控制:关闭
    • 读写权限:私有
    • 服务端加密:无
  3. 点击"确定"

Step 3创建开发静态Bucket

  1. 点击"创建Bucket"
  2. 填写配置:
    • Bucket名称ai-clinical-static-dev
    • 地域华北2北京
    • 存储类型:标准存储
    • 存储冗余类型:同城冗余存储
    • 读写权限:私有
  3. 点击"确定"

Step 4创建生产数据Bucket

  1. 点击"创建Bucket"
  2. 填写配置:
    • Bucket名称ai-clinical-data
    • 地域华北2北京
    • 存储类型:标准存储
    • 存储冗余类型:同城冗余存储
    • 读写权限:私有
  3. 点击"确定"

Step 5创建生产静态Bucket

  1. 点击"创建Bucket"
  2. 填写配置:
    • Bucket名称ai-clinical-static
    • 地域华北2北京
    • 存储类型:标准存储
    • 存储冗余类型:同城冗余存储
    • 读写权限:私有
  3. 点击"确定"

🔐 四、RAM权限配置

4.1 当前RAM用户

RAM用户名: oss-bucket-put-object@1991407246109125.onaliyun.com
AccessKeyId: LTAI5tB2Dt3NdvBL3G7nYGv7
AccessKeySecret: 1iSN9k39RkApP93QjUhC1DcPIeMG4V  # 敏感信息

4.2 更新RAM策略

需要为RAM用户添加新Bucket的访问权限。

方式1更新自定义策略

登录RAM控制台找到对应策略更新为

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "oss:PutObject",
        "oss:GetObject",
        "oss:DeleteObject",
        "oss:ListObjects",
        "oss:GetObjectAcl",
        "oss:PutObjectAcl"
      ],
      "Resource": [
        "acs:oss:*:*:ai-clinical-research",
        "acs:oss:*:*:ai-clinical-research/*",
        "acs:oss:*:*:ai-clinical-data",
        "acs:oss:*:*:ai-clinical-data/*",
        "acs:oss:*:*:ai-clinical-data-dev",
        "acs:oss:*:*:ai-clinical-data-dev/*",
        "acs:oss:*:*:ai-clinical-static",
        "acs:oss:*:*:ai-clinical-static/*",
        "acs:oss:*:*:ai-clinical-static-dev",
        "acs:oss:*:*:ai-clinical-static-dev/*"
      ]
    }
  ]
}

方式2使用AliyunOSSFullAccess策略简单但权限较大

# 在RAM控制台为用户附加策略
AliyunOSSFullAccess

4.3 验证权限

# 使用ossutil测试上传
ossutil64 cp test.txt oss://ai-clinical-data-dev/test/test.txt \
  -i LTAI5tB2Dt3NdvBL3G7nYGv7 \
  -k 1iSN9k39RkApP93QjUhC1DcPIeMG4V \
  -e oss-cn-beijing.aliyuncs.com

# 测试下载
ossutil64 cat oss://ai-clinical-data-dev/test/test.txt \
  -i LTAI5tB2Dt3NdvBL3G7nYGv7 \
  -k 1iSN9k39RkApP93QjUhC1DcPIeMG4V \
  -e oss-cn-beijing.aliyuncs.com

# 清理测试文件
ossutil64 rm oss://ai-clinical-data-dev/test/test.txt \
  -i LTAI5tB2Dt3NdvBL3G7nYGv7 \
  -k 1iSN9k39RkApP93QjUhC1DcPIeMG4V \
  -e oss-cn-beijing.aliyuncs.com

⚙️ 五、环境变量配置

5.1 本地开发环境backend/.env

# OSS配置 - 开发环境
STORAGE_TYPE=oss
OSS_REGION=oss-cn-beijing
OSS_BUCKET=ai-clinical-data-dev
OSS_BUCKET_STATIC=ai-clinical-static-dev
OSS_ACCESS_KEY_ID=LTAI5tB2Dt3NdvBL3G7nYGv7
OSS_ACCESS_KEY_SECRET=1iSN9k39RkApP93QjUhC1DcPIeMG4V
OSS_INTERNAL=false  # 本地开发用公网

5.2 SAE测试环境

# OSS配置 - SAE测试环境
STORAGE_TYPE=oss
OSS_REGION=oss-cn-beijing
OSS_BUCKET=ai-clinical-data-dev
OSS_BUCKET_STATIC=ai-clinical-static-dev
OSS_ACCESS_KEY_ID=LTAI5tB2Dt3NdvBL3G7nYGv7
OSS_ACCESS_KEY_SECRET=1iSN9k39RkApP93QjUhC1DcPIeMG4V
OSS_INTERNAL=true  # SAE使用内网Endpoint

5.3 SAE生产环境

# OSS配置 - SAE生产环境
STORAGE_TYPE=oss
OSS_REGION=oss-cn-beijing
OSS_BUCKET=ai-clinical-data
OSS_BUCKET_STATIC=ai-clinical-static
OSS_ACCESS_KEY_ID=LTAI5tB2Dt3NdvBL3G7nYGv7
OSS_ACCESS_KEY_SECRET=1iSN9k39RkApP93QjUhC1DcPIeMG4V
OSS_INTERNAL=true  # SAE使用内网Endpoint

5.4 环境变量对比表

变量名 开发环境 SAE测试 SAE生产
STORAGE_TYPE oss oss oss
OSS_REGION oss-cn-beijing oss-cn-beijing oss-cn-beijing
OSS_BUCKET ai-clinical-data-dev ai-clinical-data-dev ai-clinical-data
OSS_BUCKET_STATIC ai-clinical-static-dev ai-clinical-static-dev ai-clinical-static
OSS_INTERNAL false true true

🔄 六、SAE环境变量更新步骤

Step 1更新Node.js后端环境变量

  1. 登录SAE控制台https://sae.console.aliyun.com/
  2. 进入应用:nodejs-backend-test
  3. 点击【应用配置】→【环境变量】
  4. 添加/修改以下变量:
    OSS_BUCKET=ai-clinical-data生产或 ai-clinical-data-dev测试
    OSS_BUCKET_STATIC=ai-clinical-static生产或 ai-clinical-static-dev测试
    OSS_INTERNAL=true
    
  5. 点击【保存】
  6. 点击【重启应用】(注意:是重启,不是部署!)

Step 2验证配置

# 通过公网测试API
curl http://8.140.53.236/api/v1/health

# 检查日志确认OSS配置加载正确
# SAE控制台 → 日志查询

📊 七、Endpoint说明

7.1 OSS Endpoint

类型 Endpoint 使用场景
公网Endpoint oss-cn-beijing.aliyuncs.com 本地开发、外部访问
内网Endpoint oss-cn-beijing-internal.aliyuncs.com SAE/ECS内网访问
VPC Endpoint oss-cn-beijing-internal.aliyuncs.com VPC网络访问

7.2 代码中的Endpoint选择

// 根据OSS_INTERNAL环境变量选择Endpoint
const endpoint = process.env.OSS_INTERNAL === 'true'
  ? 'oss-cn-beijing-internal.aliyuncs.com'  // 内网(免流量费)
  : 'oss-cn-beijing.aliyuncs.com';           // 公网

八、验证清单

8.1 Bucket创建验证

  • ai-clinical-data-dev Bucket创建成功
  • ai-clinical-static-dev Bucket创建成功
  • ai-clinical-data Bucket创建成功
  • ai-clinical-static Bucket创建成功

8.2 权限验证

  • RAM用户可访问所有新Bucket
  • 上传测试文件成功
  • 下载测试文件成功
  • 删除测试文件成功

8.3 SAE配置验证

  • Node.js后端环境变量已更新
  • 服务重启后正常运行
  • 文件上传功能正常
  • 文件下载功能正常

⚠️ 九、注意事项

9.1 成本控制

  • 内网访问免流量费
  • 设置生命周期规则清理临时文件
  • 定期检查存储用量

9.2 安全建议

  • AccessKeySecret妥善保管
  • 不要提交到Git仓库
  • 定期轮换AccessKey

9.3 数据迁移

如需从旧Bucket迁移数据

# 使用ossutil迁移
ossutil64 cp -r oss://ai-clinical-research/uploads/ oss://ai-clinical-data/uploads/ \
  --include "*.pdf"

最后更新2026-01-26
维护人员:开发团队
参考文档阿里云OSS文档