Skip to content

Deploy & hosting ​

Two separate things get "deployed":

WhatWhere it goesHow
App server (the React Router app + DB)Your hostingYour normal CI/CD, Docker, etc.
App config + extensionsShopifyshopify app deploy → creates an app version

Hosting the server ​

Any Node host works: Fly.io, Render, Railway, Heroku, Google Cloud Run, AWS (ECS/Lambda), or FlowFlex's own infrastructure. The template ships a Dockerfile.

Checklist:

  • [ ] Set env vars: SHOPIFY_API_KEY, SHOPIFY_API_SECRET, SHOPIFY_APP_URL, SCOPES, DATABASE_URL
  • [ ] Swap SQLite for a real database: Postgres, MySQL or MongoDB (there are session-storage adapters for each)
  • [ ] Run Prisma migrations on deploy (npm run setup)
  • [ ] Put application_url and redirect_urls in the prod toml
  • [ ] HTTPS only

App versions ​

shopify app deploy bundles the shopify.app.toml config and all extensions/ into a new version, and releases it to every install.

bash
shopify app deploy                 # create + release a version
shopify app deploy --no-release    # create only; release later from the dashboard
shopify app versions list
shopify app release --version <name>   # release (or roll back to) a specific version

Rollbacks

To roll back extensions or config, release a previous version. Your server has its own rollback, so keep them compatible.

Staging vs production ​

Create two apps in the Dev Dashboard (e.g. "Notifier" and "Notifier Staging"), each with its own toml:

bash
shopify app config use staging && shopify app deploy
shopify app config use production && shopify app deploy

CI deploys ​

In CI, use a CLI token instead of logging in interactively:

bash
SHOPIFY_CLI_PARTNERS_TOKEN=*** shopify app deploy --force --config production

Verify

The CI token mechanism may have changed with the Dev Dashboard move. Check shopify app deploy --help and the CLI docs for the current env var.

Check yourself ​

  1. You changed only server code. Do you need shopify app deploy?
  2. How do you roll back a broken checkout extension?