n8n’i Docker ile Kendi Sunucunuzda Barındırma: Adım Adım Kılavuz (HTTPS, Yedeklemeler, Güncellemeler)

Kendi sunucunuzda Docker Compose ile n8n çalıştırmaya yönelik pratik bir rehber; HTTPS, PostgreSQL, şifreleme anahtarı, web kancaları, yedeklemeler ve güvenli güncellemeleri içermektedir.

n8n, en popüler iş akışı otomasyon araçlarından biridir ve en büyük avantajlarından biri, onu kendiniz barındırabilmenizdir. Bu, verileriniz üzerinde tam kontrol sağlar, her bir yürütme için ücret yoktur ve dahili sistemlerle bağlantı kurma özgürlüğü sunar.

Bu kılavuz, Docker Compose ile üretim hazır bir kendi barındırılan n8n örneğini nasıl kuracağınızı gösterir: HTTPS, bir PostgreSQL veritabanı, doğru webhook URL’leri, yedeklemeler ve güncellemeler. Hala bir araç seçiyorsanız, önce n8n vs Zapier vs Make karşılaştırmamı okuyun.

Neye ihtiyacınız var

  • Küçük iş yükleri için en az 2 GB RAM’e sahip bir Linux VPS (örneğin Ubuntu LTS), ağır veya AI iş akışları için daha fazla.
  • Bir alan adı veya alt alan adı, örneğin n8n.example.com, sunucunun IP’sine işaret eder.
  • Docker ve Docker Compose eklentisi yüklendi
  • Komut satırı ile temel rahatlık

Adım 1: Docker’ı Kurun

Ubuntu’da, Docker Engine ve Compose eklentisi için Docker’ın resmi kurulum talimatlarını izleyin. Ardından kontrol edin:

docker --version
docker compose version

Adım 2: Hızlı test çalıştırması (isteğe bağlı)

n8n’in bir dakikada çalıştığını görmek için:

docker volume create n8n_data
docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n

Açık http://SERVER-IP:5678. Bu test için uygun, ancak üretim için değil: HTTPS yok, SQLite veritabanı yok ve otomatik yeniden başlatmalar yok.

Adım 3: Proje klasörünü oluşturun

mkdir -p ~/n8n && cd ~/n8n

Adım 4: .env dosyasını oluşturun

DOMAIN=n8n.example.com
GENERIC_TIMEZONE=Europe/Amsterdam
POSTGRES_USER=n8n
POSTGRES_PASSWORD=change-this-strong-password
POSTGRES_DB=n8n
N8N_ENCRYPTION_KEY=change-this-long-random-string

Güçlü bir şifreleme anahtarı oluşturun, örneğin openssl rand -hex 32 ile.

Önemli: n8n, saklanan kimlik bilgilerini şifrelemek için N8N_ENCRYPTION_KEY kullanır. Eğer bunu kaybederseniz, kaydedilmiş her kimlik bilgisine erişimi kaybedersiniz. Bunu şifre yöneticinizde saklayın.

Adım 5: docker-compose.yml oluşturun

services:
  postgres:
    image: postgres:16
    restart: unless-stopped
    environment:
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB=${POSTGRES_DB}
    volumes:
      - db_data:/var/lib/postgresql/data

  n8n:
    image: docker.n8n.io/n8nio/n8n
    restart: unless-stopped
    ports:
      - "127.0.0.1:5678:5678"
    environment:
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
      - DB_POSTGRESDB_USER=${POSTGRES_USER}
      - DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
      - N8N_HOST=${DOMAIN}
      - N8N_PROTOCOL=https
      - N8N_PORT=5678
      - WEBHOOK_URL=https://${DOMAIN}/
      - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
      - TZ=${GENERIC_TIMEZONE}
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      - postgres

volumes:
  db_data:
  n8n_data:

Birkaç not:

  • Port 5678 sadece 127.0.0.1 adresine bağlıdır, bu nedenle n8n yalnızca ters proxy üzerinden erişilebilir.
  • WEBHOOK_URL n8n’de gösterilen webhook URL’lerinin sizin kamuya açık HTTPS alan adınızı kullandığından emin olur.
  • Üretimde, n8n görüntüsünü latest yerine belirli bir sürüm etiketine sabitleyin, böylece güncellemeler istediğiniz zaman gerçekleşir.

Adım 6: Ters proxy ile HTTPS ekleyin

En basit seçenek Caddy’dir; Let’s Encrypt sertifikalarını otomatik olarak alır ve yeniler. Caddy’yi ana makineye kurun ve bu Caddyfile‘ı kullanın:

n8n.example.com {
    reverse_proxy 127.0.0.1:5678
}

Nginx, Certbot veya Traefik ile aynı şekilde çalışır. WebSocket bağlantılarının geçiş yaptığından emin olun, n8n editörü bunlara ihtiyaç duyar.

Adım 7: n8n’i Başlat

docker compose up -d
docker compose logs -f n8n

Açın https://n8n.example.com ve sahip hesabını oluşturun.

Adım 8: Sunucuyu güvence altına al

  • Ateş duvarında yalnızca 22, 80 ve 443 numaralı portlara izin verin (örneğin ufw ile)
  • SSH anahtarlarını kullanın ve şifreli oturum açmayı devre dışı bırakın.
  • OS ve Docker’ı güncel tutun
  • n8n’ de kimlerin hesap oluşturabileceğini kısıtlayın ve mevcut olduğunda iki faktörlü kimlik doğrulamayı etkinleştirin.
  • Kod veya komut çalıştırabilen düğümlere dikkat edin, özellikle de birden fazla kişi örneği kullanıyorsa.

Adım 9: n8n yedeğini alın

İki şeyi yedeklemeniz gerekiyor: veritabanı ve şifreleme anahtarı (sizin .env dosyanız).

Veritabanı yedeği:

docker compose exec -T postgres pg_dump -U n8n n8n | gzip > n8n-$(date +%F).sql.gz

n8n CLI ile iş akışlarını ve kimlik bilgilerini de dışa aktarabilirsiniz:

docker compose exec n8n n8n export:workflow --all --output=/home/node/.n8n/backup-workflows.json

Yedekleri sunucudan kopyalayın. Aynı sunucudaki bir yedek yedek değildir. Benim sunucu yedekleme kılavuzum basit ve güvenilir bir kurulumu açıklıyor.

Adım 10: n8n’i güvenli bir şekilde güncelleyin

docker compose pull
docker compose up -d

Büyük güncellemelerden önce:

  1. n8n’in sürüm notlarını kırıcı değişiklikler için okuyun
  2. Veritabanı yedeği alın
  3. Güncellemeden sonra önemli iş akışlarını test edin

Ölçekleme: kuyruk modu

Yüksek hacimler için, n8n kuyruk modunu destekler: ana örnek tetikleyicileri ve web kancalarını alır, Redis bir kuyruk tutar ve ayrı işçi konteynerleri iş akışlarını yürütür. Basit başlayın ve yürütmeler beklemeye başladığında veya sunucu sürekli meşgul olduğunda kuyruk moduna geçin.

Sorun Giderme

Webhook URL’leri localhost’u gösteriyor.

WEBHOOK_URL değerini genel HTTPS URL’niz ile ayarlayın ve yeniden başlatın.

“Editörde bağlantı kesildi”

Genellikle ters proxy, WebSocket bağlantılarını iletmez. Proxy yapılandırmanızı kontrol edin.

Kimlik bilgileri sunucular taşındıktan sonra şifrelenemez.

Yeni sunucudaki N8N_ENCRYPTION_KEY farklı. Orijinal anahtarı kullanın.

Programlardaki yanlış saatler

GENERIC_TIMEZONE ve TZ değerlerini kendi zaman diliminize ayarlayın.

Sıkça sorulan sorular

Kendi barındırılan n8n ücretsiz mi?

Yazılım, n8n lisansı altında kendi sunucunuzda barındırılabilir; bazı özellikler ücretli planlar için ayrılmıştır. Sunucunuz için ödeme yaparsınız ve onu sürdürmek için gereken süreye. Kullanım durumunuz için n8n’in mevcut lisans şartlarını kontrol edin.

SQLite mi yoksa PostgreSQL mi?

SQLite, test ve küçük kurulumlar için uygundur. PostgreSQL, üretim, daha büyük yürütme geçmişleri ve kuyruk modu için daha sağlamdır.

Ne kadar sunucuya ihtiyacım var?

Küçük örnekler 2 GB RAM üzerinde çalışır. Büyük dosyaları, birçok öğeyi veya AI çağrılarını işleyen iş akışları daha fazla belleğe ihtiyaç duyar. Belleği izleyin ve gerektiğinde ölçeklendirin.

n8n’i doğru bir şekilde kurmak mı istiyorsunuz?

Kendi barındırdığım n8n örneklerini kuruyor ve sürdürüyorum ve bunların üzerine iş akışları inşa ediyorum: depo, CRM, e-posta, ERP ve AI entegrasyonları. Benim pazarlama otomasyonu hizmetimi ve sunucular ve yedekleme hizmetimi görebilir veya yardım isteyebilirsiniz.