Deploy Shopify apps to Vercel, Fly.io, Railway, and Cloud Run with proper environment configuration. Use when deploying Shopify-powered applications to production, configuring platform-specific secrets, or setting up hosting. Trigger with phrases like "deploy shopify", "shopify hosting", "shopify Vercel", "shopify production deploy", "shopify Fly.io".
Deploy Shopify apps to popular hosting platforms. Covers environment configuration, webhook URL setup, and Shopify CLI deployment for extensions.
shopify app devshopify.app.toml configured# Shopify CLI handles extension deployment and app config sync
shopify app deploy
# This uploads:
# - Theme app extensions
# - Function extensions
# - App configuration (URLs, scopes, webhooks)
# But NOT your web app — you host that separately
Set environment variables, configure vercel.json for webhooks and function timeouts, and update shopify.app.toml with the Vercel URL.
See Vercel Deployment for the complete configuration.
Configure fly.toml with health checks and min-machines, set secrets via fly secrets set, and deploy.
See Fly.io Deployment for the complete configuration.
Use a multi-stage Dockerfile for minimal image size, deploy with gcloud run deploy, and configure secrets via Secret Manager.
See Cloud Run Deployment for Dockerfile and deploy commands.
Run health checks, verify webhook endpoints return 401 (no HMAC), test OAuth start, and sync app config.
See Post-Deploy Verification for the complete verification script.
| Issue | Cause | Solution |
|---|---|---|
| OAuth redirect mismatch | App URL not updated | Update redirect_urls in shopify.app.toml and deploy |
| Webhooks not received | URL not HTTPS or unreachable | Verify public URL, check DNS |
| Cold start timeout | Serverless function slow | Set min instances to 1 |
| CSP frame-ancestors error | Missing header | Add CSP header for *.myshopify.com |
shopify app deploy fails | CLI token invalid | Regenerate at partners.shopify.com |
# Required for all deployments:
SHOPIFY_API_KEY= # From Partner Dashboard
SHOPIFY_API_SECRET= # From Partner Dashboard
SHOPIFY_SCOPES= # e.g., "read_products,write_products"
SHOPIFY_APP_URL= # Your deployed app URL
# For custom/private apps:
SHOPIFY_ACCESS_TOKEN= # shpat_xxx
# Optional:
SHOPIFY_API_VERSION= # Default: latest stable. Update quarterly — see shopify.dev/docs/api/usage/versioning
SESSION_SECRET= # For cookie signing
DATABASE_URL= # Session storage