İçeriğe geç
Uygulama yayınlama

n8n'i VPS'te Docker Compose ile Kurma

n8n için Docker Compose, kalıcı veri, şifreleme anahtarı, HTTPS ve webhook adresini yapılandırın. Lisans, güncelleme ve geri yükleme kontrol listesi.

ServerQ Yayın Ekibi11 dk okuma

n8n’i kendi VPS’inizde barındırmak iş akışları, veriler ve ağ erişimi üzerinde kontrol sağlar. Bunun karşılığında sürüm güncellemeleri, sırların korunması, HTTPS, veritabanı ve geri yükleme sizin operasyon planınıza dahil olur.

Bu rehber 30 Eylül 2026’da resmî belgelerde stable olarak gösterilen n8n 2.41.4 sürümünü örnek alır. Tek instance, kalıcı SQLite verisi ve Nginx ters vekil kullanılır. Yoğun eş zamanlı işler veya queue mode için PostgreSQL, Redis, worker ve task runner tasarımı ayrıca gerekir.

Bu rehberle neler yapabilirsiniz?

  • Sürümü belirli n8n container’ı ve kalıcı veri oluşturmak
  • HTTPS, webhook adresi ve proxy güven sınırını kurmak
  • Şifreleme anahtarı, güncelleme ve geri yükleme planını tamamlamak
Kapsam

Tek n8n instance’ı için başlangıç kurulumu. Alan adı ve anahtar yer tutucularını değiştirin; üretim ihtiyacınıza göre kaynak ve mimariyi ölçün.

Başlamadan önce
  • Docker Engine ve Compose eklentisi kurulu Ubuntu VPS
  • Nginx ve kendinize ait alan adı
  • Kalıcı veriyi ve sırları yedekleyecek ayrı hedef
  • İş akışlarının çağıracağı servislere ait yetkili API hesapları

1. Kullanım kapsamını ve sürümü doğrulayın

n8n’in topluluk sürümü fair-code yaklaşımı ve Sustainable Use License koşullarıyla dağıtılır. Kendi iç iş süreçleriniz ile n8n’i başkalarına ücretli erişim sağlayan bir hizmete dönüştürmek aynı lisans durumu değildir. Ticari bir müşteri ürünü, gömülü kullanım veya barındırılmış n8n satışı tasarlıyorsanız ilgili lisans ve kurumsal koşulları kontrol edin.

Bu rehber bir yönetilen n8n hizmeti sunulduğunu varsaymaz. VPS işletim sistemi, container, erişim ve yedek yönetimi kullanıcıya aittir. Kuruluma başlamadan önce n8n sürüm notlarını okuyun; özellikle büyük sürüm yükseltmelerinde veritabanı geçişleri ve kaldırılan ayarlar olabilir.

2. Proje klasörünü ve şifreleme anahtarını oluşturun

Yönetici hesabında
mkdir -p ~/n8n
cd ~/n8n
umask 077
openssl rand -hex 32 > encryption-key.txt
chmod 600 encryption-key.txt
nano .env

Üretilen değeri encryption-key.txt dosyasından .env içindeki N8N_ENCRYPTION_KEY alanına kopyalayın. Bu anahtar, n8n kimlik bilgilerini çözebilmek için gereklidir. Sonradan rastgele değiştirmeyin; veritabanı ve anahtar aynı geri yükleme setinde bulunmalıdır. Aşağıdaki anahtar metni örnektir ve gerçek kurulumda kullanılmamalıdır.

.env — alan adı ve anahtarı değiştirin
N8N_HOST=n8n.example.com
N8N_ENCRYPTION_KEY=REPLACE_WITH_GENERATED_64_HEX_CHARACTERS
Sır dosyalarının izinleri
chmod 600 .env
printf "%s\n" ".env" "encryption-key.txt" > .gitignore

Şifreleme anahtarını terminal kayıtlarına veya destek mesajlarına koymayın. .gitignore dosyası daha önce Git’e eklenmiş bir sırrı geçmişten silmez. Proje klasörünü paylaşmadan önce içerikleri ve geçmişi kontrol edin. Docker yetkili kullanıcılarının container ortam değişkenlerini okuyabildiğini de dikkate alın.

3. Kalıcı veriyle Compose tanımını yazın

compose.yaml
name: serverq-n8n
services:
  n8n:
    image: n8nio/n8n:2.41.4
    restart: unless-stopped
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      N8N_HOST: ${N8N_HOST:?Set N8N_HOST in .env}
      N8N_PORT: "5678"
      N8N_PROTOCOL: https
      N8N_EDITOR_BASE_URL: https://${N8N_HOST}
      N8N_WEBHOOK_URL: https://${N8N_HOST}/
      N8N_PROXY_HOPS: "1"
      N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY:?Set encryption key in .env}
      N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
      GENERIC_TIMEZONE: Europe/Istanbul
      TZ: Europe/Istanbul
    volumes:
      - n8n_data:/home/node/.n8n
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
volumes:
  n8n_data:

5678 portu yalnızca localhost’a bağlanır. N8N_PROTOCOL ve webhook adresi dışarıdaki HTTPS adresini anlatır; Nginx ile container arasındaki yerel bağlantı HTTP’dir. Tek Nginx ters vekili için N8N_PROXY_HOPS=1 kullanılır. Önüne CDN veya başka proxy eklerseniz güvenilen proxy zincirini yeniden değerlendirin.

n8n_data volume’ı SQLite veritabanı dahil kalıcı uygulama verisini saklar. PostgreSQL’e geçtiğinizde bile /home/node/.n8n dizinini kalıcı tutmak gerekir. Uygulama geçişi ayrı bir işlem olduğundan mevcut veritabanını bağlantı değişkenlerini değiştirerek otomatik taşınmış kabul etmeyin.

Başlatma ve yerel kontrol
sudo docker compose config --quiet
sudo docker compose pull
sudo docker compose up -d
sudo docker compose ps
sudo docker compose logs --tail=80 n8n
curl --fail http://127.0.0.1:5678/healthz

config --quiet söz dizimini kontrol eder, sırları normal config çıktısı gibi terminale dökmez. healthz başarılı olsa bile gerçek workflow ve webhook davranışı ayrıca denenmelidir. Container sürekli yeniden başlıyorsa önce günlükleri inceleyin; sorunu veri volume’ını silerek çözmeye çalışmayın.

4. Nginx ve HTTPS bağlantısını kurun

n8n.example.com A ve varsa AAAA kaydını kendi sunucunuza yönlendirin. Nginx dosyasını /etc/nginx/sites-available/n8n olarak kaydedin. WebSocket yükseltmesi, uzun sürebilen istekler ve doğru forwarded başlıkları bu örneğe dahildir.

/etc/nginx/sites-available/n8n
server {
    listen 80;
    listen [::]:80;
    server_name n8n.example.com;

    location / {
        proxy_pass http://127.0.0.1:5678;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_read_timeout 300s;
        proxy_buffering off;
    }
}
Nginx yapılandırmasını etkinleştirin
sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/n8n
sudo nginx -t && sudo systemctl reload nginx

Nginx ve HTTPS rehberindeki Certbot adımlarıyla bu alan adına sertifika ekleyin. İlk kullanıcı hesabını yalnızca doğru HTTPS adresinden oluşturun. Kurulum ekranını açık halde bırakmayın. Düzenleyiciye erişim ile webhook trafiğinin ihtiyaçları farklı olabilir: editöre VPN veya ek erişim kısıtı koyarken dış servislerin yetkili webhook çağrılarını engellemediğinizi doğrulayın.

Webhook yolu
  1. 01Yetkili dış servis
  2. 02HTTPS / Nginx
  3. 03Yerel n8n :5678
  4. 04İş akışı

Uygulamada gösterilen üretim webhook URL’si genel HTTPS alan adınızla eşleşmelidir.

5. İş akışını dış etki yaratmadan deneyin

  1. İlk kullanıcıyı oluşturun ve hesap güvenlik ayarlarını tamamlayın.
  2. Dış servise veri göndermeyen basit bir Manual Trigger akışı çalıştırın.
  3. Deneme webhook’unu yalnızca kendi test isteğinizle doğrulayın.
  4. Üretim webhook URL’sinin HTTPS ve doğru alan adı kullandığını kontrol edin.
  5. Zamanlanan bir iş için Europe/Istanbul saat dilimini doğrulayın.
  6. Örnek kimlik bilgisini kaydedip uygulama yeniden başladıktan sonra erişebildiğinizi kontrol edin.

Test webhook adresi ile üretim adresi farklı olabilir; üretim iş akışının etkinlik durumunu kontrol edin. Bir işin yeniden denenmesi aynı kaydı iki kere oluşturmamalıdır. Ödeme, bildirim veya kayıt yazan akışlarda kimlik doğrulama, tekrar güvenliği ve hata dalını gerçek sisteme açılmadan önce tasarlayın.

Örnek kurulum gelişmiş Code node izolasyonu veya yoğun queue mode mimarisini kapsamaz. Üretimde kullanıcı kodu çalıştırıyorsanız n8n’in haricî task runner güvenlik önerilerini inceleyin. Güvenilmeyen kişilere workflow düzenleme yetkisi vermek sunucudaki sırlar ve erişilen servisler üzerinde risk oluşturabilir.

6. Veriyi ve anahtarı birlikte koruyun

Geri yükleme seti
ÖğeNeden gerekli?
n8n_data volume’ıSQLite veritabanı, uygulama ayarları ve diğer kalıcı dosyalar.
N8N_ENCRYPTION_KEYKaydedilen kimlik bilgilerinin çözülebilmesi.
Compose ve .envAlan adı, çalışma ayarları ve sürüm kaydı.
Sürüm / image digestVeritabanı ile uyumlu uygulamayı yeniden başlatma.

SQLite kullanırken tutarlı dosya yedeği için planlı kısa bir durdurma veya SQLite’ın desteklediği tutarlı yedekleme yöntemi kullanın. Container çalışırken yalnızca database.sqlite dosyasını kopyalamak ilişkili günlük dosyalarını kaçırabilir. Export edilen workflow dosyaları tam instance yedeğinin yerine geçmez.

Güncellemeden önce n8n sürüm notlarını inceleyin ve yedeği izole ortamda açın. compose.yaml içindeki sürümü bilinçli değiştirip pull ve up -d uygulayın. Eski image’a dönmek veritabanı geçişini geri almaz; gerektiğinde uyumlu veri yedeğiyle dönülür. Yük büyüdüğünde execution saklama süresi, eş zamanlılık, büyük dosyalar ve veritabanı kullanımını ölçerek kapasite planlayın.

İnceleme kapsamı

Compose dosyası resmî Docker Compose CLI 5.5.1 ile, Nginx dosyası izole nginx -t kontrolüyle doğrulandı. n8n container’ı ve gerçek webhook akışı bu kapsamda çalıştırılmadı. Resmî dokümanlar ve örnek yapılandırmalar 30 Eylül 2026 tarihinde incelendi. Bu rehberdeki tam kurulum boş bir VPS üzerinde uçtan uca çalıştırılmadı. Mevcut sunucunuzu değiştirmeden önce ayrı bir deneme ortamında, kendi sürüm ve erişim koşullarınızla doğrulayın.

Resmî kaynaklar

Sürüm ve yapılandırma ayrıntılarını ilgili projenin güncel belgelerinden takip edin.