Karanlık bir Nordic kasada oyma taş bir bankta oturan NordBastion kutup ayısı maskotu, kucağında bir dizüstü bilgisayar ve üzerinde süzülen büyük camgöbeği renginde holografik bir otomasyon iş akışı — parlayan kavisli tellerle birbirine bağlı altı yuvarlatılmış düğüm — banka yaslanmış camgöbeği N-kalkanı ve yanında bir sunucu kabiniyle
Nasıl yapılır · Kendi barındırma·13 dakika okuma · 30 dakika uygulamalı

n8n'i bir VPS üzerinde kendi sunucunuzda barındırın.
Sizin otomasyon motorunuz, sizin kimlik bilgileriniz, sizin donanımınız.

Çıplak bir Nordic VPS'ten kendi alan adınızda TLS sonlandırmalı bir n8n'e giden altı adım — Docker Compose, Caddy, PostgreSQL, gerçekten tetiklenen webhook'lar. Bir plan katmanıyla değil CPU'nuzla sınırlanan yürütmeler, ayda $3.90'a mal olan bir kutuda. Debian 12 üzerinde n8n 2.x ile test edildi.

Altı adım
  1. 01

    Sağla

    VPS + bir A kaydı

  2. 02

    Kur

    get.docker.com

  3. 03

    Compose

    n8n + Caddy + Postgres

  4. 04

    İlk açılış

    Sahip hesabı + 2FA

  5. 05

    Webhook'lar

    WEBHOOK_URL

  6. 06

    Sertleştir

    Buda, sustur, yedekle

Başlamadan önce · Lisans ve maliyet

Gerçekte kurduğunuz şey. Ve lisansın onunla ne yapmanıza izin verdiği.

n8n bir iş akışı otomasyon motorudur: bir tetikleyiciyi — bir webhook, bir zamanlama, bir veritabanındaki yeni bir satır, bir kuyruktaki bir mesaj — API'leri çağıran, veriyi dönüştüren, koşullara göre dallanan, keyfi JavaScript veya Python çalıştıran ve sonucu bir sonraki adıma teslim eden bir düğüm zincirine bağladığınız görsel bir tuval. Kutuda birkaç yüz entegrasyon düğümü gelir, artı geri kalan her şeyi kapsayan genel bir HTTP Request düğümü. 1.x serisinden beri AI Agent ve LLM düğümlerini de taşır, bu yüzden 2026'da onu kuran kişilerin büyük bir bölümü klasik ETL boru hattı yerine ajan inşa ediyor.

Tek bir komut yazmadan önce önemli olan kısım lisanstır, çünkü n8n OSI anlamında açık kaynak değildir ve bu fark akademik değildir. Çekirdek, Sustainable Use License altında dağıtılır: yazılımı iç iş amaçları için ve kişisel veya ticari olmayan kullanım için kullanma, kopyalama, değiştirme ve dağıtma hakkında münhasır olmayan, telifsiz, dünya çapında bir hak. Alıkoyduğu şey, n8n'i veya türevini başkalarına ücret karşılığı sunma hakkıdır — bu da bunun üzerine ücretli bir "managed n8n" ürünü kurmayı devre dışı bırakan maddedir. Ayrı olarak, adında .ee. veya yolunda .ee taşıyan herhangi bir dosya bu lisansın tamamen dışında tutulur ve ücretli bir n8n Enterprise License gerektirir.

Açıkça okuyun: n8n'i bir VPS üzerinde kendi şirketinizi, sunduğunuz bir hizmet olarak teslim ettiğiniz kendi müşterilerinizin işini veya kendi kişisel hayatınızı otomatikleştirmek için çalıştırmak, ücretsiz hakkın içindedir ve her zaman öyle olmuştur. n8n'i barındırma ürünü olarak satmak ise değildir. İnternetteki neredeyse her "n8n gerçekten ücretsiz mi?" tartışması, bu çizginin iki yakasında birbirini duymayan iki kişinin konuşmasıdır.

Maliyet tarafı. n8n Cloud, yürütme başına fiyatlandırılır: Starter planı 2,500 yürütme için yıllık faturalandırmayla ayda €20, Pro 10,000 için ayda €50, Business 40,000 için ayda €667. Kendi barındırılan durumda, yürütme sayısı kesinlikle bir kalem değildir — kutunun ne kadar CPU ve belleğe sahip olduğuyla sınırlanır. Bir API'yi beş dakikada bir yoklayan bir iş akışı, tek başına ayda 8,640 yürütme harcar; Cloud'da bu tek iş akışı zaten Pro katmanını zorunlu kılar, $3.90'lık bir VPS'te ise boşta CPU'ya karşı bir yuvarlama hatasıdır.

Seçenek Aylık Dahil edilen yürütmeler Onu kim işletiyor
n8n Cloud · Starter€202 500n8n GmbH
n8n Cloud · Pro€5010 000n8n GmbH
n8n Cloud · Business€66740 000n8n GmbH
Kendi barındırılan · Sentinel VPS$3.90CPU'ya bağlı, sayaca değilSiz

Ağustos 2026'da n8n.io'da yayımlanan Cloud fiyatları, yıllık faturalandırmayla; aylık faturalandırma daha pahalıya gelir. Buradaki alışveriş yalnızca para değil — kendi barındırma, güncellemeleri, yedeklemeleri, TLS yenilemesini ve çalışma süresini hattın sizin tarafınıza taşır.

Başlamadan önce · Boyutlandırma

Kutuyu boyutlandırmak. Dört gigabayt taban, disk ise gizli tehlike.

n8n'in kendi Docker Compose belgeleri, asgari değeri 2 vCPU ve 4 GB RAM olarak verir. Bu bir pazarlama sayısı değildir: bunun altında düzenleyici ön ucu ve orta düzeyde dallanmış bir iş akışı bellek için birbiriyle savaşır ve ilk büyük JSON yükü konteyneri bellek yetersizliği hatasıyla devre dışı bırakır.

Sentinel · 2 vCPU, 4 GB, 120 GB NVMe, $3.90/ay. Doğru varsayılan. Günde birkaç yüz yürütme yapan kişisel veya küçük ekip örneği için pay bırakarak n8n, PostgreSQL ve Caddy'yi birlikte çalıştırır. Boşta bellek üç konteyner genelinde yaklaşık 700 MB civarındadır.

Garrison · 4 vCPU, 8 GB, 240 GB NVMe, $7.90/ay. Redis ve bir veya iki worker konteyneriyle kuyruk modu eklediğinizde, iş akışları bellekte düzenli olarak çok megabaytlık yükler tuttuğunda veya birkaç paralel dala ayrılan AI ajan iş akışları için rahat bir pay istediğinizde bir üst basamak.

Ravelin · 8 vCPU, 16 GB, 480 GB NVMe, $16.90/ay. Günde binlerce yürütme yapan ve ikili veri ağırlıklı işler yürüten bir ekip örneği — PDF üretimi, görüntü işleme, ses transkripsiyonu. Bu iş yükleri API'ye değil CPU'ya bağlı olduğundan, ayrılmış çekirdekler burada önem taşır.

İnsanların unuttuğu kısım disktir. n8n, her yürütmenin her düğümünün tam girdi ve çıktısını saklar. Her dakika çalışan konuşkan bir iş akışı haftada yüzlerce megabayt yazar. Varsayılanlar buda işlemi yapar — EXECUTIONS_DATA_PRUNE true'dur, EXECUTIONS_DATA_MAX_AGE 336 saattir (on dört gün) ve EXECUTIONS_DATA_PRUNE_MAX_COUNT 10 000'dir — ama yoğun bir örneğin on dört günü hâlâ epey NVMe'dir. Adım 06 bunları sıkılaştırır.

Adım 01 · Sağlama

Bir Nordic VPS ve tek bir DNS kaydı. Bu sırayla.

Panelde: Order → VPS → Sentinel, imaj Debian 12. Hesap açmak için e-posta adresi gerekmez, hiçbir aşamada kimlik belgesi istenmez ve fatura Monero, Bitcoin, Lightning veya diğer desteklenen varlıklardan biriyle ödenir. Kaleyi kendinize olan gecikmeye göre değil, otomatikleştirdiğiniz hizmetlere olan gecikmeye göre seçin — bir otomasyon sunucusu sizinle konuştuğundan çok daha fazla API'lerle konuşur.

Sonra sunucuya dokunmadan önce DNS kaydını oluşturun: VPS'in IPv4'üne işaret eden n8n.example.com için bir A kaydı ve IPv6 kullanıyorsanız bir AAAA kaydı. Bu önce yapılmalı, çünkü Caddy yığın başlar başlamaz Let's Encrypt'ten bir sertifika ister ve çözümlenmeyen bir ad için sertifika isteği başarısız olur — sonra geri çekilir ve sitenin neden erişilemez olduğunu merak ederek yirmi dakika harcarsınız.

Devam etmeden önce DNS'in yayılması için bir dakika bekleyin ve kendi makinenizden doğrulayın:

dig +short n8n.example.com
# → the IPv4 of your VPS, and nothing else

Herhangi bir şey herkese açık bir bağlantı noktasını dinlemeye başlamadan önce ilk saat güçlendirme kontrol listesini uygulayın — yalnızca anahtarla SSH, sadece 22, 80 ve 443'e izin veren bir güvenlik duvarı ve gözetimsiz güvenlik güncellemeleri. Bir otomasyon sunucusu bir kimlik bilgisi kasasıdır; o tam saati hak eder.

Adım 02 · Kurulum

Docker, başka hiçbir şey değil. Tek bir komut.

SSH ile bağlanın ve Compose v2 eklentisiyle Docker Engine'i kurun:

apt update && apt install -y ca-certificates curl
curl -fsSL https://get.docker.com | sh
docker compose version

Kolaylık betiği, Engine'i, CLI'yi, containerd'i ve Compose eklentisini Docker'ın kendi deposundan kurar. Son satır Docker Compose version v2 veya üzerini yazdırmalıdır; eğer "docker: 'compose' is not a docker command" yazdırıyorsa, dağıtımın eski docker.io paketi kurulu demektir ve önce onu kaldırmalısınız.

Tüm bunları saran tek satırlık bir n8n kurulum betiği var ve işe yarıyor. Bu kılavuz bunun yerine Compose dosyasını elle yazar, çünkü daha sonra değiştirmeniz gerekecek her şey — şifreleme anahtarı, veritabanı, webhook URL'si, saklama politikası, worker sayısı — o dosyada yaşar ve okuyamadığınız bir yığın, sabahın 3'ünde onaramayacağınız bir yığındır.

Adım 03 · Compose

/opt/n8n içinde üç dosya. n8n, PostgreSQL, Caddy.

Önce dizini oluşturun ve iki gizli değeri üretin. Bunları şimdi, bu sırayla üretin ve üretirken .env dosyasına yapıştırın — özellikle şifreleme anahtarı, n8n'in ilk açılışından önce var olmalı, sonra değil.

mkdir -p /opt/n8n && cd /opt/n8n
openssl rand -hex 32   # → N8N_ENCRYPTION_KEY
openssl rand -hex 24   # → POSTGRES_PASSWORD

/opt/n8n/.env

DOMAIN=n8n.example.com
LETSENCRYPT_EMAIL=you@example.com
GENERIC_TIMEZONE=Europe/Stockholm

N8N_ENCRYPTION_KEY=paste_the_32_byte_hex_here
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=paste_the_24_byte_hex_here

Dosyayı hemen kilitleyin — örneğin bugüne kadar ve bundan sonra saklayacağı her kimlik bilgisinin anahtarını taşır:

chmod 600 /opt/n8n/.env

/opt/n8n/docker-compose.yml

services:
  caddy:
    image: caddy:2-alpine
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    environment:
      - DOMAIN=${DOMAIN}
      - LETSENCRYPT_EMAIL=${LETSENCRYPT_EMAIL}
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy_data:/data
      - caddy_config:/config

  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    environment:
      - POSTGRES_DB=${POSTGRES_DB}
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
    volumes:
      - pg_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
      interval: 10s
      timeout: 5s
      retries: 10

  n8n:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      - N8N_HOST=${DOMAIN}
      - N8N_PORT=5678
      - N8N_PROTOCOL=https
      - N8N_EDITOR_BASE_URL=https://${DOMAIN}
      - WEBHOOK_URL=https://${DOMAIN}/
      - N8N_PROXY_HOPS=1
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
      - TZ=${GENERIC_TIMEZONE}
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
      - DB_POSTGRESDB_USER=${POSTGRES_USER}
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
      - N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
      - N8N_BLOCK_ENV_ACCESS_IN_NODE=true
      - N8N_DIAGNOSTICS_ENABLED=false
      - N8N_VERSION_NOTIFICATIONS_ENABLED=false
      - N8N_PERSONALIZATION_ENABLED=false
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  caddy_data:
  caddy_config:
  pg_data:
  n8n_data:

/opt/n8n/Caddyfile

{$DOMAIN} {
    encode zstd gzip
    tls {$LETSENCRYPT_EMAIL}
    reverse_proxy n8n:5678
}

Adını anmaya değer iki tasarım kararı. İlk olarak, n8n bir bağlantı noktası yayımlamaz. Yalnızca Caddy 80 ve 443'ü bağlar; n8n, Compose ağı içinde 5678'i dinler ve host dışından hiçbir şey ona erişemez. Şaşırtıcı sayıda kendi barındırılan n8n örneği, önünde TLS olmadan 5678 bağlantı noktasında herkese açık internette durur ve açığa çıkmış hizmetler için arama motorları bunları indeksler. İkincisi, iş akışlarını artık PostgreSQL tutuyor olsa da n8n veri birimi bağlı kalır — o dizin hâlâ örnek ayarlarını, günlük dosyalarını ve kaynak kontrolü varlıklarını taşır.

Ayağa kaldırın:

cd /opt/n8n
docker compose up -d
docker compose logs -f caddy   # watch the certificate being issued
Adım 04 · İlk açılış

Sahip hesabı ve kaybetmemeniz gereken anahtar. Bunu iki kez okuyun.

https://n8n.example.com adresini açın. İlk ekran sahip hesabı kurulumudur — e-posta, parola, ad. Artık yapılandırılacak bir HTTP basic-auth ortam değişkeni yoktur; kullanıcı yönetimi 1.x serisinden beri n8n'e gömülüdür ve burada oluşturduğunuz hesap örnek sahibidir. Parola yöneticinizden bir parola kullanın, ardından doğrudan Settings → Personal → Two-factor authentication'a gidin ve açın. Bu giriş, bir düğüme yapıştıracağınız her API anahtarının ön kapısıdır.

Geri alınamaz tek hata

n8n, saklanan her kimlik bilgisini N8N_ENCRYPTION_KEY ile şifreler. Onu ayarlamazsanız, n8n ilk açılışta bir tane üretir ve onu veri biriminin içine yazar. O birimi yeniden oluşturun — bir docker compose down -v, yeni bir sunucuya geçiş, başarısız bir geri yükleme — ve yeni örnek farklı bir anahtar üretir, veritabanındaki her kimlik bilgisi şifresi çözülemez hale gelir ve hiçbir kurtarma yolu kalmaz. Her API anahtarını, OAuth token'ını ve parolayı elle yeniden girersiniz. Bu kılavuzun yaptığı gibi anahtarı açıkça ayarlayın ve bir kopyasını sunucu dışında saklayın.

O kopya için doğru ev, kendinizin de kontrol ettiği bir parola yöneticisidir — kendi barındırılan Vaultwarden kılavuzu bir tanesini ele alır ve bilinçli nokta, kilidini açtığı şeyle aynı kutuda yaşamaması gerektiğidir.

Veritabanının gerçekten PostgreSQL olduğunu, SQLite yedeğine düşmediğini doğrulayın — DB_ değişkenlerinde bir yazım hatası varsa, n8n sessizce SQLite üzerinde başlar ve bunu üç ay sonra fark edersiniz:

docker compose exec postgres psql -U n8n -d n8n -c '\dt' | head
# → a list of n8n tables (workflow_entity, credentials_entity, execution_entity…)
Adım 05 · Webhook'lar

Sessizce çalışmayan yarı. Bir proxy arkasındaki webhook'lar.

Açılan, düzenleyiciyi gösteren ve manuel bir testi çalıştıran bir n8n, henüz çalışan bir n8n değildir. Sessizce bozulan yarı ise gelen webhook'lardır ve bu bozulma, hata sanki üçüncü taraf hizmetteymiş gibi görünen biçimlerde gerçekleşir.

WEBHOOK_URL. Bu olmadan, n8n webhook URL'lerini N8N_HOST ve N8N_PORT'tan oluşturur ve size http://localhost:5678/webhook/abc gibi bir şey verir — bunu da Stripe veya GitHub'a yapıştırırsınız, orada asla erişilemez. Yukarıdaki Compose dosyası WEBHOOK_URL'i herkese açık HTTPS köküne ayarlar, ki düzenleyicinin göstereceği ve dış dünyanın gerçekten çağırabileceği şey de budur.

N8N_EDITOR_BASE_URL. n8n'in gönderdiği e-postalardaki bağlantılar için kullandığı herkese açık URL — parola sıfırlamaları, kullanıcı davetleri. Burada yanlış olması, localhost'a işaret eden bir davet bağlantısı demektir; bu da bozuk bir entegrasyondan çok bir meslektaştan gelen destek talebidir.

N8N_PROXY_HOPS. n8n istemci IP'sini X-Forwarded-For'dan okur ve yalnızca bu sayının belirttiği kadar sıçramaya güvenir. Önde tek bir ters proxy ile — bu yığındaki Caddy — değer 1'dir. Caddy'nin önüne Cloudflare koyun, 2 olur. Varsayılan 0'da bırakın, her istek proxy'nin kendisinden geliyormuş gibi görünür, ki bu da sessizce hız sınırlarını ve iş akışlarınızdaki herhangi bir IP tabanlı mantığı bozar.

N8N_SECURE_COOKIE. Varsayılan olarak true'dur, yani oturum çerezi yalnızca HTTPS üzerinden gönderilir. Bu doğru ayardır ve bu yığın bunu karşılar. Bunu bilmek işe yarar çünkü düz http üzerinden yapılan ilk denemenin klasik belirtisini açıklar: giriş formu parolayı kabul eder ve sizi sonsuza dek giriş formuna geri döndürür. Çözüm TLS'tir, bayrağı kapatmak değil.

Düzgün test edin. Bir Webhook düğümüyle bir iş akışı oluşturun, iş akışını etkinleştirin, Production URL'sini kopyalayın, ardından sunucu olmayan bir makineden çağırın:

curl -i https://n8n.example.com/webhook/<path>
# → HTTP/2 200, and a new execution visible in the editor

Herkesin bir kez takıldığı ayrım: Test URL'si yalnızca düzenleyiciyi "Listen for test event" etkinleştirilmiş şekilde açık tuttuğunuz sürece dinler. Production URL'si yalnızca iş akışı Active'e çevrildiğinde var olur. Düzenleyicide çalışan ve üretimde 404 veren bir webhook, neredeyse her zaman etkin olmayan bir iş akışıdır.

Adım 06 · Güçlendirme

Buda, sustur, yedekle. Bir yıl hayatta kalıp kalmayacağına karar veren üçlü.

Saklama. Varsayılanlar, hangisi önce gelirse on dört gün veya 10 000 yürütmeyi, her düğümün tam girdi ve çıktı verisiyle birlikte tutar. Yoğun bir zamanlama tetikleyicisiyle küçük bir NVMe üzerinde diski dolduran şey budur. Bunları n8n ortam bloğuna ekleyin ve yeniden başlatın:

- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=168          # hours — one week
- EXECUTIONS_DATA_PRUNE_MAX_COUNT=5000
- EXECUTIONS_DATA_SAVE_ON_SUCCESS=none # keep failures, drop the noise

EXECUTIONS_DATA_SAVE_ON_SUCCESS=none, yüksek frekanslı bir örnekte tek başına en büyük kazançtır: başarıyla çalışan yürütmelerin yüklerini yazmayı durdurur, ancak hata veren her yürütmeyi hâlâ hata ayıklayabilmeniz için eksiksiz saklar. İş akışını hâlâ inşa ederken "all" değerinde tutun, iş akışı sıradanlaştığında değeri çevirin.

Sessizlik. Compose dosyası zaten tanılamayı, sürüm bildirimlerini ve kişiselleştirme anketini kapatır. Geriye kalan giden çağrı, api.n8n.io'dan veri çeken şablon galerisidir; hiçbir üçüncü taraf çağrısı istemiyorsanız N8N_TEMPLATES_ENABLED=false ayarlayın. Sürüm bildirimlerini devre dışı bırakırsanız, sürüm notlarını okumak için takviminize aylık bir hatırlatıcı koyun — kimsenin güncellemediği kendi barındırılan bir örnek, sürümler için ping atan bir örnekten daha kötü bir sonuçtur.

Code düğümü. Dosyada zaten bulunan N8N_BLOCK_ENV_ACCESS_IN_NODE=true, ifadelerin ve Code düğümlerinin süreç ortam değişkenlerini okumasını engeller — bu kutuda bu, PostgreSQL parolası ve şifreleme anahtarı demektir. Herkese açık REST API'yi kullanmıyorsanız N8N_PUBLIC_API_DISABLED=true ekleyin ve o yüzeyi de kapatın.

Yedekler — ya üç parçanın tamamı ya da hiçbiri. Şifreleme anahtarı olmadan yalnızca veritabanının yedeği değersizdir, anahtarın tek başına da hiçbir şeyi geri yüklemez. PostgreSQL dökümünü, n8n veri birimini ve .env dosyasını birlikte yedekleyin ve en az bir kopyayı sunucu dışında saklayın:

cd /opt/n8n
docker compose exec -T postgres pg_dump -U n8n n8n | gzip > backup-db-$(date +%F).sql.gz
docker run --rm -v n8n_n8n_data:/data -v "$PWD":/backup alpine \
  tar czf /backup/backup-vol-$(date +%F).tar.gz -C /data .
cp .env backup-env-$(date +%F)

Birim adı, Compose proje adı artı birim adıdır; dizininiz n8n olarak adlandırılmamışsa docker volume ls çalıştırın ve gördüğünüzü kullanın. Üç satırı bir cron görevine koyun, arşivleri başka bir yere gönderin ve bir kez geri yüklemeyi test edin — test edilmemiş bir yedek bir yedek değil bir inançtır.

Güncellemeler. docker compose pull, ardından docker compose up -d. Önce bir anlık görüntü alın: n8n başlangıçta veritabanı geçişlerini çalıştırır ve geçişler geri alınmak üzere tasarlanmamıştır. Büyük bir sürüm boyunca — örneğin 1.x'ten 2.x'e sıçrama — sürüm notlarını pull'dan sonra değil önce okuyun ve gözetimsiz bir yeniden başlatmanın sizi asla sürpriz bir şekilde yükseltmemesi için :latest yerine açık bir imaj etiketi sabitlemeyi düşünün.

Daha ileri · Ölçeklendirme

Bir sürecin yetmediği zaman. Kuyruk modu, Redis ve worker'lar.

n8n varsayılan olarak normal modda çalışır: düzenleyiciyi sunan ve webhook'ları alan aynı süreç, iş akışlarını da yürütür. Bu basittir ve uzun bir iş akışı diğerlerini beklemeye başlayana kadar da doğrudur. Belirti yanılmaz — yürütmeler dakikalarca "running" durumunda kalır, düzenleyici ağırlaşır ve 200 ms içinde yanıt vermesi gereken bir webhook sekiz saniyede yanıt verir.

Kuyruk modu işi böler. Ana örnek düzenleyiciyi, tetikleyicileri ve webhook uç noktalarını elinde tutar; yürütme kimliklerini Redis'e iter; ayrı worker süreçleri bunları çeker, iş akışını PostgreSQL'den yükler, çalıştırır ve Redis üzerinden geri bildirir. Bu mimariden üç kural çıkar ve üçü de onları atlayanları ısırır: her örnek aynı PostgreSQL veritabanını paylaşmalı, her örnek aynı N8N_ENCRYPTION_KEY'i taşımalı ve SQLite hiçbir şekilde desteklenmez.

Compose dosyasına eklenenler bir Redis servisi ve worker komutuyla çalıştırılan aynı n8n imajı olan bir worker servisidir:

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    command: ["redis-server", "--save", "60", "1", "--appendonly", "no"]
    volumes:
      - redis_data:/data

  n8n-worker:
    image: docker.n8n.io/n8nio/n8n:latest
    restart: unless-stopped
    command: worker --concurrency=5
    depends_on:
      - redis
      - postgres
    environment:
      # the SAME encryption key and the SAME database as the main instance
      - EXECUTIONS_MODE=queue
      - QUEUE_BULL_REDIS_HOST=redis
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
      - DB_POSTGRESDB_USER=${POSTGRES_USER}
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
      - TZ=${GENERIC_TIMEZONE}

EXECUTIONS_MODE=queue ve QUEUE_BULL_REDIS_HOST=redis değerlerini ana n8n servisine de ekleyin — her iki taraf da mod konusunda hemfikir olmalı. İlk günden ayarlanması gereken iki seçenek var: düzenleyicide "Test workflow" tuşuna basmanın ana süreci meşgul etmemesi için OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS=true, ve varsayılan olarak 30 saniye olan, bir worker'ın yeniden dağıtım sırasında mevcut işini bitirmesine ne kadar süre tanınacağını belirleyen N8N_GRACEFUL_SHUTDOWN_TIMEOUT. Workflow'larınız genellikle yarım dakikadan uzun sürüyorsa bu değeri artırın, aksi halde her dağıtım devam eden işi öldürür.

Buradan başlamayın. Kuyruk modu iki hareketli parça ve normal modun kesinlikle sahip olmadığı bir hata sınıfı ekler. Kuyruğun büyüdüğünü veya bir iş akışının diğerini engellediğini görene kadar normal modda kalın, sonra ikinci bir kutu eklemeden önce aynı kutuya tek bir worker ekleyin. Bu ilerleme — normal modda Sentinel, tek worker'lı Garrison, üç worker'lı Ravelin — gerçekten büyük bir dağıtım dışında her şeyi kapsar.

Uygulamanın altındaki katman

Makinenin gerçekte tuttuğu şey. Ve bunun kimin sahibi olması gerektiğini neden değiştirdiği.

Çoğu kendi barındırma kılavuzu, sunucu seçimini bir performans sorunu olarak ele alır. Bir otomasyon motoru için öyle değildir. Bir n8n örneği, kendi barındırdığınız neredeyse hiçbir şeyin bir arada tutmadığı iki şeyi tutar: otomatikleştirdiğiniz her hizmetin API anahtarlarını, OAuth token'larını ve posta parolalarını içeren tek bir şifreli tablo, ve — tam yanında — kuruluşunuzun tam olarak nasıl çalıştığını tarif eden bir grafik. Hangi CRM. Hangi banka akışı. Hangi tedarikçi. Hangi müşteriye hangi tetikleyicide hangi e-posta gidiyor. Bir şirketin iş akışı listesini okuyun, şirketi okumuş olursunuz.

Birinci katman — sunucunun sizi kim sandığı. Buradaki uygulama katmanı gerçekten iyidir: kimlik bilgileri bekleme durumunda şifrelidir, düzenleyici TLS ve 2FA arkasındadır. Sızan katman altındaki katmandır. Barındırılan bir plan, tüzel kişiliğinizi, fatura adresinizi ve kartınızı bilir. Bir hiperölçekli sağlayıcı da aynısını bilir ve bunu yıllarca saklar. Bu varsayımsal bir açığa çıkma değildir; "şifreli bir kasa var" ile "bu adlı şirkete ait" arasındaki birleştirme anahtarıdır. E-posta ve kimlik belgesi olmadan, Monero ile ödenen bir kayıt, kasayı değil birleştirme anahtarını kaldırır.

İkinci katman — disk. Bekleyen veri şifrelemesi yalnızca anahtara da sahip olmayan biri karşısında işe yarar ve varsayılan bir kurulumda anahtar, veritabanıyla aynı dosya sisteminde durur. .env dosyasını 600 modunda tutun, anahtarın bir kopyasını makinenin dışında saklayın ve yargı yetkisi bir veri merkezini tebligat yapmak için elverişli bir yer haline getirmeyen bir sağlayıcıyı tercih edin — Nordic yargı yetkileri kılavuzunun tüm savı budur.

Üçüncü katman — çıkış IP'si. Her HTTP Request düğümü VPS adresinden çıkar ve o adres bir itibar taşır. Hiperölçekli sağlayıcı aralıkları, internetteki en agresif biçimde hız sınırlandırılan ve CAPTCHA'yla duvarlanan aralıklardır, çünkü scraper'lar orada yaşar; kazıma veya yoklama yapan bir iş akışı, sessiz bir Nordic aralığında başarısız olmadan çok önce bir AWS veya DigitalOcean IP'sinde başarısız olmaya başlar. n8n ayrıca standart HTTP_PROXY, HTTPS_PROXY, ALL_PROXY ve NO_PROXY değişkenlerine uyar, böylece farklı bir çıkışa ihtiyaç duyan az sayıdaki iş akışı yerel bir SOCKS proxy'si veya Tor üzerinden yönlendirilebilirken geri kalan her şey doğrudan gider.

2.x serisinde yeni olan bir kapı daha: n8n, bir AI ajanının iş akışlarınızı araç olarak çağırabilmesi için örnek düzeyinde bir MCP sunucusu açığa çıkarabilir. Bu gerçekten kullanışlıdır ve aynı zamanda otomasyon katmanınıza açılan herkese açık bir uç noktadır, ki bu da diğerleriyle aynı muameleyi hak eder — TLS, OAuth ve açığa çıkma mantığı için uzak MCP sunucusu kılavuzuna bakın.

Saha notları · Altı tuzak

Bunun ters gidebileceği altı yol. İnsanların karşılaştığı sırayla.

Tuzak 01 · Geri alınamaz

Tüm kimlik bilgilerinin şifresi aniden çözülemez hale gelir

Veri birimi yeniden oluşturuldu ve n8n yeni bir şifreleme anahtarı üretti. Hiçbir şey eski kimlik bilgilerini geri getirmez. N8N_ENCRYPTION_KEY'i her zaman açıkça ayarlayın ve bir kopyasını sunucu dışında saklayın.

Tuzak 02 · Entegrasyon

Webhook URL'si localhost yazıyor

WEBHOOK_URL ayarlanmamış, bu yüzden n8n URL'leri N8N_HOST'tan oluşturuyor. WEBHOOK_URL ve N8N_EDITOR_BASE_URL'i herkese açık HTTPS adresine ayarlayın ve konteyneri yeniden başlatın.

Tuzak 03 · Erişim

Giriş formu sonsuza dek döngüye giriyor

Düzenleyiciye düz http üzerinden ulaşıyorsunuz ve güvenli oturum çerezi reddediliyor. Herkese açık bir örnekte N8N_SECURE_COOKIE'yi false yapmak yerine TLS kurulumunu tamamlayın.

Tuzak 04 · Kapasite

Disk iki ay sonra doluyor

Dakika başı tetiklenen bir yürütmeden on dört günlük tam yürütme verisi. EXECUTIONS_DATA_MAX_AGE ve PRUNE_MAX_COUNT değerlerini sıkılaştırın ve başarılı çalışmaları kaydetmeyi bırakın.

Tuzak 05 · Yükseltme

Gözetimsiz bir yeniden başlatma büyük bir sürümü çekti

:latest etiketi artı geri alınamayan veritabanı geçişleri. Açık bir etiket sabitleyin, her pull öncesi anlık görüntü alın ve büyük sürümler arasında sürüm notlarını okuyun.

Tuzak 06 · Zamanlama

Zamanlama tetikleyicileri yanlış saatte tetikleniyor

GENERIC_TIMEZONE varsayılan olarak America/New_York'tur, ki bu nadiren kimsenin istediği şeydir. GENERIC_TIMEZONE ve TZ'yi aynı gerçek dilime ayarlayın ve yeniden başlatın.

SSS · n8n'i kendi sunucunuzda barındırın

Sorular, yanıtlandı.

Bir n8n örneğini kendi sunucunuza taşımadan önce, taşırken ve taşıdıktan sonra ortaya çıkan on soru.

n8n'i kendi sunucunuzda barındırmak gerçekten ücretsiz mi?

Kendi otomasyonlarınız için, evet. n8n Sustainable Use License altında dağıtılır: iç iş amaçları için ve kişisel veya ticari olmayan kullanım için ücretsiz olarak kullanabilir, kopyalayabilir, değiştirebilir ve dağıtabilirsiniz. Lisansın yasakladığı şey, n8n'i veya türevini başkalarına ücret karşılığı sunmaktır — pratikte, "n8n hosting"i bir ürün olarak yeniden satmak. Dosya adında .ee. veya dizin yolunda .ee geçen dosyalar bu lisansın dışında tutulur ve ücretli bir n8n Enterprise License gerektirir. Yani: kiraladığınız bir VPS üzerinde kendi şirketinizi otomatikleştirmek tamamen ücretsiz haktan yararlanır; bunun üzerine barındırılan bir n8n işi kurmak öyle değildir.

n8n çalıştırmak için ne kadar VPS'e ihtiyacım var?

n8n'in kendi Docker Compose belgeleri, asgari 2 vCPU ve 4 GB RAM belirtir. Bu tam olarak Sentinel katmanıdır ($3.90/ay — 2 vCPU, 4 GB, 120 GB NVMe), ki bu, kişisel veya küçük ekip örneği için n8n artı PostgreSQL artı Caddy'yi rahatça çalıştırır. Kuyruk modu worker'ları eklediğinizde veya bellekte büyük yükler tutan iş akışları çalıştırdığınızda Garrison'a (4 vCPU, 8 GB, $7.90/ay) yükselin, günde ikili veriyle — PDF'ler, görüntüler, ses — binlerce yürütme yapan bir ekip örneği için Ravelin'e (8 vCPU, 16 GB, $16.90/ay) yükselin.

n8n için SQLite mi PostgreSQL mi?

SQLite varsayılandır ve az sayıda iş akışına sahip tek bir kişi için gerçekten yeterlidir. Eşzamanlı yürütmeleriniz olduğunda, yürütme geçmişi birkaç yüz bin satırı aştığında veya ölçeklenmeyi planladığınızda PostgreSQL'e geçin — ve kuyruk modunun SQLite'ı hiçbir şekilde desteklemediğini unutmayın. Daha sonra geçiş yapmak, iş akışlarını ve kimlik bilgilerini dışa aktarıp yeni bir örneğe yeniden içe aktarmak anlamına gelir, ki bu keyif almayacağınız bir öğleden sonradır. Büyüme ihtimali varsa PostgreSQL ile başlayın; bu kılavuzdaki Compose dosyası zaten öyle yapıyor.

N8N_ENCRYPTION_KEY'i kaybedersem ne olur?

Veritabanındaki her kimlik bilgisi kalıcı olarak okunamaz hale gelir. n8n, saklanan kimlik bilgilerini — OAuth token'larını, API anahtarlarını, SMTP parolalarını — bu anahtarla şifreler; onları geri getirecek hiçbir kurtarma mekanizması ve hiçbir destek talebi yoktur. Her kimlik bilgisini elle yeniden girersiniz. Kendi barındırılan bir n8n örneğinin en yaygın yıkılış biçimi budur: biri Docker birimini yeniden oluşturur, n8n yeni bir anahtar üretir ve tüm iş akışları aynı anda bir şifre çözme hatasıyla başarısız olmaya başlar. Anahtarı ilk açılıştan önce .env dosyanızda açıkça belirleyin ve bir kopyasını sunucu olmayan bir yerde saklayın.

n8n webhook'larım neden tetiklenmiyor?

Sıklık sırasına göre dört neden. (1) WEBHOOK_URL ayarlanmamış, bu yüzden düzenleyici size hiçbir dış hizmetin erişemeyeceği bir http://localhost:5678/webhook/… URL'si verir — bunu herkese açık HTTPS URL'nize ayarlayın. (2) İş akışı etkinleştirilmemiş; test URL'si yalnızca düzenleyici açıkken dinler, üretim URL'si ise yalnızca iş akışı etkin olduğunda var olur. (3) DNS veya güvenlik duvarı: kayıt çözümlenmiyor ya da 80/443 bağlantı noktaları kapalı. (4) Fazladan bir proxy katmanının arkasındasınız ve N8N_PROXY_HOPS'u ayarlamadınız, bu yüzden n8n yanlış istemci IP'sini okuyor. Sunucu olmayan bir makineden düz bir curl ile test edin.

n8n'i aynı VPS üzerinde diğer hizmetlerle birlikte çalıştırabilir miyim?

Evet, ve bu normal örüntüdür — önde bir Caddy, bir Compose ağı, bir ana bilgisayar adında n8n ve diğerlerinde Vaultwarden, Nextcloud veya SearXNG. İki uyarı. Bellek: n8n artı PostgreSQL boşta yaklaşık 700 MB'de durur ve ağır bir iş akışı bunun çok ötesine sıçrayabilir, bu yüzden pay bırakın. Etki yarıçapı: n8n veritabanı kutudaki en kimlik bilgisi yoğun şeydir, bu yüzden o host'u paylaşan başka her şey onun risk profilini devralır. $3.90/ay bir katmanda, otomasyon motoruna kendi sunucusunu vermek makuldür.

Kendi barındırılan n8n dışarıya veri gönderir mi?

Varsayılan olarak üç uç nokta. Anonim ürün telemetrisi (N8N_DIAGNOSTICS_ENABLED, varsayılan true), api.n8n.io'ya karşı yeni sürüm ve güvenlik güncellemesi kontrolü (N8N_VERSION_NOTIFICATIONS_ENABLED, varsayılan true) ve https://api.n8n.io'dan veri çeken iş akışı şablon tarayıcısı (N8N_TEMPLATES_ENABLED, varsayılan true). Bunların hiçbiri kimlik bilgilerinizi veya iş akışı verinizi göndermez, ama üçü de IP'nizde bir örneğin var olduğunu duyurur. Kutunun sessiz kalmasını istiyorsanız üçünü de false yapın — şablon galerisini ve güncelleme bandını kaybedersiniz, bu yüzden sürümleri kendiniz takip edin.

n8n Cloud mu kendi barındırma mı — başabaş nerede?

n8n Cloud Starter, 2,500 yürütme için yıllık faturalandırmayla €20/ay; Pro, 10,000 için €50/ay. Bir Sentinel VPS $3.90/ay'dır ve yürütme sayısı yalnızca CPU ve RAM ile sınırlıdır, ki bu tipik webhook-ve-API iş akışları için on binler anlamına gelir. Parasal başabaş anındadır; gerçek maliyet operasyoneldir. Kendi barındırma, güncellemelerin, yedeklemelerin, TLS yenilemesinin ve sabahın 3'ündeki disk dolu olayının sahibi olmanız demektir. Dürüst kural: bir güvenlik sürümünün bir ayı içinde örneği kendiniz güncellemeyecek olsaydınız, Cloud için ödeyin. Aylık bir docker compose pull zaten hayatınızın parçasıysa, kendi sunucunuzda barındırın.

KYC gerektirmeyen bir sunucu özellikle bir otomasyon sunucusu için neden önemli?

Bir n8n örneğinin barındırdığı şey yüzünden. Kimlik bilgisi tablosu, otomatikleştirdiğiniz her hizmetin API anahtarlarını, OAuth token'larını ve posta parolalarını tutan tek bir şifreli depodur; yanındaki iş akışı grafiği ise işletmenizin gerçekte nasıl çalıştığının okunabilir bir haritasıdır — hangi CRM, hangi banka akışı, hangi tedarikçi, hangi müşteriler. Statik bir web sitesi bunların hiçbirini sızdırmaz. Uygulama katmanı bunu iyi korur; sızıntının olduğu yer meta veri katmanıdır. Makinenin kaydında bir pasaport taraması ve bir kart varsa, kasayı şifrelemiş ama adınızı kapıya yazmışsınız demektir. Monero ile ödenen bir no-KYC sunucu bu iki katmanı hizalı tutar.

Bu VPS üzerinde n8n içinde AI ajanları çalıştırabilir miyim?

Yaygın biçim için evet — uzak bir model API'sini çağıran bir AI Agent düğümü. Bu iş yükü I/O'ya bağlıdır, sağlayıcıyı bekler ve bir Sentinel bunun altından kalkar. Uymayan şey modelin kendisini çalıştırmaktır: 7B'lik yerel bir model yaklaşık 8 GB RAM ister ve gerçek çıkarım hızı, bu katmanların taşımadığı bir GPU ister. n8n'i uzak bir OpenAI uyumlu uç noktaya yönlendirin ve VPS'i hafif tutun. Bir AI ajanını 7/24 çalıştırma üzerine olan eşlik eden kılavuz, çalışma zamanı tarafını ele alır — yeniden başlatma politikaları, gizli değerler, harcama sınırları ve çökme döngüsü tuzağı.

Sunucuyu edinin

Otomasyon motorunuz için Nordic VPS. KYC gerektirmez, kripto ile ödeme.

Sentinel (2 vCPU, 4 GB, 120 GB NVMe, $3.90/ay), aynı kutuda PostgreSQL ve Caddy için yer bırakarak n8n asgari gereksinimini karşılar. Kayıtta e-posta yok, kimlik belgesi yok, sınırsız yürütme.

Son inceleme · 2026-08-24 · Kaynaklar · n8n barındırma belgeleri, n8n LICENSE.md (Sustainable Use License), n8n.io fiyatlandırma sayfası, Docker ve Caddy üst kaynak belgeleri · Kadans · yıllık