Deployment
Deploying to Cloudflare Workers, Vercel, or Docker
Deployment
Deploy your SaaS Pack application to production.
Cloudflare Pages (Recommended)
Prerequisites
- Cloudflare account
- Wrangler CLI installed
Deployment Steps
# Install Wrangler
pnpm add -g wrangler
# Login to Cloudflare
wrangler login
# Build the application
pnpm build
# Deploy to Cloudflare Pages
pnpm deploy
Environment Variables
Set environment variables in Cloudflare dashboard:
AUTH_SECRET=your-secret
DATABASE_URL=your-database-url
STRIPE_SECRET_KEY=your-stripe-key
Custom Domain
- Add domain in Cloudflare Pages settings
- Update DNS records
- Configure SSL/TLS
Vercel
Deployment
# Install Vercel CLI
pnpm add -g vercel
# Deploy
vercel
Configuration
{
"buildCommand": "pnpm build",
"outputDirectory": ".output/public",
"framework": "nuxtjs"
}
Docker
Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["node", ".output/server/index.mjs"]
Build and Run
# Build image
docker build -t saaspack .
# Run container
docker run -p 3000:3000 \
-e DATABASE_URL=your-database-url \
-e AUTH_SECRET=your-secret \
saaspack
Docker Compose
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- DATABASE_URL=${DATABASE_URL}
- AUTH_SECRET=${AUTH_SECRET}
depends_on:
- postgres
postgres:
image: postgres:16
environment:
- POSTGRES_DB=saaspack
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
Environment Setup
Production Checklist
- Set strong
AUTH_SECRET - Configure production database
- Set up Stripe webhooks
- Configure email provider
- Set up error tracking (Sentry)
- Configure CDN
- Enable SSL/TLS
- Set up monitoring
- Configure backups
- Review security headers
Monitoring
Error Tracking
// server/plugins/sentry.ts
import * as Sentry from '@sentry/node'
export default defineNitroPlugin((nitroApp) => {
Sentry.init({
dsn: process.env.SENTRY_DSN,
environment: process.env.NODE_ENV
})
})
Performance Monitoring
// Add performance monitoring
export default defineNuxtConfig({
runtimeConfig: {
public: {
sentryDsn: process.env.SENTRY_DSN
}
}
})
CI/CD
GitHub Actions
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: pnpm/action-setup@v2
- uses: actions/setup-node@v3
with:
node-version: 20
cache: 'pnpm'
- run: pnpm install
- run: pnpm build
- run: pnpm deploy
env:
CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}