Deployment
Deploy your Irresistible applications with confidence using our powerful deployment platform.
Overview
Irresistible provides seamless deployment with:
- One-click deployment from CLI or dashboard
 - Automatic SSL certificates via Let’s Encrypt
 - Global CDN for fast content delivery
 - Auto-scaling based on traffic
 - Zero-downtime deployments with rolling updates
 - Multiple environments (staging, production)
 
Quick Deploy
From CLI
# Deploy to production
irresistible deploy
# Deploy to staging
irresistible deploy --env staging
# Deploy with custom domain
irresistible deploy --domain myapp.com From Dashboard
- Navigate to your project
 - Click “Deploy” button
 - Select environment
 - Review changes
 - Click “Deploy Now”
 
From Builder
Press Cmd/Ctrl + Shift + D or click the deploy button in the toolbar.
Deployment Configuration
Basic Configuration
Create irresistible.config.js in your project root:
export default {
  name: 'my-app',
  
  deploy: {
    // Production environment
    production: {
      url: 'https://myapp.com',
      region: 'us-east-1',
      instances: {
        min: 2,
        max: 10
      }
    },
    
    // Staging environment
    staging: {
      url: 'https://staging.myapp.com',
      region: 'us-west-2',
      instances: {
        min: 1,
        max: 3
      }
    }
  }
} Advanced Configuration
export default {
  deploy: {
    production: {
      // Domain settings
      domains: ['myapp.com', 'www.myapp.com'],
      
      // SSL configuration
      ssl: {
        provider: 'letsencrypt',
        email: 'admin@myapp.com'
      },
      
      // Scaling configuration
      scaling: {
        cpu: 80,        // Scale up at 80% CPU
        memory: 85,     // Scale up at 85% memory
        requests: 1000  // Scale up at 1000 req/min
      },
      
      // Health checks
      healthCheck: {
        path: '/health',
        interval: 30,
        timeout: 5,
        healthy: 2,
        unhealthy: 3
      },
      
      // Environment variables
      env: {
        NODE_ENV: 'production',
        API_URL: 'https://api.myapp.com'
      }
    }
  }
} Build Configuration
Build Settings
export default {
  build: {
    // Output directory
    output: 'dist',
    
    // Build command (optional)
    command: 'npm run build',
    
    // Node version
    node: '20',
    
    // Build environment variables
    env: {
      VITE_API_URL: process.env.API_URL
    }
  }
} Framework-Specific Builds
SvelteKit
build: {
  adapter: '@sveltejs/adapter-node',
  target: 'node18'
} Next.js
build: {
  output: 'standalone',
  experimental: {
    outputFileTracingRoot: path.join(__dirname, '../')
  }
} Nuxt
build: {
  preset: 'node-server',
  nitro: {
    preset: 'node-server'
  }
} Environment Variables
Setting Variables
Via CLI
# Set a single variable
irresistible env set API_KEY=secret123
# Set multiple variables
irresistible env set API_KEY=secret123 DB_URL=postgres://...
# From .env file
irresistible env import .env.production Via Dashboard
- Go to Project Settings
 - Click “Environment Variables”
 - Add variables for each environment
 - Click “Save”
 
Using Variables
// In your application
const apiKey = process.env.API_KEY;
const dbUrl = process.env.DATABASE_URL;
// In build config
export default {
  build: {
    env: {
      VITE_API_URL: process.env.API_URL,
      PUBLIC_SITE_URL: process.env.SITE_URL
    }
  }
} Secret Management
Sensitive variables are encrypted at rest:
# Mark as secret
irresistible env set DB_PASSWORD=secret --secret
# List secrets (values hidden)
irresistible env list --secrets Custom Domains
Adding a Domain
Via CLI
# Add domain
irresistible domain add myapp.com
# Add with automatic DNS
irresistible domain add myapp.com --configure-dns Via Dashboard
- Go to Project Settings
 - Click “Domains”
 - Enter your domain
 - Follow DNS configuration steps
 
DNS Configuration
Add these records to your domain:
Type  Name    Value
A     @       76.76.21.21
A     www     76.76.21.21 Or for CNAME:
Type  Name    Value
CNAME @       myapp.irresistible.app
CNAME www     myapp.irresistible.app SSL Certificates
SSL certificates are automatically provisioned:
deploy: {
  ssl: {
    // Automatic Let's Encrypt (default)
    provider: 'letsencrypt',
    
    // Or bring your own
    provider: 'custom',
    cert: './certs/cert.pem',
    key: './certs/key.pem'
  }
} Deployment Process
Build Pipeline
- Code Push - Changes detected
 - Build - Application built
 - Test - Tests run (if configured)
 - Package - Docker image created
 - Deploy - Rolling deployment
 - Health Check - Verify deployment
 - Go Live - Traffic routed
 
Zero-Downtime Deployment
deploy: {
  strategy: 'rolling', // default
  
  rolling: {
    maxSurge: 2,       // Extra instances during deploy
    maxUnavailable: 0  // No downtime
  }
} Rollback
Instant Rollback
# Rollback to previous version
irresistible rollback
# Rollback to specific version
irresistible rollback v1.2.3
# List versions
irresistible versions Monitoring & Logs
Viewing Logs
CLI
# Stream logs
irresistible logs
# Filter logs
irresistible logs --filter error
# Specific time range
irresistible logs --since 1h Dashboard
- Real-time log streaming
 - Search and filter
 - Download logs
 - Set up alerts
 
Metrics
Monitor your application:
- Response time
 - Error rate
 - CPU/Memory usage
 - Request count
 - Active users
 
# View metrics
irresistible metrics
# Specific metric
irresistible metrics cpu --period 24h Advanced Features
Edge Functions
Deploy serverless functions at the edge:
// api/hello.edge.js
export default function handler(request) {
  return new Response('Hello from the edge!');
}
// Configure in irresistible.config.js
export default {
  edge: {
    functions: './api/*.edge.js',
    routes: {
      '/api/*': 'edge'
    }
  }
} Static Assets
Configure CDN for static assets:
deploy: {
  static: {
    // Cache static assets
    cache: {
      '*.js': '1y',
      '*.css': '1y',
      '*.jpg': '30d',
      '*.png': '30d'
    },
    
    // Compression
    compress: ['js', 'css', 'svg'],
    
    // Image optimization
    images: {
      formats: ['webp', 'avif'],
      sizes: [640, 750, 1080, 1200]
    }
  }
} Database Migrations
Run migrations during deployment:
deploy: {
  hooks: {
    beforeDeploy: 'npm run migrate',
    afterDeploy: 'npm run seed'
  }
} Deployment Hooks
deploy: {
  hooks: {
    // Run before build
    preBuild: 'npm run test',
    
    // Run after build
    postBuild: 'npm run analyze',
    
    // Run before deploy
    beforeDeploy: async (context) => {
      console.log('Deploying version:', context.version);
    },
    
    // Run after deploy
    afterDeploy: async (context) => {
      // Send notification
      await notify('Deployment complete!');
    }
  }
} Deployment Strategies
Blue-Green Deployment
deploy: {
  strategy: 'blue-green',
  blueGreen: {
    // Time before switching
    warmupTime: 300,
    // Percentage of traffic to test
    testTraffic: 10
  }
} Canary Deployment
deploy: {
  strategy: 'canary',
  canary: {
    // Initial traffic percentage
    initial: 5,
    // Increment
    increment: 10,
    // Interval
    interval: 300
  }
} A/B Testing
deploy: {
  experiments: {
    'new-homepage': {
      traffic: 50,
      cookie: 'experiment-id'
    }
  }
} Troubleshooting
Common Issues
Build Failures
# View build logs
irresistible logs --build
# Clear cache and rebuild
irresistible deploy --no-cache Domain Not Working
# Check DNS propagation
irresistible domain check myapp.com
# Force SSL renewal
irresistible ssl renew myapp.com Performance Issues
# Check metrics
irresistible metrics --detailed
# Scale manually
irresistible scale 5 Debug Mode
# Deploy with verbose logging
irresistible deploy --debug
# Dry run (no actual deployment)
irresistible deploy --dry-run Best Practices
1. Use Environment Variables
Never hardcode sensitive data:
// Bad
const apiKey = 'sk_live_abc123';
// Good
const apiKey = process.env.API_KEY; 2. Configure Health Checks
// pages/api/health.js
export default function handler(req, res) {
  // Check database
  // Check external services
  res.status(200).json({ status: 'healthy' });
} 3. Optimize Assets
- Compress images
 - Minify CSS/JS
 - Use CDN for static files
 - Enable caching headers
 
4. Monitor Everything
- Set up alerts
 - Track key metrics
 - Monitor error rates
 - Review logs regularly
 
5. Test Deployments
# Deploy to staging first
irresistible deploy --env staging
# Run tests
npm run test:e2e
# Then deploy to production
irresistible deploy --env production Next Steps
- Configure Environment Variables
 - Set up Custom Domains
 - Learn about SSL Certificates
 - Explore Scaling Options