VPS'te n8n: manuel iş yükü olmadan kendi otomasyon platformunuz
Web sitesinden bir istek gelir. n8n verileri doğrular, kopyaları kontrol eder, bir fırsat oluşturur, yapay zekâ ile yanıt taslağı hazırlar ve yöneticiyi Telegram'da bilgilendirir. İnsan yalnızca karar gerektiğinde devreye girer; verileri tarayıcı sekmeleri arasında taşımak için değil.
Aşağıda n8n'in nasıl çalıştığını ve PostgreSQL, HTTPS ve yalıtılmış kod çalıştırma ile Docker Compose kullanarak VPS'e nasıl kurulacağını inceleyeceğiz.
n8n yedi adımda
Minimum başlatma planı:
- Bir VPS oluşturup
n8n.example.comgibi bir alt alan adını ona yönlendirin. - Docker ve Docker Compose'u kurun.
- n8n'i PostgreSQL, harici task runner ve Caddy ile çalıştırın.
- Arayüzü HTTPS üzerinden açıp owner hesabını oluşturun.
- Telegram, CRM, e-posta veya herhangi bir harici API'yi bağlayın.
- Hata yönetimini ve çalıştırma verilerinin saklama süresini yapılandırın.
- Veritabanı, veri ve şifreleme anahtarının yedeklerini otomatikleştirin.
Küçük bir production kurulumu için 2 vCPU ve 4 GB RAM ile başlamak mantıklıdır. Test için 2 GB çoğu zaman yeterlidir, ancak PostgreSQL, Docker ve eşzamanlı işlemler kalan kapasiteyi hızla tüketir.
n8n nedir ve nasıl çalışır?
n8n bir workflow automation platformudur. Workflow node'larla oluşturulur: biri süreci başlatır, sonraki node'lar verileri alıp dönüştürür, son node ise bir işlem gerçekleştirir.
Basit bir workflow şöyle görünür:
Webhook → data validation → CRM → Telegram → website response
Bir workflow webhook, zamanlama, e-posta, mesaj veya harici bir hizmetteki olay tarafından tetiklenebilir. Node'lar arasında koşullar, döngüler, filtreler, beklemeler ve hata yönetimi kullanılabilir.
n8n'in güçlü yanlarından biri, otomasyonun hazır entegrasyonlarla sınırlı olmamasıdır. HTTP Request üzerinden API'si olan her hizmet çağrılabilir; özel mantık ise Code node içinde JavaScript veya Python ile yazılabilir. Bu nedenle n8n, basit bir no-code builder ile özel server-side code arasında konumlanır.
Yalnızca veri aktarmaktan fazlası
Bir süreç birkaç sistemi kapsıyor ve karar gerektiriyorsa n8n kullanışlıdır:
form → validation → duplicate search → AI assessment → manager approval → CRM
İnsan yalnızca kontrol noktasında bırakılabilir. Örneğin yapay zekâ yanıtı hazırlar, ancak mesaj müşteriye ancak bir çalışan onayladıktan sonra gönderilir.
Tipik kullanım alanları:
- satış ve destek: istekleri toplama, lead atama ve fırsat oluşturma;
- içerik ve yapay zekâ: taslak hazırlama, talepleri sınıflandırma ve onaydan sonra yayımlama;
- DevOps: kesinti bildirimleri, Git webhook'ları ve API kontrolleri;
- dahili operasyonlar: elektronik tabloları, e-postaları, takvimleri ve şirket sistemlerini senkronize etme.
Self-hosted kurulum süreç ve veritabanı üzerinde kontrol sağlar, ancak harici hizmetleri yerel hâle getirmez. Telegram'a, CRM'e veya bulut yapay zekâ modeline gönderilen veriler VPS dışına çıkar.
n8n Cloud mu, kendi sunucunuz mu?
| Parametre | n8n Cloud | VPS'te n8n |
|---|---|---|
| Başlatma | Sunucu kurulumu gerekmez | Alan adı, Docker ve HTTPS gerekir |
| Güncellemeler | n8n tarafından yapılır | Sahibi yapar |
| Veritabanı ve dosyalar | Hizmetin altyapısında | Seçilen sunucuda |
| Ölçeklendirme | Bulut planına göre | Bağımsız yapılandırılır |
| Sorumluluk | Daha az yönetim | Yedekler, güvenlik ve izleme sahibinin sorumluluğudur |
| En uygun kullanım | DevOps olmadan hızlı başlangıç | Kontrol, özelleştirme ve sürekli çalışan süreçler |
Community Edition kendi sunucunuzda ücretsiz self-host edilebilir ve kişisel ya da dahili iş süreçlerinde kullanılabilir. Ancak n8n geleneksel bir open-source lisansı altında değil, fair-code Sustainable Use License altında dağıtılır. Bu lisans dahili kullanıma ve değişiklik yapmaya izin verir, ancak n8n'i dağıtıp kendi logonuzu ekleyerek bağımsız bir SaaS olarak erişim satmanıza izin vermez. Böyle bir ürün için lisans koşulları ayrıca incelenmelidir.
n8n sunucu gereksinimleri
Yük; veri hacmine, eşzamanlılığa ve işlemlerin türüne bağlıdır. Dosyalar, uzun listeler, Code node'ları ve yapay zekâ workflow'ları, API'ler arasında küçük JSON payload'ları aktarmaktan daha fazla bellek gerektirir.
| Senaryo | Başlangıç yapılandırması |
|---|---|
| Testler ve kişisel metin tabanlı workflow'lar | 1 vCPU, 2 GB RAM, 20 GB NVMe |
| Küçük production kurulumu | 2 vCPU, 4 GB RAM, 25–40 GB NVMe |
| Eşzamanlı işlemler, yapay zekâ veya dosyalar | 4 vCPU, 8 GB RAM veya daha fazlası |
| Queue mode'da birden çok worker | Çalıştırma hacmine göre boyutlandırın |
SQLite öğrenme ve küçük tek instance kurulumu için uygundur. Production için PostgreSQL daha kullanışlıdır: yedekler daha kolay alınır ve daha sonra queue mode'a geçiş basitleşir.
VPS'e n8n nasıl kurulur?
Bu örnekte Ubuntu 24.04, PostgreSQL, Caddy ve harici task runner kullanılır. n8n.example.com ile time zone değerlerini kendi değerlerinizle değiştirin.
1. DNS'i yapılandırıp sunucuyu hazırlayın
VPS'in IPv4 adresine yönlenen bir A DNS kaydı oluşturun, ardından SSH üzerinden bağlanın:
ssh root@SERVER_IP
apt update && apt upgrade -y
apt install -y ca-certificates curl ufw opensslDocker Engine ve Compose plugin'i resmî depodan kurun:
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
-o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
cat > /etc/apt/sources.list.d/docker.sources <<EOF
Types: deb
URIs: https://download.docker.com/linux/ubuntu
Suites: $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}")
Components: stable
Architectures: $(dpkg --print-architecture)
Signed-By: /etc/apt/keyrings/docker.asc
EOF
apt update
apt install -y docker-ce docker-ce-cli containerd.io \
docker-buildx-plugin docker-compose-plugin
docker compose versionYalnızca SSH, HTTP ve HTTPS'e izin verin:
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw enableYeni bağlantının çalıştığını doğrulamadan mevcut SSH oturumunu kapatmayın.
2. Ortam değişkenlerini oluşturun
Dizini hazırlayın:
mkdir -p /opt/n8n
cd /opt/n8n.env dosyasını oluşturun. Aşağıdaki komutlar PostgreSQL, n8n şifreleme ve task runner için ayrı rastgele gizli anahtarları hemen üretir:
cat > .env <<EOF
N8N_VERSION=stable
N8N_HOST=n8n.example.com
GENERIC_TIMEZONE=Europe/Berlin
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=$(openssl rand -hex 32)
N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)
RUNNERS_AUTH_TOKEN=$(openssl rand -hex 32)
EOF
chmod 600 .envİlk çalıştırma için stable etiketi kullanışlıdır. Kurulumu doğruladıktan sonra belirli bir n8n sürümünü sabitlemek daha iyidir; böylece bir sonraki image güncellemesi beklenmedik şekilde gerçekleşmez.
N8N_ENCRYPTION_KEY değerini kaybetmemelisiniz. n8n kayıtlı parolaları, token'ları ve diğer kimlik bilgilerini bu anahtarla şifreler. Anahtar olmadan yalnızca PostgreSQL'i geri yüklerseniz kayıtlar veritabanında kalır, ancak n8n onları okuyamaz.
3. Docker Compose dosyasını oluşturun
compose.yaml oluşturun:
services:
postgres:
image: postgres:18-alpine
restart: unless-stopped
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
PGDATA: /var/lib/postgresql/data
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 10
n8n:
image: docker.n8n.io/n8nio/n8n:${N8N_VERSION}
restart: unless-stopped
environment:
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: postgres
DB_POSTGRESDB_PORT: "5432"
DB_POSTGRESDB_DATABASE: ${POSTGRES_DB}
DB_POSTGRESDB_USER: ${POSTGRES_USER}
DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
N8N_HOST: ${N8N_HOST}
N8N_PORT: "5678"
N8N_PROTOCOL: https
N8N_EDITOR_BASE_URL: https://${N8N_HOST}
N8N_WEBHOOK_URL: https://${N8N_HOST}/
N8N_PROXY_HOPS: "1"
GENERIC_TIMEZONE: ${GENERIC_TIMEZONE}
TZ: ${GENERIC_TIMEZONE}
N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
N8N_BLOCK_ENV_ACCESS_IN_NODE: "true"
N8N_RUNNERS_MODE: external
N8N_RUNNERS_AUTH_TOKEN: ${RUNNERS_AUTH_TOKEN}
N8N_RUNNERS_BROKER_LISTEN_ADDRESS: 0.0.0.0
EXECUTIONS_DATA_PRUNE: "true"
EXECUTIONS_DATA_MAX_AGE: "168"
EXECUTIONS_DATA_PRUNE_MAX_COUNT: "10000"
volumes:
- n8n_data:/home/node/.n8n
expose:
- "5678"
depends_on:
postgres:
condition: service_healthy
n8n-runner:
image: n8nio/runners:${N8N_VERSION}
restart: unless-stopped
environment:
N8N_RUNNERS_AUTH_TOKEN: ${RUNNERS_AUTH_TOKEN}
N8N_RUNNERS_TASK_BROKER_URI: http://n8n:5679
depends_on:
- n8n
caddy:
image: caddy:2-alpine
restart: unless-stopped
environment:
N8N_HOST: ${N8N_HOST}
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
depends_on:
- n8n
volumes:
postgres_data:
name: n8n_postgres_data
n8n_data:
name: n8n_data
caddy_data:
name: n8n_caddy_data
caddy_config:
name: n8n_caddy_configHarici task runner kodu ana n8n sürecinden ayrı çalıştırır. Bu, internal mode'dan daha güvenlidir ve bir Code node hatasının editor'u ve webhook işleme sürecini etkileme ihtimalini azaltır.
4. HTTPS'i etkinleştirin
Caddyfile oluşturun:
{$N8N_HOST} {
reverse_proxy n8n:5678
}DNS VPS'e yönleniyor ve 80 ile 443 portlarına erişilebiliyorsa Caddy otomatik olarak TLS sertifikası alır. Dahili 5678 portu internete açılmaz: dışarıdan yalnızca 80 ve 443 kullanılabilir; Caddy n8n'e Docker ağı üzerinden erişir.
N8N_WEBHOOK_URL ve N8N_PROXY_HOPS değişkenleri, editor'un doğru genel webhook adresleri üretmesi ve tek bir reverse proxy'den gelen başlıklara güvenmesi için gereklidir.
5. n8n'i başlatın
Son yapılandırmayı doğrulayıp container'ları başlatın:
docker compose config
docker compose up -d
docker compose ps
docker compose logs --tail=100 n8n caddyŞurayı açın:
https://n8n.example.comOwner hesabını oluşturun. Parolasını iş arkadaşlarınızla paylaşmayın: ekip çalışması için ayrı hesaplar kullanın ve herkese yalnızca ihtiyaç duyduğu erişimi verin.
İlk yararlı workflow'unuz
Bir web sitesinden gelen isteği işlemek iyi bir testtir:
Webhooknode'unaPOSTmethod'u ekleyin.- Yalnızca ad, e-posta adresi ve kaynağı tutmak için
Edit Fieldskullanın. - Gerekli verileri olmayan isteği reddetmek için
Ifnode'unu kullanın. - CRM'de bir fırsat oluşturun veya
HTTP Requestile istek gönderin. - Telegram bildirimi ekleyin.
- Zinciri
Respond to Webhooknode'u ile bitirin. - Testten sonra workflow'u etkinleştirin ve test webhook'u yerine production URL'sini kullanın.
Bu örnek alan adını, HTTPS'i, gelen istekleri, kimlik bilgilerini ve harici entegrasyonu aynı anda kontrol eder. Ardından ana zincir başarısız olduğunda sizi bilgilendirecek ayrı bir Error Workflow ekleyin.
Kurulumdan sonra n8n'i güvenli hâle getirin
Kurulmuş bir n8n instance'ı otomatik olarak güvenilir değildir. Başlattıktan sonra şunlardan emin olun:
- editor yalnızca HTTPS üzerinden erişilebilir;
.envizinleri600ve dosya Git'e commit edilmemiş;- harici API anahtarlarının yalnızca gereken minimum izinleri var;
- her webhook kaynağın imzasını veya gizli anahtarını doğruluyor;
- çalıştırma geçmişi otomatik olarak siliniyor;
- kritik workflow'ların hataları yöneticiye gönderiliyor.
Community node'ları paket olarak kurulur ve workflow verilerine ve sunucuya erişebilir. İncelemeden bilinmeyen node'lar eklemeyin. İhtiyacınız yoksa N8N_COMMUNITY_PACKAGES_ENABLED=false ile devre dışı bırakın.
Yerleşik audit'i çalıştırın:
docker compose exec n8n n8n auditBu komut korumasız webhook'ları, riskli node'ları ve kimlik bilgisi sorunlarını bulmaya yardımcı olur, ancak manuel incelemenin yerini tutmaz.
Çalıştırma geçmişi ve kişisel veriler
n8n hata ayıklama için input ve output verilerini saklar. Bununla birlikte e-posta mesajları, telefon numaraları, belgeler ve API yanıtları da veritabanında kalabilir.
Yukarıdaki yapılandırmada çalıştırmalar yedi gün sonra silinir ve sayıları 10.000 ile sınırlıdır. Hassas süreçlerde saklama süresini veri saklama politikanıza göre belirleyin ve workflow bitmeden gereksiz alanları kaldırın.
Yedekler ve güncellemeler
Kurtarma için PostgreSQL dump'ı, n8n_data volume'ü, yapılandırma dosyaları ve N8N_ENCRYPTION_KEY içeren .env gerekir. Kopyalamadan önce PostgreSQL'i çalışır durumda bırakıp işlemcileri durdurun. Bu, workflow çalıştırmalarında kısa bir kesinti oluşturur:
cd /opt/n8n
mkdir -p backup
docker compose stop n8n n8n-runner
docker compose exec -T postgres sh -c \
'pg_dump -U "$POSTGRES_USER" "$POSTGRES_DB"' \
| gzip > "backup/n8n-db-$(date +%F).sql.gz"
docker run --rm \
-v n8n_data:/source:ro \
-v "$PWD/backup":/backup \
alpine sh -c \
'tar -czf /backup/n8n-data-$(date +%F).tar.gz -C /source .'
tar -czf "backup/n8n-config-$(date +%F).tar.gz" \
.env compose.yaml Caddyfile
docker compose start n8n n8n-runner.env içeren arşiv gizli bilgiler barındırır: şifreleyip VPS dışında saklayın. Yedeği düzenli olarak test restore yaparak doğrulayın.
Güncellemeden önce yedek alın ve release notes'u inceleyin:
cd /opt/n8n
docker compose pull
docker compose up -d
docker compose psTask runner ile ana container aynı version tag'ini kullanmalıdır.
Ne zaman ölçeklendirme gerekir?
Gerçek bir yük yokken Redis ve birkaç worker ile başlamayın. PostgreSQL'li tek instance'ı yönetmek daha kolaydır ve küçük dahili süreçlerin çoğu için yeterlidir.
Uzun süren görevler webhook'ları geciktirdiğinde, birçok workflow aynı anda başladığında veya dosya işleme sürekli tüm belleği tükettiğinde queue mode gerekir. Bu yapıda ana instance olayları alır, Redis işleri dağıtır ve worker'lar paralel olarak çalıştırır. Tüm bileşenler aynı PostgreSQL veritabanına bağlanmalı ve aynı N8N_ENCRYPTION_KEY değerini kullanmalıdır.
n8n için hangi VPS seçilmeli?
n8n, PostgreSQL, Caddy ve task runner'ı birlikte çalıştırmak için 2 vCPU, 4 GB RAM ve NVMe disk ile başlamak uygundur. tropic.host üzerindeki Light plan bu yapılandırmaya uyar: 2 vCPU, 4 GB RAM ve 25 GB NVMe. Ağır dosya işleme olmadan ilk production workflow'ları için yeterlidir.
Belgeler, büyük veri kümeleri ve çok sayıda eşzamanlı yapay zekâ workflow'u için 8 GB RAM daha iyi bir seçimdir. Kararlı bir ağ da önemlidir: webhook'lar, OAuth callback'leri ve zamanlanmış işler sürekli erişilebilir olmalıdır.
Sonuç
n8n tekrarlanan operasyonları anlaşılır görsel akışlara dönüştürür: hazır node'lar kurulumu hızlandırır, HTTP Request neredeyse tüm API'lere bağlanır ve Code node kendi mantığınızı eklemenizi sağlar.
Self-hosted sürüm sunucu ve veritabanı üzerinde kontrol verir, ancak HTTPS, kısıtlı anahtarlar, geçmiş temizliği ve doğrulanmış yedekler gerektirir. N8N_ENCRYPTION_KEY değerini PostgreSQL ile birlikte saklayın: bu anahtar olmadan geri yüklenen kimlik bilgileri çözülemez.
SSS
n8n ücretsiz kullanılabilir mi?
Evet. Community Edition kişisel ve dahili süreçler için kendi sunucunuzda ücretsiz barındırılabilir. Hosted n8n'i bağımsız bir SaaS olarak yeniden satmak fair-code lisansı tarafından kısıtlanır.
n8n alan adı olmadan kurulabilir mi?
Yerel test için evet. Genel webhook'lar ve OAuth için alan adı ve HTTPS kullanmak daha iyidir.
n8n ne kadar RAM ister?
Basit kişisel workflow'lar 2 GB RAM ile çalışabilir. PostgreSQL, Caddy ve task runner'lı n8n için 4 GB daha mantıklıdır; dosyalar ve eşzamanlı çalıştırmalar 8 GB veya daha fazlasını gerektirebilir.
Tüm veriler VPS'in içinde mi kalır?
Workflow verileri başka bir yere göndermiyorsa evet. Veritabanı ve çalıştırma geçmişi VPS'te tutulur, ancak Telegram, CRM veya harici yapay zekâ model node'ları seçilen verileri ilgili hizmete gönderir.
n8n yedeğinde neler bulunmalı?
PostgreSQL dump'ı, n8n_data volume'ü, compose.yaml, Caddyfile ve N8N_ENCRYPTION_KEY içeren .env. Yedeği şifreli biçimde VPS dışında saklayın ve geri yükleyerek doğrulayın.
