本项目现在支持使用 GCP Cloud Storage 来持久化存储数据,包括:
- AST 分析文件
- SQLite 数据库
- 图数据库文件
/data/
├── ast/ # AST XML 文件
├── database/ # SQLite 数据库文件
│ └── db.sqlite3
└── graph/ # 图数据库文件
├── exports/ # 导出的图数据
└── graphs/ # 图数据存储
# 设置项目 ID
export PROJECT_ID=your-project-id
# 创建 bucket(使用与 Cloud Run 相同的区域)
gsutil mb -p $PROJECT_ID -c STANDARD -l asia-northeast1 gs://pmd-salesforce-data/
# 创建目录结构
gsutil -m mkdir -p gs://pmd-salesforce-data/ast/
gsutil -m mkdir -p gs://pmd-salesforce-data/database/
gsutil -m mkdir -p gs://pmd-salesforce-data/graph/exports/
gsutil -m mkdir -p gs://pmd-salesforce-data/graph/graphs/Cloud Run 服务需要访问 Storage bucket 的权限:
# 获取 Cloud Run 服务账号
SERVICE_ACCOUNT=$(gcloud run services describe pmd-salesforce-analyzer \
--region=asia-northeast1 \
--format='value(spec.template.spec.serviceAccountName)')
# 如果没有自定义服务账号,使用默认的
if [ -z "$SERVICE_ACCOUNT" ]; then
SERVICE_ACCOUNT="${PROJECT_ID}@appspot.gserviceaccount.com"
fi
# 授予 Storage 对象管理员权限
gsutil iam ch serviceAccount:${SERVICE_ACCOUNT}:roles/storage.objectAdmin \
gs://pmd-salesforce-data使用 Cloud Build 部署(已配置好 volume 挂载):
gcloud builds submit --config=cloudbuild.yaml或手动部署:
gcloud run deploy pmd-salesforce-analyzer \
--image=gcr.io/$PROJECT_ID/pmd-salesforce-analyzer:latest \
--region=asia-northeast1 \
--platform=managed \
--memory=1Gi \
--cpu=1 \
--timeout=300 \
--max-instances=5 \
--min-instances=0 \
--allow-unauthenticated \
--set-env-vars=PYTHONUNBUFFERED=1,DEBUG=False,USE_CLOUD_STORAGE=true \
--add-volume=name=data-volume,type=cloud-storage,bucket=pmd-salesforce-data \
--add-volume-mount=volume=data-volume,mount-path=/data| 变量名 | 说明 | 默认值 | 生产环境 |
|---|---|---|---|
USE_CLOUD_STORAGE |
是否使用 Cloud Storage | false |
true |
GCS_BUCKET_NAME |
Storage bucket 名称 | pmd-salesforce-data |
pmd-salesforce-data |
本地开发时,不需要使用 Cloud Storage:
# 不设置 USE_CLOUD_STORAGE,或设置为 false
export USE_CLOUD_STORAGE=false
# 数据会存储在本地目录
# - backend/db.sqlite3
# - output/ast/
# - graphdata/# 上传 AST 文件
gsutil -m cp -r output/ast/* gs://pmd-salesforce-data/ast/
# 上传数据库(如果需要)
gsutil cp backend/db.sqlite3 gs://pmd-salesforce-data/database/
# 上传图数据(如果存在)
gsutil -m cp -r graphdata/* gs://pmd-salesforce-data/graph/# 下载 AST 文件
gsutil -m cp -r gs://pmd-salesforce-data/ast/* output/ast/
# 下载数据库
gsutil cp gs://pmd-salesforce-data/database/db.sqlite3 backend/
# 下载图数据
gsutil -m cp -r gs://pmd-salesforce-data/graph/* graphdata/gsutil du -sh gs://pmd-salesforce-datagsutil du -sh gs://pmd-salesforce-data/ast/
gsutil du -sh gs://pmd-salesforce-data/database/
gsutil du -sh gs://pmd-salesforce-data/graph/# 删除特定 AST 文件
gsutil rm gs://pmd-salesforce-data/ast/old_file.xml
# 清空整个目录(谨慎使用)
gsutil -m rm -r gs://pmd-salesforce-data/ast/*创建生命周期规则来自动删除旧文件:
# 创建生命周期配置文件 lifecycle.json
cat > lifecycle.json << EOF
{
"lifecycle": {
"rule": [
{
"action": {"type": "Delete"},
"condition": {
"age": 90,
"matchesPrefix": ["ast/"]
}
}
]
}
}
EOF
# 应用生命周期规则
gsutil lifecycle set lifecycle.json gs://pmd-salesforce-data对于不常访问的数据,可以使用 Nearline 或 Coldline 存储:
# 将旧文件转为 Nearline 存储
gsutil rewrite -s NEARLINE gs://pmd-salesforce-data/archive/**检查 Cloud Run 服务日志:
gcloud run services logs read pmd-salesforce-analyzer \
--region=asia-northeast1 \
--limit=50确认服务账号有正确的权限:
gsutil iam get gs://pmd-salesforce-data- 确认
USE_CLOUD_STORAGE=true环境变量已设置 - 确认 volume 正确挂载到
/data - 检查应用日志中的路径
- 访问控制:使用 IAM 精细控制访问权限
- 加密:启用 bucket 加密(默认已启用)
- 备份:定期备份重要数据
- 监控:设置 Cloud Monitoring 告警
# 启用 bucket 版本控制(可选)
gsutil versioning set on gs://pmd-salesforce-data