Lý thuyết
50 phút
Bài 4/15

Cloud Platform Deployment

Deploy n8n nhanh chóng trên Railway, Render, và DigitalOcean - step by step guides

☁️ Cloud Platform Deployment

Cloud Computing

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:

Text
1PLATFORM SETUP COST PROS CONS
2────────────────────────────────────────────────────────
3Railway 5 min $5+/mo Easy, fast Limited config
4Render 10 min $7+/mo Good free tier Cold starts
5DigitalOcean 20 min $12+/mo Full control More setup

Cost Breakdown:

Text
1MONTHLY COST ESTIMATE
2─────────────────────
3
4Railway:
5├── Free tier: $5 credit (limited)
6├── Basic: $5-15/mo
7└── Growth: $15-30/mo
8
9Render:
10├── Free tier: Sleep after 15min
11├── Starter: $7/mo per service
12└── + PostgreSQL: $7/mo
13└── Total: $14+/mo
14
15DigitalOcean:
16├── App Platform: $12/mo min
17├── Or Droplet: $6/mo + setup time
18└── + Managed DB: $15/mo (optional)

Option 1: Railway

Step-by-Step:

1. Create Railway Account:

Text
11. Go to https://railway.app
22. Sign up with GitHub
33. Verify email

2. Create New Project:

Text
11. Click "New Project"
22. Select "Deploy a Template"
33. Search "n8n"
44. Click n8n template

3. Configure Variables:

Bash
1# Railway auto-provisions PostgreSQL
2# Add these environment variables:
3
4N8N_BASIC_AUTH_ACTIVE=true
5N8N_BASIC_AUTH_USER=admin
6N8N_BASIC_AUTH_PASSWORD=<generate-strong-password>
7GENERIC_TIMEZONE=Asia/Ho_Chi_Minh
8N8N_PROTOCOL=https
9WEBHOOK_URL=${RAILWAY_STATIC_URL}

4. Setup Custom Domain:

Text
11. Go to Settings > Domains
22. Add custom domain: n8n.yourdomain.com
33. Update DNS (CNAME to railway subdomain)
44. Wait for SSL

5. Configure Resources:

Text
11. Go to Settings > General
22. Adjust memory/CPU if needed
33. Enable restart on deploy

Railway docker-compose.yml:

yaml
1# railway.toml (alternative to template)
2[build]
3builder = "dockerfile"
4dockerfilePath = "Dockerfile"
5
6[deploy]
7startCommand = "n8n start"
8healthcheckPath = "/healthz"
9healthcheckTimeout = 300
10restartPolicyType = "on_failure"

Pros/Cons:

Text
1✅ PROS:
2• Fastest deployment
3• Auto PostgreSQL
4• Great DX
5• Good pricing
6• Auto SSL
7
8❌ CONS:
9• Limited customization
10• No SSH access
11• Costs grow with usage
12• Execution limits (CPU time)

Option 2: Render

Step-by-Step:

1. Create Render Account:

Text
11. Go to https://render.com
22. Sign up with GitHub
33. Verify email

2. Create PostgreSQL Database:

Text
11. Dashboard > New > PostgreSQL
22. Name: n8n-db
33. Region: (choose closest)
44. Plan: Starter ($7/mo) or Free
55. Create Database
66. Note: Internal Database URL

3. Create Web Service:

Text
11. Dashboard > New > Web Service
22. Select "Deploy an existing image"
33. Image URL: n8nio/n8n
44. Name: n8n
55. Region: Same as database
66. Instance Type: Starter ($7/mo)

4. Configure Environment:

Bash
1# Environment Variables:
2
3# Database (from step 2)
4DB_TYPE=postgresdb
5DB_POSTGRESDB_HOST=<internal-hostname>
6DB_POSTGRESDB_PORT=5432
7DB_POSTGRESDB_DATABASE=n8n_db
8DB_POSTGRESDB_USER=n8n_user
9DB_POSTGRESDB_PASSWORD=<from-render>
10
11# n8n Settings
12N8N_BASIC_AUTH_ACTIVE=true
13N8N_BASIC_AUTH_USER=admin
14N8N_BASIC_AUTH_PASSWORD=<strong-password>
15N8N_HOST=<your-service>.onrender.com
16N8N_PROTOCOL=https
17WEBHOOK_URL=https://<your-service>.onrender.com/
18GENERIC_TIMEZONE=Asia/Ho_Chi_Minh
19
20# Render specific
21N8N_PORT=10000

5. Configure Persistent Disk:

Text
11. Go to service settings
22. Disks > Add Disk
33. Name: n8n-data
44. Mount Path: /home/node/.n8n
55. Size: 1 GB (or more)

6. Custom Domain:

Text
11. Settings > Custom Domains
22. Add domain: n8n.yourdomain.com
33. Add CNAME record to DNS
44. Auto SSL

render.yaml (Infrastructure as Code):

yaml
1# render.yaml
2services:
3 - type: web
4 name: n8n
5 env: docker
6 dockerfilePath: ./Dockerfile
7 plan: starter
8 disk:
9 name: n8n-data
10 mountPath: /home/node/.n8n
11 sizeGB: 1
12 envVars:
13 - key: DB_TYPE
14 value: postgresdb
15 - key: DB_POSTGRESDB_HOST
16 fromDatabase:
17 name: n8n-db
18 property: host
19 - key: DB_POSTGRESDB_PORT
20 fromDatabase:
21 name: n8n-db
22 property: port
23 - key: DB_POSTGRESDB_USER
24 fromDatabase:
25 name: n8n-db
26 property: user
27 - key: DB_POSTGRESDB_PASSWORD
28 fromDatabase:
29 name: n8n-db
30 property: password
31 - key: DB_POSTGRESDB_DATABASE
32 fromDatabase:
33 name: n8n-db
34 property: database
35 - key: N8N_BASIC_AUTH_ACTIVE
36 value: true
37 - key: N8N_BASIC_AUTH_USER
38 sync: false
39 - key: N8N_BASIC_AUTH_PASSWORD
40 sync: false
41
42databases:
43 - name: n8n-db
44 plan: starter

Pros/Cons:

Text
1✅ PROS:
2• Good free tier
3• Managed PostgreSQL
4• IaC support (render.yaml)
5• Simple scaling
6• Good documentation
7
8❌ CONS:
9• Cold starts (free tier)
10• Limited disk options
11• Less customizable
12• Slower deploys

Option 3: DigitalOcean

Via App Platform:

1. Create App:

Text
11. DigitalOcean > Apps > Create App
22. Source: Docker Hub
33. Repository: n8nio/n8n
44. Click Next

2. Configure Resources:

Text
11. Edit Plan > Basic > $12/mo
22. Add Database Component
33. Type: PostgreSQL
44. Plan: Basic ($15/mo)
55. Click Next

3. Environment Variables:

Bash
1DB_TYPE=postgresdb
2DB_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=true
9N8N_BASIC_AUTH_USER=admin
10N8N_BASIC_AUTH_PASSWORD=<password>
11N8N_HOST=${APP_DOMAIN}
12N8N_PROTOCOL=https
13WEBHOOK_URL=https://${APP_DOMAIN}/
14GENERIC_TIMEZONE=Asia/Ho_Chi_Minh

Via Droplet (More Control):

1. Create Droplet:

Text
11. Create Droplet
22. Image: Docker on Ubuntu
33. Plan: $12/mo (2GB RAM recommended)
44. Region: Singapore/nearest
55. SSH Key: Add your key
66. Create

2. SSH and Setup:

Bash
1# SSH into droplet
2ssh root@your_droplet_ip
3
4# Create directory
5mkdir -p /opt/n8n
6cd /opt/n8n
7
8# Create docker-compose.yml
9nano docker-compose.yml
10# (paste production stack from previous lesson)
11
12# Create .env
13nano .env
14
15# Start
16docker compose up -d

3. Setup Firewall:

Bash
1ufw allow ssh
2ufw allow http
3ufw allow https
4ufw enable

4. Setup Domain:

Text
11. Add A record: n8n.yourdomain.com → droplet_ip
22. Wait for DNS propagation
33. Setup nginx/SSL (see previous lesson)

Pros/Cons:

Text
1✅ PROS:
2• Full control (Droplet)
3• Managed services available
4• Good network (Singapore DC)
5• Predictable pricing
6• SSH access (Droplet)
7
8❌ CONS:
9• More setup work
10• Higher minimum cost
11• Manual scaling
12• Manual backups (Droplet)

Quick Start Scripts

Railway One-Click:

Bash
1# Just use the template!
2# https://railway.app/template/n8n

Render One-Click:

Bash
1# Deploy from render.yaml
2# Or use "Deploy to Render" button

DigitalOcean Droplet:

Bash
1#!/bin/bash
2# quick-setup.sh - Run on fresh droplet
3
4# Update system
5apt update && apt upgrade -y
6
7# Install Docker
8curl -fsSL https://get.docker.com | sh
9
10# Create n8n directory
11mkdir -p /opt/n8n && cd /opt/n8n
12
13# Download docker-compose
14cat > docker-compose.yml << 'EOF'
15version: "3.8"
16services:
17 n8n:
18 image: n8nio/n8n
19 restart: unless-stopped
20 ports:
21 - "5678:5678"
22 environment:
23 - N8N_BASIC_AUTH_ACTIVE=true
24 - N8N_BASIC_AUTH_USER=admin
25 - N8N_BASIC_AUTH_PASSWORD=changethis
26 - GENERIC_TIMEZONE=Asia/Ho_Chi_Minh
27 volumes:
28 - n8n_data:/home/node/.n8n
29volumes:
30 n8n_data:
31EOF
32
33# Start
34docker compose up -d
35
36echo "n8n running at http://$(curl -s ifconfig.me):5678"

Platform Decision Matrix

Text
1CHOOSE RAILWAY IF:
2├── Want fastest setup
3├── Small-medium workflows
4├── Don't need SSH
5└── Budget $10-30/mo
6
7CHOOSE RENDER IF:
8├── Want free tier
9├── Need managed PostgreSQL
10├── Like IaC (render.yaml)
11└── Budget $15-30/mo
12
13CHOOSE DIGITALOCEAN DROPLET IF:
14├── Need full control
15├── Want SSH access
16├── Have DevOps skills
17├── Running many workflows
18└── Budget $15-50/mo
19
20CHOOSE DIGITALOCEAN APP IF:
21├── Want managed experience
22├── Need DigitalOcean ecosystem
23├── Prefer GUI management
24└── Budget $25-50/mo

Bài Tập Thực Hành

Deploy Challenge

Deploy n8n on any platform:

  1. Choose your platform based on needs
  2. Follow step-by-step guide above
  3. Configure environment variables
  4. Add custom domain (optional)
  5. Test webhook with test workflow
  6. Document your setup

Share deployment screenshots in community! ☁️

Key Takeaways

Remember
  • 🚀 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.