---
title: "Deploy EverShop"
description: "Node.js online store with a catalog, cart, checkout and admin panel"
category: "Other"
url: https://railway.com/deploy/evershop-store
---

# Deploy EverShop

Node.js online store with a catalog, cart, checkout and admin panel

**[Deploy EverShop on Railway](https://railway.com/template/evershop-store)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/evershop-store/manifest.json

- **Creator:** A3A
- **Category:** Other

## Template content

### Postgres https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/postgresql.svg

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

### evershop https://raw.githubusercontent.com/evershopcommerce/evershop/v2.2.1/.github/images/logo-green.png

- **Source:** https://github.com/gridalpha/evershop-railway
- **Health check:** /
- **Public domain:** Yes

## Documentation

# Deploy and Host EverShop on Railway

EverShop is an open-source e-commerce platform written in TypeScript and React, with a GraphQL API and a modular architecture, built for developers who want to own their storefront rather than rent it. It ships what a real shop needs — a catalog with variants and attributes, categories and collections, a page builder, cart, checkout, coupons, tax and shipping rules, accounts and order management — in a codebase you extend with your own modules and themes. Teams self-host EverShop when a hosted platform's per-order fees or closed data model get in the way, and when they would rather write a Node.js extension than a marketplace plugin.

Deploy EverShop on Railway and the whole stack is wired together on the first click. The template provisions two services: **evershop**, the Node.js application serving the storefront and the `/admin` panel from one public domain, and **Postgres**, Railway's managed PostgreSQL, holding the catalog, orders, customers and login sessions. A volume at `/app/media` keeps uploaded product images, served back under `/assets`. Session keys, the admin and customer JWT secrets, the public URL and the first administrator are generated at deploy time, so there is no config file to edit and no installer wizard — the app migrates its own schema on first boot and serves.

![Diagram of the EverShop and Postgres services on Railway](https://res.cloudinary.com/rroe4rtk/image/upload/v1788455063/evershop-architecture.png)

## Getting Started with EverShop on Railway

Set `ADMIN_EMAIL` and `ADMIN_PASSWORD` before deploying — those become your first administrator, and the password must be at least eight characters. When the deployment goes green, open the public URL. You land on the storefront, close to empty because EverShop's home page is composed in the admin Page Builder rather than shipped with demo content. Sign in at `/admin`. From the dashboard open **Catalog → Products → New Product**, give it a name, SKU, price and shipping package, upload an image, set the status to Active and save. Create a category under **Catalog → Categories** and attach the product to it; the category page then renders with a working price filter and sort. Click through to the product, press **Add to cart** and open `/cart` — a line item with a subtotal confirms the database, the session store and the media volume all work. Set your store name, currency, tax classes, shipping methods and a payment method under **Setting** before taking orders.

![EverShop storefront category page with five ceramic products](https://res.cloudinary.com/rroe4rtk/image/upload/v1788455065/evershop-storefront-category.png)
![EverShop product page showing a coffee cup and add to cart](https://res.cloudinary.com/rroe4rtk/image/upload/v1788455066/evershop-product-page.png)
![EverShop admin catalog listing products with prices and stock](https://res.cloudinary.com/rroe4rtk/image/upload/v1788455067/evershop-admin-products.png)

## About Hosting EverShop

EverShop is a single Node.js process serving server-rendered React for the storefront, the admin single-page app, a REST admin API and a GraphQL endpoint. It spawns two children: a scheduler for cron work such as sitemap regeneration, and an event subscriber reacting to order and catalog changes. There is no worker service and no message broker — the app and its database are the whole deployment.

Key features:

- Simple and variant products, attributes, attribute groups, categories and collections
- Cart, checkout, coupons, tax classes, shipping zones and packages, order management
- Customer accounts, address book, order history and signed order-tracking links
- Page Builder and CMS pages for the home page, landing pages and a blog
- GraphQL API plus a REST admin API, so a headless front end is supported
- Module and theme system for extending the app in TypeScript without forking

On Railway, **Postgres** holds every persistent record — products, orders, customers and the session table — so signing in survives a redeploy. The **evershop** service keeps only uploaded media on its volume; everything else is disposable.

## Why Deploy EverShop on Railway

Railway removes the setup work between a Node.js store and a live shop.

- Managed PostgreSQL with backups on the private network
- Persistent volume for product images
- HTTPS domain on deploy, custom domains in a few clicks
- Secrets, JWT keys and the first admin generated at deploy
- Deploys from GitHub, so extensions ship by pushing a commit

## Common Use Cases for Self-Hosted EverShop

- A direct-to-consumer brand store, where per-order platform fees add up at volume
- A headless storefront: a Next.js or mobile front end on EverShop's GraphQL API
- A B2B or wholesale catalog with custom pricing written as an EverShop module
- A staging store for trying themes, extensions and imports

## Dependencies for EverShop

- **evershop** — [gridalpha/evershop-railway](https://github.com/gridalpha/evershop-railway), one layer on the official [`evershop/evershop`](https://hub.docker.com/r/evershop/evershop) image. Port 3000, storefront and admin, volume at `/app/media`.
- **Postgres** — Railway's managed PostgreSQL. Migrations run at app startup; there is no manual schema step.

### Environment Variables Reference

| Variable | Purpose |
|---|---|
| `EVERSHOP_HOME_URL` | Absolute store URL for links and mail; validated at boot |
| `DB_HOST`, `DB_PORT`, `DB_USER`, `DB_PASSWORD`, `DB_NAME` | PostgreSQL connection |
| `ADMIN_EMAIL`, `ADMIN_PASSWORD`, `ADMIN_FULLNAME` | First administrator; changing the pair resets it |
| `JWT_ADMIN_SECRET`, `JWT_ADMIN_REFRESH_SECRET` | Admin session signing keys |
| `JWT_CUSTOMER_SECRET`, `JWT_CUSTOMER_REFRESH_SECRET` | Customer session signing keys |
| `ORDER_TRACKING_TOKEN_SECRET` | Signs anonymous order-tracking links |
| `COOKIE_SECRET` | Session cookie key; derived automatically if left blank |
| `TRUST_PROXY_HOPS` | Proxy hops in front of the app; `2` behind Railway |
| `LOGGER_LEVEL` | Log verbosity; `info` shows migrations and startup |
| `IMAGE_ALLOWED_HOSTS` | Hosts the `/images` optimizer may fetch |

### Deployment Dependencies

- Source: 
- Image: 
- Docs: 
- Runtime: Node.js 20 on Alpine, PostgreSQL 16 or newer

## Hardware Requirements for Self-Hosting EverShop

| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 1 vCPU | 2 vCPU |
| RAM | 1 GB | 2 GB |
| Storage | 5 GB volume for media | 10 GB+ as the catalog grows |
| Database | PostgreSQL 14+ | PostgreSQL 16+ |

Run a single replica: scheduled jobs live inside the web process with no leader election, so a second replica duplicates every cron run.

## Self-Hosting EverShop

Locally, the fastest route is the official image beside a PostgreSQL container. A minimal Docker Compose file:

```
services:
  app:
    image: evershop/evershop:latest
    environment:
      DB_HOST: database
      DB_PORT: 5432
      DB_USER: postgres
      DB_PASSWORD: postgres
      DB_NAME: postgres
    ports: ["3000:3000"]
    depends_on: [database]
  database:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: postgres
```

To build from source, clone the repository and run the installer, which creates the schema and prompts for the first administrator. On a migrated database, `user:create` adds or resets one without the installer:

```
git clone https://github.com/evershopcommerce/evershop.git
cd evershop &amp;&amp; npm install &amp;&amp; npm run build &amp;&amp; npm run setup &amp;&amp; npm run start
npm run user:create -- --name Owner --email you@example.com --password a-long-password
```

## How Much Does EverShop Cost to Self-Host?

EverShop is free and open source under the GPL-3.0 licence, with no paid tier, seat limits or transaction fees. Self-hosting costs only infrastructure: on Railway that is the app service, the managed PostgreSQL database and the volume, billed by usage. A small store runs in the low single-digit dollars per month, and scales with traffic rather than sales.

## FAQ

**What is EverShop?**

EverShop is an open-source e-commerce platform built with Node.js, TypeScript, React and GraphQL, providing a storefront, an admin panel and a modular extension system for custom online stores.

**What does this Railway template deploy?**

The EverShop application on a public HTTPS domain and a managed PostgreSQL database on the private network. A volume holds uploaded media, and the first administrator is created from the email and password you supply.

**Why does the template include a PostgreSQL database?**

EverShop stores everything durable in PostgreSQL — products, categories, orders, customers, settings and login sessions. It has no SQLite or file-backed mode, so the database is a hard requirement, not an option.

**How do I log in to the EverShop admin panel after deploying?**

Open `/admin` and sign in with the `ADMIN_EMAIL` and `ADMIN_PASSWORD` you set before deploying. To rotate it, change `ADMIN_PASSWORD` and redeploy; a password changed inside the admin UI is never overwritten.

**Where are uploaded product images stored in self-hosted EverShop?**

On the volume at `/app/media`, served back under `/assets`. EverShop can also write to S3-compatible storage, but its S3 mode builds public object URLs, so that bucket must allow anonymous reads.

**Can I use EverShop headlessly with my own front end?**

Yes. EverShop exposes a GraphQL endpoint at `/graphql` plus REST admin routes under `/api`, so you can keep the admin panel here and build a separate storefront against it. Note the core ships email templates but no SMTP transport, so add a mail extension before relying on transactional mail.



## Similar templates

- [Rocky Linux](https://railway.com/deploy/rocky-linux) — Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀
- [Foundry Virtual Tabletop](https://railway.com/deploy/X5tR6G) — A Self-Hosted & Modern Roleplaying Platform
- [Letta Code Remote](https://railway.com/deploy/letta-code-remote) — Run a Letta Code agent 24/7. No inbound ports, just deploy.

Open this page in a browser: https://railway.com/deploy/evershop-store
