☁️ Cloud Platform Deployment
Nếu bạn không muốn manage VPS, các cloud platforms cung cấp cách deploy n8n đơn giản hơn. Bài này covers 3 platforms phổ biến nhất.
Platform Comparison
Quick Overview:
1PLATFORM SETUP COST PROS CONS2────────────────────────────────────────────────────────3Railway 5 min $5+/mo Easy, fast Limited config4Render 10 min $7+/mo Good free tier Cold starts5DigitalOcean 20 min $12+/mo Full control More setupCost Breakdown:
1MONTHLY COST ESTIMATE2─────────────────────3 4Railway:5├── Free tier: $5 credit (limited)6├── Basic: $5-15/mo7└── Growth: $15-30/mo8 9Render:10├── Free tier: Sleep after 15min11├── Starter: $7/mo per service12└── + PostgreSQL: $7/mo13└── Total: $14+/mo14 15DigitalOcean:16├── App Platform: $12/mo min17├── Or Droplet: $6/mo + setup time18└── + Managed DB: $15/mo (optional)Option 1: Railway
Step-by-Step:
1. Create Railway Account:
11. Go to https://railway.app22. Sign up with GitHub33. Verify email2. Create New Project:
11. Click "New Project"22. Select "Deploy a Template"33. Search "n8n"44. Click n8n template3. Configure Variables:
1# Railway auto-provisions PostgreSQL2# Add these environment variables:3 4N8N_BASIC_AUTH_ACTIVE=true5N8N_BASIC_AUTH_USER=admin6N8N_BASIC_AUTH_PASSWORD=<generate-strong-password>7GENERIC_TIMEZONE=Asia/Ho_Chi_Minh8N8N_PROTOCOL=https9WEBHOOK_URL=${RAILWAY_STATIC_URL}4. Setup Custom Domain:
11. Go to Settings > Domains22. Add custom domain: n8n.yourdomain.com33. Update DNS (CNAME to railway subdomain)44. Wait for SSL5. Configure Resources:
11. Go to Settings > General22. Adjust memory/CPU if needed33. Enable restart on deployRailway docker-compose.yml:
1# railway.toml (alternative to template)2[build]3builder = "dockerfile"4dockerfilePath = "Dockerfile"5 6[deploy]7startCommand = "n8n start"8healthcheckPath = "/healthz"9healthcheckTimeout = 30010restartPolicyType = "on_failure"Pros/Cons:
1✅ PROS:2• Fastest deployment3• Auto PostgreSQL4• Great DX5• Good pricing6• Auto SSL7 8❌ CONS:9• Limited customization10• No SSH access11• Costs grow with usage12• Execution limits (CPU time)Option 2: Render
Step-by-Step:
1. Create Render Account:
11. Go to https://render.com22. Sign up with GitHub33. Verify email2. Create PostgreSQL Database:
11. Dashboard > New > PostgreSQL22. Name: n8n-db33. Region: (choose closest)44. Plan: Starter ($7/mo) or Free55. Create Database66. Note: Internal Database URL3. Create Web Service:
11. Dashboard > New > Web Service22. Select "Deploy an existing image"33. Image URL: n8nio/n8n44. Name: n8n55. Region: Same as database66. Instance Type: Starter ($7/mo)4. Configure Environment:
1# Environment Variables:2 3# Database (from step 2)4DB_TYPE=postgresdb5DB_POSTGRESDB_HOST=<internal-hostname>6DB_POSTGRESDB_PORT=54327DB_POSTGRESDB_DATABASE=n8n_db8DB_POSTGRESDB_USER=n8n_user9DB_POSTGRESDB_PASSWORD=<from-render>10 11# n8n Settings12N8N_BASIC_AUTH_ACTIVE=true13N8N_BASIC_AUTH_USER=admin14N8N_BASIC_AUTH_PASSWORD=<strong-password>15N8N_HOST=<your-service>.onrender.com16N8N_PROTOCOL=https17WEBHOOK_URL=https://<your-service>.onrender.com/18GENERIC_TIMEZONE=Asia/Ho_Chi_Minh19 20# Render specific21N8N_PORT=100005. Configure Persistent Disk:
11. Go to service settings22. Disks > Add Disk33. Name: n8n-data44. Mount Path: /home/node/.n8n55. Size: 1 GB (or more)6. Custom Domain:
11. Settings > Custom Domains22. Add domain: n8n.yourdomain.com33. Add CNAME record to DNS44. Auto SSLrender.yaml (Infrastructure as Code):
1# render.yaml2services:3 - type: web4 name: n8n5 env: docker6 dockerfilePath: ./Dockerfile7 plan: starter8 disk:9 name: n8n-data10 mountPath: /home/node/.n8n11 sizeGB: 112 envVars:13 - key: DB_TYPE14 value: postgresdb15 - key: DB_POSTGRESDB_HOST16 fromDatabase:17 name: n8n-db18 property: host19 - key: DB_POSTGRESDB_PORT20 fromDatabase:21 name: n8n-db22 property: port23 - key: DB_POSTGRESDB_USER24 fromDatabase:25 name: n8n-db26 property: user27 - key: DB_POSTGRESDB_PASSWORD28 fromDatabase:29 name: n8n-db30 property: password31 - key: DB_POSTGRESDB_DATABASE32 fromDatabase:33 name: n8n-db34 property: database35 - key: N8N_BASIC_AUTH_ACTIVE36 value: true37 - key: N8N_BASIC_AUTH_USER38 sync: false39 - key: N8N_BASIC_AUTH_PASSWORD40 sync: false41 42databases:43 - name: n8n-db44 plan: starterPros/Cons:
1✅ PROS:2• Good free tier3• Managed PostgreSQL4• IaC support (render.yaml)5• Simple scaling6• Good documentation7 8❌ CONS:9• Cold starts (free tier)10• Limited disk options11• Less customizable12• Slower deploysOption 3: DigitalOcean
Via App Platform:
1. Create App:
11. DigitalOcean > Apps > Create App22. Source: Docker Hub33. Repository: n8nio/n8n44. Click Next2. Configure Resources:
11. Edit Plan > Basic > $12/mo22. Add Database Component33. Type: PostgreSQL44. Plan: Basic ($15/mo)55. Click Next3. Environment Variables:
1DB_TYPE=postgresdb2DB_POSTGRESDB_HOST=${db.HOSTNAME}3DB_POSTGRESDB_PORT=${db.PORT}4DB_POSTGRESDB_DATABASE=${db.DATABASE}5DB_POSTGRESDB_USER=${db.USERNAME}6DB_POSTGRESDB_PASSWORD=${db.PASSWORD}7 8N8N_BASIC_AUTH_ACTIVE=true9N8N_BASIC_AUTH_USER=admin10N8N_BASIC_AUTH_PASSWORD=<password>11N8N_HOST=${APP_DOMAIN}12N8N_PROTOCOL=https13WEBHOOK_URL=https://${APP_DOMAIN}/14GENERIC_TIMEZONE=Asia/Ho_Chi_MinhVia Droplet (More Control):
1. Create Droplet:
11. Create Droplet22. Image: Docker on Ubuntu33. Plan: $12/mo (2GB RAM recommended)44. Region: Singapore/nearest55. SSH Key: Add your key66. Create2. SSH and Setup:
1# SSH into droplet2ssh root@your_droplet_ip3 4# Create directory5mkdir -p /opt/n8n6cd /opt/n8n7 8# Create docker-compose.yml9nano docker-compose.yml10# (paste production stack from previous lesson)11 12# Create .env13nano .env14 15# Start16docker compose up -d3. Setup Firewall:
1ufw allow ssh2ufw allow http3ufw allow https4ufw enable4. Setup Domain:
11. Add A record: n8n.yourdomain.com → droplet_ip22. Wait for DNS propagation33. Setup nginx/SSL (see previous lesson)Pros/Cons:
1✅ PROS:2• Full control (Droplet)3• Managed services available4• Good network (Singapore DC)5• Predictable pricing6• SSH access (Droplet)7 8❌ CONS:9• More setup work10• Higher minimum cost11• Manual scaling12• Manual backups (Droplet)Quick Start Scripts
Railway One-Click:
1# Just use the template!2# https://railway.app/template/n8nRender One-Click:
1# Deploy from render.yaml2# Or use "Deploy to Render" buttonDigitalOcean Droplet:
1#!/bin/bash2# quick-setup.sh - Run on fresh droplet3 4# Update system5apt update && apt upgrade -y6 7# Install Docker8curl -fsSL https://get.docker.com | sh9 10# Create n8n directory11mkdir -p /opt/n8n && cd /opt/n8n12 13# Download docker-compose14cat > docker-compose.yml << 'EOF'15version: "3.8"16services:17 n8n:18 image: n8nio/n8n19 restart: unless-stopped20 ports:21 - "5678:5678"22 environment:23 - N8N_BASIC_AUTH_ACTIVE=true24 - N8N_BASIC_AUTH_USER=admin25 - N8N_BASIC_AUTH_PASSWORD=changethis26 - GENERIC_TIMEZONE=Asia/Ho_Chi_Minh27 volumes:28 - n8n_data:/home/node/.n8n29volumes:30 n8n_data:31EOF32 33# Start34docker compose up -d35 36echo "n8n running at http://$(curl -s ifconfig.me):5678"Platform Decision Matrix
1CHOOSE RAILWAY IF:2├── Want fastest setup3├── Small-medium workflows4├── Don't need SSH5└── Budget $10-30/mo6 7CHOOSE RENDER IF:8├── Want free tier9├── Need managed PostgreSQL10├── Like IaC (render.yaml)11└── Budget $15-30/mo12 13CHOOSE DIGITALOCEAN DROPLET IF:14├── Need full control15├── Want SSH access16├── Have DevOps skills17├── Running many workflows18└── Budget $15-50/mo19 20CHOOSE DIGITALOCEAN APP IF:21├── Want managed experience22├── Need DigitalOcean ecosystem23├── Prefer GUI management24└── Budget $25-50/moBài Tập Thực Hành
Deploy n8n on any platform:
- Choose your platform based on needs
- Follow step-by-step guide above
- Configure environment variables
- Add custom domain (optional)
- Test webhook with test workflow
- Document your setup
Share deployment screenshots in community! ☁️
Key Takeaways
- 🚀 Railway = Fastest to deploy
- 💰 Render = Best free tier
- 🔧 DigitalOcean = Most control
- 🔒 Always use strong passwords
- 📝 Document your environment variables
Tiếp Theo
Bài tiếp theo: Environment Variables - Deep dive vào tất cả n8n settings và configurations.
