Railway Deployment Guide

Deploy EngiVault API v2.0 to Railway with PostgreSQL in minutes

Prerequisites

Railway account
PostgreSQL database (Railway provides this)

Step 1: Connect to Railway

BASH
# Install Railway CLI
npm install -g @railway/cli

# Login to Railway
railway login

# Link your project
railway link

Step 2: Add PostgreSQL Database

BASH
# Add PostgreSQL service to your Railway project
railway add postgresql

# This will automatically set the DATABASE_URL environment variable
# You can verify it was set with:
railway variables

Step 3: Set Required Environment Variables

BASH
# Set JWT secret (REQUIRED)
railway variables set JWT_SECRET=$(node -e "console.log(require('crypto').randomBytes(64).toString('hex'))")

# Set other environment variables
railway variables set NODE_ENV=production
railway variables set LOG_LEVEL=info

# Verify all variables are set
railway variables

Step 4: Deploy

BASH
# Deploy to Railway
railway up

Step 5: Setup Database

BASH
# Generate Prisma client
railway run npm run db:generate

# Run database migrations
railway run npm run db:migrate

# Seed initial data (subscription plans)
railway run npm run db:seed

Environment Variables

Required Variables

DATABASE_URL - Automatically set by Railway PostgreSQL
JWT_SECRET - Your secret key for JWT tokens
NODE_ENV - Set to production

Optional Variables

PORT - Server port (default: 3000)
HOST - Server host (default: 0.0.0.0)
LOG_LEVEL - Logging level (default: info)
RATE_LIMIT_MAX - Rate limit per window (default: 100)
RATE_LIMIT_TIME_WINDOW - Rate limit window in ms (default: 60000)

Monitoring

Health Check

Endpoint: https://your-app.railway.app/health
Railway Health Check: Automatically configured

API Documentation

Swagger UI: https://your-app.railway.app/documentation
OpenAPI JSON: https://your-app.railway.app/documentation/json

Troubleshooting

Database Connection Failed

Check if DATABASE_URL is set with railway variables

Build Failed

Check build logs with railway logs

Authentication Issues

Verify JWT secret is set with railway variables get JWT_SECRET