Appearance
Deploy & hosting
Two separate things get "deployed":
| What | Where it goes | How |
|---|---|---|
| App server (the React Router app + DB) | Your hosting | Your normal CI/CD, Docker, etc. |
| App config + extensions | Shopify | shopify 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_urlandredirect_urlsin 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 versionRollbacks
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 deployCI deploys
In CI, use a CLI token instead of logging in interactively:
bash
SHOPIFY_CLI_PARTNERS_TOKEN=*** shopify app deploy --force --config productionVerify
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
- You changed only server code. Do you need
shopify app deploy? - How do you roll back a broken checkout extension?