Shopify 应用部署策略
Shopify 应用的部署与普通网站不同,因为它涉及 Webhook、Admin API 速率限制以及 OAuth 握手。
一、Vercel 问题(超时)
Vercel Serverless 函数存在超时限制(通常为 10 秒至 60 秒)。
问题:Shopify 批量操作、商品同步,或在大型店铺上安装应用,可能耗时超过 60 秒。
结果:出现 504 Gateway Timeout,安装中断。
方案 A:在 Vercel 上使用 Remix(混合模式)
- 使用 Vercel 承载 UI。
- 将长时间任务(同步)卸载到独立的 worker(Cloudflare Workers、Inngest 或独立 VPS)。
- 在 Remix 中使用 Defer 在后端工作时流式输出 UI(但无法解决主线程的硬超时)。
方案 B:VPS / Docker(推荐用于正式应用)
部署到持久化服务器(Fly.io、Railway、DigitalOcean、Hetzner)可消除超时。
工具:Coolify(自托管的 Vercel 替代品)、Dokku,或手动 Docker。
二、部署检查清单
A. 环境变量
确保在 CI/CD 或平台密钥中设置以下变量:
- SHOPIFY_API_KEY
- SHOPIFY_API_SECRET
- SCOPES(必须与代码中完全一致)
- SHOPIFY_APP_URL(公开 HTTPS URL,例如 https://app.mytitle.com)
- DATABASE_URL
B. 数据库迁移
在构建期间或作为发布阶段命令运行迁移。
- Fly.io:在 fly.toml 中使用 release_command。
- Docker:可在启动应用前的 CMD 脚本中运行 npx prisma migrate deploy。
C. 构建命令
确保为生产环境构建:
npm run build
确保这会运行 remix build 并复制必要的公共资源
三、平台特定配置
Fly.io
由于支持全球区域和 Docker,非常适合 Shopify 应用。
fly.toml 示例:
[build] dockerfile = "Dockerfile"
[env] PORT = "3000"
[http_service] internal_port = 3000 force_https = true auto_stop_machines = true auto_start_machines = true
Coolify / Hetzner
如果想节省成本(每月 5 美元即可获得性能强劲的 VPS)。
- 在 VPS 上安装 Coolify。
- 连接 GitHub 仓库。
- 选择 "Nixpacks" 或 "Docker file"。
- 设置环境变量。
- 部署。
四、后台任务(关键)
必须为后台任务制定策略。
可选方案:
- Redis + BullMQ:需要持久化的 Redis 实例。(参见 redis-bullmq 技能)。
- Inngest / Trigger.dev:Serverless 后台任务。如果不想管理 Redis,这是不错的选择。
五、部署后验证
- 安装测试:在开发店铺上安装应用。
- Webhook 测试:触发一个 Webhook(例如更新商品),并检查服务器日志。
- App Proxy:如果使用了 App Proxy,验证代理 URL 能否正确加载(此处常见 CORS 错误)。