---
title: "Deploy Medusa 2 + Enthusiast Commerce"
description: "Medusa 2 commerce starter with Next.js, Shopping feeds and Enthusiast AI."
category: "Starters"
url: https://railway.com/deploy/medusa-2-enthusiast-commerce
---

# Deploy Medusa 2 + Enthusiast Commerce

Medusa 2 commerce starter with Next.js, Shopping feeds and Enthusiast AI.

**[Deploy Medusa 2 + Enthusiast Commerce on Railway](https://railway.com/template/medusa-2-enthusiast-commerce)**

- **Creator:** jsnmhbl's Projects
- **Category:** Starters

## Template content

### enthusiast-redis https://cdn.sanity.io/images/sy1jschh/production/0ce0bfdcfbdbf69662b1116671f97c2dd788b655-157x157.svg

- **Image:** redis:8.2.1
- **Start command:** `/bin/sh -c "rm -rf $RAILWAY_VOLUME_MOUNT_PATH/lost+found/ && exec docker-entrypoint.sh redis-server --requirepass $REDIS_PASSWORD --save 60 1 --dir $RAILWAY_VOLUME_MOUNT_PATH"`

### storefront

- **Image:** ghcr.io/pathtoresiliencebv/medusa2-enthusiast-storefront:latest
- **Health check:** /api/health
- **Public domain:** Yes

### enthusiast-beat

- **Image:** ghcr.io/pathtoresiliencebv/medusa2-enthusiast-enthusiast-server:latest

### enthusiast-worker

- **Image:** ghcr.io/pathtoresiliencebv/medusa2-enthusiast-enthusiast-server:latest

### enthusiast-api

- **Image:** ghcr.io/pathtoresiliencebv/medusa2-enthusiast-enthusiast-server:latest
- **Health check:** /api/docs
- **Public domain:** Yes

### enthusiast-db https://devicons.railway.app/i/postgresql.svg

- **Image:** ghcr.io/railwayapp-templates/postgres-ssl:18

### medusa

- **Image:** ghcr.io/pathtoresiliencebv/medusa2-enthusiast-medusa:latest
- **Health check:** /health
- **Public domain:** Yes

### enthusiast-frontend

- **Image:** ghcr.io/pathtoresiliencebv/medusa2-enthusiast-enthusiast-frontend:latest
- **Health check:** /
- **Public domain:** Yes

### medusa-db https://devicons.railway.app/i/postgresql.svg

- **Image:** ghcr.io/railwayapp-templates/postgres-ssl:18

### medusa-redis https://cdn.sanity.io/images/sy1jschh/production/0ce0bfdcfbdbf69662b1116671f97c2dd788b655-157x157.svg

- **Image:** redis:8.2.1
- **Start command:** `/bin/sh -c "rm -rf $RAILWAY_VOLUME_MOUNT_PATH/lost+found/ && exec docker-entrypoint.sh redis-server --requirepass $REDIS_PASSWORD --save 60 1 --dir $RAILWAY_VOLUME_MOUNT_PATH"`

## Documentation

# Deploy and Host Medusa 2 + Enthusiast Commerce

A reusable production starter for a branded Dutch/Belgian webshop. It combines a Medusa 2 backend, a conversion-focused Next.js storefront and the complete Enthusiast AI stack.

## About Hosting

This template deploys the complete commerce stack to Railway. Medusa and Enthusiast each receive an isolated PostgreSQL database and Redis instance. The public storefront, Medusa API/Admin and Enthusiast interface receive their own service and health check. Internal service references and generated secrets are configured automatically.

## Why Deploy

Use this template when you want a repeatable webshop foundation without rebuilding hosting, databases, feeds, inventory controls and Enthusiast integration for every new brand. The services are separated so they can scale, restart and be maintained independently.

## Common Use Cases

- Launch a new branded Medusa 2 webshop for the Netherlands or Belgium.
- Reuse the LVRO-style commerce workflow without copying production data.
- Manage products, inventory, sourcing costs and Shopping approval in one backend.
- Add Enthusiast AI with separate API, worker, scheduler and frontend services.
- Prepare Google Shopping, Meta and JSON feeds behind quality gates.

## Dependencies for Medusa 2 + Enthusiast Commerce

The template uses public, versioned container images built from this repository. A fresh deployment does not require a separate GitHub App connection or local build environment.

### Deployment Dependencies

- Railway account with capacity for ten services and four persistent volumes.
- PostgreSQL and Redis services included by the template.
- A Medusa publishable API key created after the first backend boot.
- Public backend and storefront domains for CORS configuration.
- Payment, email and analytics credentials only when those integrations are enabled.

## Included

- Medusa 2 backend and admin
- Next.js storefront with mobile cart, checkout, account pages and service pages
- Google Shopping, Meta and JSON feeds
- SEO, structured data and Consent Mode-ready analytics
- Internal sourcing, margins, inventory and Shopping approval controls
- `@upsidelab/medusa-plugin-enthusiast`
- Enthusiast API, worker, scheduler and frontend
- PostgreSQL and Redis for both Medusa and Enthusiast
- Railway health checks and Docker builds
- Rebrand and template verification scripts

No LVRO production database, customer information, supplier catalog, scraped reviews or credentials are included.

## One-click Railway deployment

[![Deploy on Railway](https://railway.com/button.svg)](https://railway.com/deploy/medusa-2-enthusiast-commerce)

Use the button to create a fresh stack. See [docs/RAILWAY_TEMPLATE.md](docs/RAILWAY_TEMPLATE.md) for the service map, required variables and first-deploy checklist.

## Local development

Requirements: Node.js 20+, npm 10+, PostgreSQL and Redis.

```bash
npm install
cp apps/backend/.env.template apps/backend/.env
cp apps/storefront/.env.example apps/storefront/.env.local
npm run backend:dev
npm run storefront:dev
```

The backend uses port `9000` by default and the storefront uses port `8100`.

## Create a new brand

Run the rebrand command immediately after creating a repository from this template:

```bash
npm run rebrand -- \
  --name "My Store" \
  --domain "mystore.nl" \
  --email "service@mystore.nl" \
  --slug "mystore"
```

Then review the legal pages, contact details, shipping promise and payment provider configuration before launch. Legal text is a starting point and not legal advice.

## First Medusa setup

1. Deploy the backend and let the migration/initial seed finish.
2. Open `/app` on the Medusa domain and create the owner account.
3. Copy the generated publishable API key to `NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY` on the storefront service.
4. Set the backend and storefront public domains in the CORS variables.
5. Configure payments, shipping and transactional email.
6. Keep Shopping core feed mode disabled until product, stock and Merchant Center checks pass.

## Safety defaults

- Unknown inventory is never invented.
- Shopping core-feed publication requires explicit approval.
- Sourcing data stays behind Medusa admin authorization.
- Analytics consent starts denied until the visitor opts in.
- Advertising campaigns are not activated by this repository.

## License

The commerce starter is MIT licensed. Enthusiast is included under its upstream MIT license; see `services/enthusiast/LICENSE.md`.


## Similar templates

- [open-excalidraw](https://railway.com/deploy/open-excalidraw) — Self-hostable collaborative drawing built on Excalidraw
- [caring-vibrancy](https://railway.com/deploy/caring-vibrancy) — Deploy and Host caring-vibrancy with Railway
- [Appsmith](https://railway.com/deploy/appsmith-1) — Low-code platform for internal tools, dashboards, and admin panels.

Open this page in a browser: https://railway.com/deploy/medusa-2-enthusiast-commerce
