---
title: "Deploy Ever Gauzy"
description: "Business platform for employees, projects, time tracking and invoicing"
category: "Other"
url: https://railway.com/deploy/gauzy
---

# Deploy Ever Gauzy

Business platform for employees, projects, time tracking and invoicing

**[Deploy Ever Gauzy on Railway](https://railway.com/template/gauzy)**

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

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

## Template content

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

- **Image:** redis:8.2
- **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"`

### webapp https://cdn.jsdelivr.net/gh/ever-co/ever-gauzy@5c9b18cbd06e4258c5d1e65903daa10083ff3591/apps/server/src/assets/images/logos/logo_Gauzy_white.svg

- **Image:** ghcr.io/ever-co/gauzy-webapp:latest
- **Health check:** /
- **Public domain:** Yes

### Postgres https://devicons.railway.app/i/postgresql.svg

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

### api https://cdn.jsdelivr.net/gh/ever-co/ever-gauzy@5c9b18cbd06e4258c5d1e65903daa10083ff3591/apps/server/src/assets/images/logos/logo_Gauzy_white.svg

- **Image:** ghcr.io/ever-co/gauzy-api:latest
- **Health check:** /api
- **Public domain:** Yes

## Buckets

- **gauzy-storage**

## Documentation

# Deploy and Host Ever Gauzy on Railway

Ever Gauzy is an open-source business management platform folding ERP, CRM, HRM, ATS and project management into one application. Agencies and product teams use it to keep employees, clients, projects, tasks, timesheets, expenses and invoices in one database rather than across a time tracker, a spreadsheet and an accounting tool. It is multi-tenant, so one installation can serve several companies, each with its own organizations and permissions.

Deploy Ever Gauzy on Railway and you get four services wired together. **webapp** serves the Angular front end through nginx and rewrites its API origin at container start. **api** is the NestJS server that runs every migration and seeds the first administrator before it opens its port. **Postgres** stores every record; **Redis** backs the session store, the two-layer cache and the API's atomic counters. Uploads go to an object storage bucket and come back through presigned URLs, keeping both app services stateless.

![Gauzy web app and API services over Postgres and Redis](https://res.cloudinary.com/rroe4rtk/image/upload/f_auto,q_auto/v1789595551/ever-gauzy-architecture.webp)

## Getting Started with Ever Gauzy on Railway

Set `DEMO_SUPER_ADMIN_EMAIL` and `DEMO_SUPER_ADMIN_PASSWORD` before the first deploy — those become the owner account, created while the API boots, so the instance is never briefly open. The first deployment takes a few minutes: the API applies the full migration set and seeds countries, currencies, roles, email templates and a "Default Company" organization before it listens. Open the **webapp** URL, sign in, and you land on the time-tracking dashboard.

Go to **Employees → Manage** to confirm the seeded accounts, then **Organization → Manage** to rename the default company and set your currency and time zone. Create a project under **Organization → Projects** and a task under **Tasks → Dashboard**; if both survive a reload, the API, Postgres and Redis are wired correctly. Adding an image to a project confirms object storage — the thumbnail comes straight from the bucket. Invite colleagues from **Employees → Manage Invites** once the SMTP settings are filled in.

![Gauzy employee directory listing three staff accounts](https://res.cloudinary.com/rroe4rtk/image/upload/f_auto,q_auto/v1789595553/ever-gauzy-employees.webp)
![Two client projects in the Gauzy project register](https://res.cloudinary.com/rroe4rtk/image/upload/f_auto,q_auto/v1789595555/ever-gauzy-projects.webp)
![Gauzy task board showing two open work items](https://res.cloudinary.com/rroe4rtk/image/upload/f_auto,q_auto/v1789595558/ever-gauzy-tasks.webp)

## About Hosting Ever Gauzy

Most teams reach for Gauzy when three or four SaaS subscriptions stop talking to each other: hours logged in one tool, invoices raised in another, headcount in a third. Self-hosting puts employee records, client contracts and financial data on infrastructure you control, which matters when a privacy rule covers it.

Key features:

- Employee directory with levels, positions, employment types and time off
- Projects and tasks with teams, sprints, estimates and statuses
- Time tracking, timesheets and activity reports that feed billing
- Invoices, estimates, expenses, income, payments and recurring expenses
- Sales pipelines, deals, contacts, leads and candidate tracking
- Goals, KPIs and organization-wide reporting
- Multi-tenant, with a per-role permission matrix

The **api** service owns all business logic and is the only thing that talks to Postgres; it exposes a REST API under `/api` that the browser calls with a bearer token. The **webapp** service ships only static files and an nginx config, so it restarts instantly. **Redis** holds Passport sessions, the cache in front of hot queries and the API's atomic counters. Object storage takes every upload, so neither application service needs a volume.

## Why Deploy Ever Gauzy on Railway

Wiring a four-service ERP by hand costs a weekend.

- Postgres and Redis provisioned, backed up and privately networked
- Object storage attached and its credentials injected, no bucket policy to write
- Both public URLs issued automatically and referenced across services
- Health checks watch the API's real boot path, migrations and seed included
- Horizontal scaling works: neither application service keeps local state

## Common Use Cases for Self-Hosted Ever Gauzy

- A digital agency billing clients from tracked hours, invoicing from the same timesheets
- A consultancy running recruitment, onboarding and time off for a distributed team
- A software studio tracking sprint tasks and per-project profitability in one place
- A holding company running several legal entities as tenants on one install

## Dependencies for Ever Gauzy

- `ghcr.io/ever-co/gauzy-webapp:latest` — Angular front end on nginx, port 4200
- `ghcr.io/ever-co/gauzy-api:latest` — NestJS API on port 3000, source at [github.com/ever-co/ever-gauzy](https://github.com/ever-co/ever-gauzy)
- `ghcr.io/railwayapp-templates/postgres-ssl:18` — primary datastore for every record
- `redis:8.2` — session store, cache layer and atomic operations
- A Railway object storage bucket — uploads, served through presigned URLs

### Environment Variables Reference

| Variable | Purpose |
|---|---|
| `DEMO_SUPER_ADMIN_EMAIL` / `_PASSWORD` | Owner account created on first boot |
| `API_BASE_URL` / `CLIENT_BASE_URL` | Public URLs the services use for each other |
| `JWT_SECRET` and the other three signing keys | The API refuses to start without them |
| `DB_SYNCHRONIZE` | Leave `false` — that is what runs migrations |
| `REDIS_ENABLED` / `REDIS_URL` | Turns on the Redis session store and cache |
| `FILE_PROVIDER` + `DIGITALOCEAN_*` | Selects the S3-compatible storage driver |
| `MAIL_HOST` and the other SMTP settings | Relay for invitations and password resets |

### Deployment Dependencies

- Source and docs: [github.com/ever-co/ever-gauzy](https://github.com/ever-co/ever-gauzy) and [gauzy.co](https://gauzy.co)
- Container images: `ghcr.io/ever-co/gauzy-api` and `ghcr.io/ever-co/gauzy-webapp`
- Runtime: Node.js 24 on Alpine, PostgreSQL 18, Redis 8

## Hardware Requirements for Self-Hosting Ever Gauzy

| Resource | Minimum | Recommended |
|---|---|---|
| CPU | 2 vCPU | 4 vCPU |
| RAM | 2 GB for the API, 256 MB for the web app | 4 GB for the API |
| Storage | 5 GB for Postgres | 20 GB plus object storage |
| Runtime | Node.js 24, PostgreSQL 14+, Redis 6+ | PostgreSQL 18, Redis 8 |

The API is the memory-hungry half: its first boot runs every migration and the full seed, and the image sets a very high Node heap ceiling worth lowering to about half the container's memory.

## Self-Hosting Ever Gauzy with Docker

The upstream repository ships a Compose file covering the API, web app, Postgres, Redis and a MinIO bucket:

```
git clone https://github.com/ever-co/ever-gauzy.git
cd ever-gauzy
cp .env.compose.sample .env.compose
docker compose up -d
```

To run the published images against your own Postgres and Redis, the API needs connection details, signing keys and the account to seed:

```
docker run -d --name gauzy-api -p 3000:3000 \
  -e API_HOST=0.0.0.0 -e API_PORT=3000 -e DB_TYPE=postgres \
  -e DB_HOST=postgres -e DB_NAME=gauzy -e DB_USER=postgres \
  -e DB_PASS=secret -e DB_SYNCHRONIZE=false \
  -e REDIS_ENABLED=true -e REDIS_URL=redis://redis:6379 \
  -e JWT_SECRET=... -e JWT_REFRESH_TOKEN_SECRET=... \
  -e JWT_VERIFICATION_TOKEN_SECRET=... -e EXPRESS_SESSION_SECRET=... \
  -e DEMO_SUPER_ADMIN_EMAIL=you@example.com \
  -e DEMO_SUPER_ADMIN_PASSWORD=... ghcr.io/ever-co/gauzy-api:latest
```

Point the web app at it with `API_BASE_URL` and expose port 4200. `API_HOST` is a bind address, not a hostname — the image's `api` default only works inside Compose.

## How Much Does Ever Gauzy Cost to Self-Host?

Ever Gauzy is free and open source under AGPL-3.0 — no licence fee, no seat count. Ever Co. also runs a hosted version at app.gauzy.co with paid plans, but the self-hosted build is the same application. On Railway you pay only for the compute, storage and bandwidth the four services use, which grows with headcount and files rather than per user.

## FAQ

**What is Ever Gauzy?**
An open-source business management platform covering ERP, CRM, HRM, ATS and project management in one app, built with NestJS and Angular under AGPL-3.0.

**What does this Railway template deploy?**
Four services — the Angular web app, the NestJS API, PostgreSQL and Redis — plus an object storage bucket. The API runs migrations and seeds the first administrator on first boot.

**Why does the template include Redis as well as Postgres?**
Postgres holds the records. Redis holds Passport sessions, the query cache and the API's atomic counters — which is what lets you raise the API's replica count without losing anyone's session.

**How do I create the first admin account in self-hosted Ever Gauzy?**
Set `DEMO_SUPER_ADMIN_EMAIL` and `DEMO_SUPER_ADMIN_PASSWORD` before the first deploy. The API creates that account while it starts, before it accepts a request, so nobody can claim the instance first. Set `DEMO_ADMIN_*` and `DEMO_EMPLOYEE_*` too, or those seeded accounts keep their published default passwords.

**Can I stop strangers registering on my Gauzy instance?**
Not with a setting. `POST /api/auth/register` is public by design and each registrant gets their own isolated tenant, rate-limited to three attempts a minute. To close it, put a proxy in front of the API and block that route.

**Where are uploaded files stored in self-hosted Ever Gauzy?**
In the attached object storage bucket, addressed in path style and read through presigned URLs. Neither app service needs a volume, so both can run several replicas.


## 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/gauzy
