Deployment
Deploy your SaaS application to any hosting platform.
This guide covers the general steps to deploy your application to any hosting platform that supports Next.js.
Deployment Overview
Deploying your application involves these key steps:
- Provision infrastructure - Database, storage, and hosting
- Configure environment variables - Set production credentials
- Deploy the application - Push code to your hosting platform
- Run database migrations - Set up your database schema
- Configure webhooks - Connect your billing provider
Infrastructure Requirements
Your production environment needs:
| Component | Purpose | Options |
|---|---|---|
| Hosting | Run your Next.js app | Vercel, Railway, AWS, Cloudflare |
| Database | PostgreSQL database | Neon, PlanetScale, Supabase, Railway |
| Storage | File uploads | AWS S3, Cloudflare R2, Railway Storage |
| Transactional emails | Resend, Postmark, SendGrid |
Environment Variables
Every hosting platform requires you to set environment variables. Copy these from your Environment Setup:
Core Variables
DATABASE_URL=postgresql://...NEXT_PUBLIC_SITE_URL=https://your-domain.comNEXT_PUBLIC_BILLING_PROVIDER=stripeStorage Variables
STORAGE_BASE_URL=https://...STORAGE_S3_ACCESS_KEY_ID=...STORAGE_S3_SECRET_ACCESS_KEY=...STORAGE_S3_BUCKET=...STORAGE_S3_REGION=...Billing Variables
For Stripe:
STRIPE_SECRET_KEY=sk_live_...STRIPE_WEBHOOK_SECRET=whsec_...For Polar:
POLAR_ACCESS_TOKEN=...Additional Environment Variables
If you configured additional settings using the Dev Tools during development (OAuth providers, email, feature flags, etc.), make sure to add those environment variables to your production environment as well. Refer to the Environment Setup guide for the complete list.
Build Configuration
For the monorepo structure, configure your hosting platform:
- Root Directory:
apps/web - Build Command:
pnpm build - Output Directory:
.next - Install Command:
pnpm install
Database Migrations
After your first deployment, run Drizzle migrations to create the database schema:
read -s DATABASE_URL && export DATABASE_URL && pnpm --filter "@kit/database" drizzle:migrateThis command:
- Prompts for your
DATABASE_URL(hidden input) - Exports it as an environment variable
- Runs the Drizzle migration
Post-Deployment Checklist
After deploying:
- [ ] Application loads without errors
- [ ] Database connection works
- [ ] Authentication flows work (sign up, sign in)
- [ ] Billing webhooks receive events
- [ ] File uploads work
- [ ] Emails send successfully
Platform Guides
For step-by-step instructions on specific platforms:
- Railway - All-in-one platform with built-in database and storage