Shopify App 的开发、Staging 与生产环境怎么隔离
Shopify App 的环境隔离通常不需要创建两个 Partner 组织。更常见的做法是在同一组织内使用不同 Shopify App、不同测试店铺和不同后端资源,分别承载开发、集成验证与生产流量。
Shopify CLI 支持一个代码库关联多个 App 配置,并通过具名配置选择不同的 development、staging 与 production App。管理 App 配置文件。
推荐的环境矩阵
| 环境 | Shopify App | 店铺 | 后端资源 | 主要用途 |
|---|---|---|---|---|
| 本地开发 | 独立 development App | 开发者自己的 Dev Store | 本地服务与开发数据库 | 快速迭代、制造测试数据 |
| Staging | 独立 staging App | 固定集成 Dev Store | 独立域名、数据库、队列和密钥 | 合并后的 OAuth、Webhook、Billing 与回归测试 |
| Production | 正式 App | 真实商家店铺 | 完全独立的生产资源 | 对外服务 |
Dev Store 只能用于开发和测试:它不能用于生产,不能通过真实支付服务处理交易,也不能转换成生产店铺。Development stores。
哪些可以共用
- 同一个代码仓库和主要业务模块。
- 同一个 Partner 组织及成员管理体系。
- 可复用的部署模板、数据库迁移和测试代码。
- 不含环境取值的配置结构。
哪些不能共用
- Shopify App 的 client ID、secret 与发布版本。
- App URL、允许的 OAuth 回调地址和 Webhook 入口。
- 数据库、缓存、对象存储与任务队列。
- 第三方服务凭据和回调配置。
- 日志、告警、审计记录与数据保留范围。
- CI/CD 的部署权限和生产审批。
- 用于验证安装流程的测试店铺。
“不同 App”只能隔离 Shopify 平台身份,不能自动隔离数据库和部署权限。反过来,只分数据库但共用同一个 Shopify App,也无法防止测试配置被发布到生产 App。
配置文件的使用方式
可以在一个代码库中维护具名配置:
shopify.app.development.toml
shopify.app.staging.toml
shopify.app.production.toml
Shopify 当前文档提供 app config link 创建或重新关联配置,用 app config use 切换本机默认配置,并允许在单条命令上通过 --config 显式选择目标。例如:
shopify app dev --config development
shopify app deploy --config staging
shopify app deploy --config production
官方并不要求把每份配置都提交到 Git:可以只提交生产配置,把个人开发配置放进 .gitignore。无论怎样取舍,secret 都不应写进配置文件——这是通用安全实践,不是该文档的规定。自动化环境必须用 --config 显式指定目标,不能依赖某位开发者本机通过 app config use 设定的默认值。
店铺命名
让名称长期表达产品、环境和用途:
product-dev-carl
product-staging
product-qa-billing
product-demo
个人开发店可以随时制造数据;固定 staging 店应保持可重复的基线;demo 或审核店则应保持整洁,方便录制材料和让外部审核者操作。不要用 prod 命名 Dev Store,以免让人误以为它承载真实交易。
从开发到生产的发布路径
- 功能分支在个人 Dev Store 完成开发验证。
- 合并后部署 staging 后端,并将对应 App 配置发布到 staging App。
- 在固定测试店验证安装、授权、权限变化、Webhook、计费、卸载和重装。
- 保存测试证据,人工批准生产发布。
- 将同一份已验证代码构建为生产制品,注入生产配置并部署。
- 发布生产 App 配置时,再次核对 scopes、回调地址和扩展版本。
Shopify CLI 的 app deploy 负责 Shopify 托管的 App 配置与扩展,不会替你部署应用后端;构建应用、准备数据库、设置环境变量并在托管服务上运行,是另一条流程。部署到托管服务。后端发布与 App 配置发布是两条链路,必须分别验收。
什么时候需要两个组织
只有当组织本身就是隔离边界时,两个组织才真正有意义,例如:
- 测试和生产属于不同法律实体或最终所有者。
- 外包团队可以接触测试资产,但不能加入生产组织。
- 合规要求组织级权限、账务和审计完全分离。
- 开发资产将整体交接给另一家公司。
否则,两个组织会增加成员、App 所有权、店铺和账务管理成本,却不能替代后端资源与凭据的环境隔离。
上线前检查
- 每条 CI 命令都显式选择 Shopify 配置。
- Staging 与 Production 的域名、数据库和密钥没有交叉引用。
- 开发店没有安装生产 App,真实商家店没有安装开发 App。
- 回调、Webhook 和应用首页均指向对应环境。
- 生产发布需要独立审批,开发者本机默认配置不参与决策。
- OAuth、权限变更、卸载重装和计费都在 staging 完成过真实流程验证。
环境隔离的目标不是增加配置文件数量,而是让测试失败不能污染生产身份、数据和商家体验。