code-server/cursor-fullstack/DEPLOYMENT.md
Cursor Full Stack AI IDE f03924d85c feat: Add deployment docs, gitignore, and complete tests
Co-authored-by: logato7838 <logato7838@vsihay.com>
2025-10-12 12:55:59 +00:00

10 KiB

Deployment Guide - Cursor Full Stack AI IDE

🚀 Production Deployment Options

Local Docker Deployment

# Clone repository
git clone https://github.com/YOUR_USERNAME/cursor-fullstack-ai-ide.git
cd cursor-fullstack-ai-ide

# Build and start
docker compose up --build -d

# Check status
docker compose ps

# View logs
docker compose logs -f

Production Docker Deployment

# Use production compose file
docker compose -f docker-compose.prod.yml up --build -d

# With custom environment
export NODE_ENV=production
export VITE_BACKEND_URL=https://your-domain.com
export VITE_WS_URL=wss://your-domain.com
docker compose -f docker-compose.prod.yml up --build -d

2. Cloud Platform Deployment

AWS Deployment

# Using AWS ECS
aws ecs create-cluster --cluster-name cursor-ide-cluster
aws ecs register-task-definition --cli-input-json file://task-definition.json
aws ecs create-service --cluster cursor-ide-cluster --service-name cursor-ide-service --task-definition cursor-ide:1

# Using AWS App Runner
# Create apprunner.yaml configuration
# Deploy via AWS Console or CLI

Google Cloud Platform

# Using Cloud Run
gcloud run deploy cursor-ide-backend --source ./packages/backend/claudable
gcloud run deploy cursor-ide-frontend --source ./packages/frontend/cursor-web

# Using GKE
kubectl apply -f k8s/

Azure Deployment

# Using Azure Container Instances
az container create --resource-group myResourceGroup --name cursor-ide --image your-registry/cursor-fullstack:latest

# Using Azure App Service
az webapp create --resource-group myResourceGroup --plan myAppServicePlan --name cursor-ide --deployment-container-image-name your-registry/cursor-fullstack:latest

3. VPS/Server Deployment

Ubuntu/Debian Server

# Install Docker
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

# Install Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# Clone and deploy
git clone https://github.com/YOUR_USERNAME/cursor-fullstack-ai-ide.git
cd cursor-fullstack-ai-ide
docker compose up --build -d

CentOS/RHEL Server

# Install Docker
sudo yum install -y docker
sudo systemctl start docker
sudo systemctl enable docker

# Install Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

# Deploy
git clone https://github.com/YOUR_USERNAME/cursor-fullstack-ai-ide.git
cd cursor-fullstack-ai-ide
docker compose up --build -d

🔧 Environment Configuration

Environment Variables

Backend (.env)

NODE_ENV=production
PORT=3001
WS_PORT=8080
CORS_ORIGIN=https://your-domain.com

Frontend (.env)

VITE_BACKEND_URL=https://your-domain.com
VITE_WS_URL=wss://your-domain.com
VITE_APP_NAME=Cursor Full Stack AI IDE

Docker Compose Environment

environment:
  - NODE_ENV=production
  - PORT=3001
  - WS_PORT=8080
  - VITE_BACKEND_URL=https://your-domain.com
  - VITE_WS_URL=wss://your-domain.com

🌐 Domain and SSL Setup

1. Domain Configuration

# Point your domain to your server IP
# A record: your-domain.com -> YOUR_SERVER_IP
# CNAME: www.your-domain.com -> your-domain.com

2. SSL Certificate (Let's Encrypt)

# Install Certbot
sudo apt install certbot python3-certbot-nginx

# Get SSL certificate
sudo certbot --nginx -d your-domain.com -d www.your-domain.com

# Auto-renewal
sudo crontab -e
# Add: 0 12 * * * /usr/bin/certbot renew --quiet

3. Nginx Configuration

server {
    listen 80;
    server_name your-domain.com www.your-domain.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name your-domain.com www.your-domain.com;
    
    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
    
    # Frontend
    location / {
        proxy_pass http://localhost:5173;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    
    # Backend API
    location /api {
        proxy_pass http://localhost:3001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    
    # WebSocket
    location /socket.io/ {
        proxy_pass http://localhost:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
    
    # code-server
    location /code-server/ {
        proxy_pass http://localhost:8081/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

📊 Monitoring and Logging

1. Application Monitoring

# Install monitoring tools
sudo apt install htop iotop nethogs

# Monitor Docker containers
docker stats

# View application logs
docker compose logs -f backend
docker compose logs -f frontend
docker compose logs -f code-server

2. Log Management

# Configure log rotation
sudo nano /etc/logrotate.d/cursor-ide

# Add:
/var/log/cursor-ide/*.log {
    daily
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 644 root root
}

3. Health Checks

# Backend health check
curl http://localhost:3001/health

# Frontend health check
curl http://localhost:5173

# code-server health check
curl http://localhost:8081

🔒 Security Configuration

1. Firewall Setup

# UFW (Ubuntu)
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable

# iptables (CentOS/RHEL)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 3001 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 5173 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 8081 -j ACCEPT

2. Docker Security

# Run containers as non-root user
docker compose exec backend adduser --disabled-password --gecos '' appuser
docker compose exec backend chown -R appuser:appuser /app

# Use Docker secrets for sensitive data
echo "your-api-key" | docker secret create api_key -

3. Application Security

# Set secure headers in Nginx
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;

🚀 CI/CD Pipeline

GitHub Actions

# .github/workflows/deploy.yml
name: Deploy to Production

on:
  push:
    branches: [ main ]

jobs:
  deploy:
    runs-on: ubuntu-latest
    
    steps:
    - uses: actions/checkout@v2
    
    - name: Deploy to server
      uses: appleboy/ssh-action@v0.1.5
      with:
        host: ${{ secrets.HOST }}
        username: ${{ secrets.USERNAME }}
        key: ${{ secrets.SSH_KEY }}
        script: |
          cd /path/to/cursor-fullstack-ai-ide
          git pull origin main
          docker compose down
          docker compose up --build -d          

📈 Performance Optimization

1. Docker Optimization

# Multi-stage build
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production

FROM node:18-alpine AS runtime
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
EXPOSE 3001
CMD ["node", "dist/index.js"]

2. Nginx Optimization

# Enable gzip compression
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;

# Enable caching
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
    expires 1y;
    add_header Cache-Control "public, immutable";
}

3. Application Optimization

// Enable clustering for Node.js
const cluster = require('cluster');
const numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
  for (let i = 0; i < numCPUs; i++) {
    cluster.fork();
  }
} else {
  // Start your application
}

🔄 Backup and Recovery

1. Database Backup

# Backup workspace data
tar -czf workspace-backup-$(date +%Y%m%d).tar.gz workspace/

# Automated backup script
#!/bin/bash
BACKUP_DIR="/backups/cursor-ide"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
tar -czf $BACKUP_DIR/workspace-$DATE.tar.gz workspace/
find $BACKUP_DIR -name "workspace-*.tar.gz" -mtime +7 -delete

2. Container Backup

# Backup Docker volumes
docker run --rm -v cursor-fullstack_workspace:/data -v $(pwd):/backup alpine tar czf /backup/workspace-backup.tar.gz -C /data .

📞 Troubleshooting

Common Issues

  1. Port Already in Use
sudo lsof -i :3001
sudo kill -9 PID
  1. Docker Build Fails
docker system prune -f
docker compose down -v
docker compose up --build -d
  1. SSL Certificate Issues
sudo certbot renew --dry-run
sudo nginx -t
sudo systemctl reload nginx
  1. Memory Issues
# Increase Docker memory limit
docker compose down
docker system prune -f
docker compose up --build -d

🎯 Production Checklist

  • Domain configured and SSL certificate installed
  • Firewall configured
  • Docker containers running
  • Nginx configured and running
  • Health checks passing
  • Monitoring configured
  • Backup strategy implemented
  • Security headers configured
  • Performance optimization applied
  • CI/CD pipeline configured

Your Cursor Full Stack AI IDE is now production-ready! 🚀