n8n Cloud aylık 24 dolardan başlar. Kendi sunucunuza kurulum ise pratik olarak ücretsizdir — zaten bir VPS'iniz varsa. Bir müşteride bu geçişi yaptım: n8n Cloud'dan self-hosted'a taşıdık, aylık 800 dolar (enterprise plan) sıfıra indi. Bu yazı o kurulumun adım adım rehberidir.

Gereksinimler

  • Ubuntu 22.04 LTS VPS (minimum 2 CPU, 4 GB RAM önerilir)
  • Bir domain/subdomain: n8n.siteniz.com
  • Docker ve Docker Compose kurulu

1. Docker Kurulumu

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
docker --version

2. n8n Docker Compose Konfigürasyonu

# /opt/n8n/docker-compose.yml
version: '3.8'

services:
  n8n:
    image: n8nio/n8n:latest
    restart: unless-stopped
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      - N8N_HOST=n8n.siteniz.com
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - NODE_ENV=production
      - WEBHOOK_URL=https://n8n.siteniz.com/
      - GENERIC_TIMEZONE=Europe/Istanbul
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
      - EXECUTIONS_DATA_PRUNE=true
      - EXECUTIONS_DATA_MAX_AGE=336   # 14 gün
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      - postgres

  postgres:
    image: postgres:15-alpine
    restart: unless-stopped
    environment:
      - POSTGRES_DB=n8n
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  n8n_data:
  postgres_data:
# /opt/n8n/.env
N8N_ENCRYPTION_KEY=$(openssl rand -base64 32)
POSTGRES_PASSWORD=$(openssl rand -base64 24)

3. Nginx + SSL Kurulumu

sudo apt install nginx certbot python3-certbot-nginx -y

# /etc/nginx/sites-available/n8n
server {
    listen 80;
    server_name n8n.siteniz.com;

    location / {
        proxy_pass http://127.0.0.1:5678;
        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-Proto $scheme;
        proxy_read_timeout 300s;
        proxy_connect_timeout 75s;
        chunked_transfer_encoding on;
        proxy_buffering off;
    }
}

sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo certbot --nginx -d n8n.siteniz.com
sudo systemctl reload nginx

4. Başlatma ve Test

cd /opt/n8n
docker compose up -d
docker compose logs -f n8n  # logları izle

5. Otomatik Yedekleme

#!/bin/bash — /opt/n8n/backup.sh
DATE=$(date +%Y%m%d_%H%M%S)
docker exec n8n-postgres-1 pg_dump -U n8n n8n | \
  gzip > /opt/backups/n8n_${DATE}.sql.gz

# 30 günden eski yedekleri sil
find /opt/backups -name "n8n_*.sql.gz" -mtime +30 -delete

# Cron (her gece 03:00)
# 0 3 * * * /opt/n8n/backup.sh

Güvenlik Kontrol Listesi

  • Port 5678'i firewall ile dışarıya kapatın: ufw deny 5678
  • n8n'in yalnızca localhost'tan erişilebilir olduğunu doğrulayın
  • Güçlü bir admin şifresi ve 2FA kullanın
  • Düzenli Docker image güncellemesi yapın: docker compose pull && docker compose up -d
  • Encryption key'i güvenli yerde saklayın — kaybedilirse tüm credential'lar ulaşılamaz olur