Deploy Ever Gauzy

Business platform for employees, projects, time tracking and invoicing

Deploy Ever Gauzy

Just deployed

/data

Just deployed

/var/lib/postgresql/data

Just deployed

gauzy-storage

Bucket

Just deployed

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

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 Two client projects in the Gauzy project register Gauzy task board showing two open work items

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
  • 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

VariablePurpose
DEMO_SUPER_ADMIN_EMAIL / _PASSWORDOwner account created on first boot
API_BASE_URL / CLIENT_BASE_URLPublic URLs the services use for each other
JWT_SECRET and the other three signing keysThe API refuses to start without them
DB_SYNCHRONIZELeave false — that is what runs migrations
REDIS_ENABLED / REDIS_URLTurns on the Redis session store and cache
FILE_PROVIDER + DIGITALOCEAN_*Selects the S3-compatible storage driver
MAIL_HOST and the other SMTP settingsRelay for invitations and password resets

Deployment Dependencies

  • Source and docs: github.com/ever-co/ever-gauzy and 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

ResourceMinimumRecommended
CPU2 vCPU4 vCPU
RAM2 GB for the API, 256 MB for the web app4 GB for the API
Storage5 GB for Postgres20 GB plus object storage
RuntimeNode.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.


Template Content

gauzy-storage

Bucket

More templates in this category

View Template
Rocky Linux
Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀

codestorm
47
View Template
Foundry Virtual Tabletop
A Self-Hosted & Modern Roleplaying Platform

Lucas
71
View Template
Letta Code Remote
Run a Letta Code agent 24/7. No inbound ports, just deploy.

Letta
51