EUR
european

EUR

usa

USD

Ex. VAT Ex. VAT 0%

Docker ve PostgreSQL ile n8n Kurulumu

n8n, kendi sunucunuzda çalıştırabileceğiniz bir iş akışı otomasyon platformudur. Kendi sunucunuzda barındırılan (self-hosted) bir örnek, iş akışlarınızı, kimlik bilgilerinizi ve yürütme verilerinizi kontrolünüz altında tutar ve sunucunun kaldırabileceği dışında iş akışı veya yürütme sayısı üzerinde herhangi bir sınırlama yoktur.

Bu kılavuz, n8n'i PostgreSQL, HTTPS ve yedeklemelerle birlikte özel bir sunucuda kurar. Docker Compose tarafından yönetilen üç konteyner kullanır:

  • n8n, otomasyon platformunun kendisi;
  • PostgreSQL, iş akışları, kimlik bilgileri ve yürütme geçmişi için veritabanı;
  • Caddy, otomatik olarak bir HTTPS sertifikası alan ve yenileyen bir ters proxy (reverse proxy).

Varsayılan olarak n8n verilerini SQLite'ta saklar. Bu kılavuz bunun yerine PostgreSQL kullanır: n8n çalışırken yedeklenebilir ve n8n'in kendi sunucuda barındırma için önerdiği veritabanı budur.

Adımlar, n8n 2.46.7, PostgreSQL 17, Docker 29 ve Docker Compose v5 ile Ubuntu 24.04 LTS üzerinde test edilmiştir.

Başlamadan önce

Şunlara ihtiyacınız olacak:

  • SSH üzerinden root erişimi olan Ubuntu 24.04 LTS çalıştıran bir sunucu;
  • n8n için bir alan adı veya alt alan adı, örneğin n8n.example.com;
  • bu ad için sunucunun IPv4 adresini işaret eden bir A kaydı.

Alan adının ayrıca bir AAAA kaydı varsa, sunucunun bu adreste IPv6 üzerinden erişilebilir olması gerekir. Aksi takdirde Let's Encrypt önce IPv6'yı denemeyi deneyebilir ve sertifikayı vermede başarısız olabilir.

Devam etmeden önce kaydın sunucunuza çözümlendiğini kontrol edin:

dig +short n8n.example.com

Komut, sunucunun IP adresini döndürmelidir. Caddy'deki sertifika verme işlemi buna bağlıdır, bu nedenle DNS yayılana kadar bekleyin.

Aşağıdaki tüm komutlar root olarak çalıştırılır. Sudo haklarına sahip normal bir kullanıcı olarak çalışıyorsanız, her komutun başına sudo ekleyin.

Docker'ı Yükleyin

Docker Engine ve Compose eklentisini resmi Docker deposundan yükleyin. Ubuntu deposundaki docker.io paketi daha eskidir ve Compose v2'yi içermez.

apt update && apt install -y ca-certificates curl 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

Depoyu ekleyin:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" > /etc/apt/sources.list.d/docker.list

Paketleri yükleyin:

apt update apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Her iki aracın da kullanılabilir olduğunu kontrol edin:

docker --version docker compose version

Proje dizinini ve gizli anahtarları oluşturun

Tüm n8n dosyaları /opt/n8n içinde olacaktır:

mkdir -p /opt/n8n && cd /opt/n8n

Alan adınız, saat diliminiz ve oluşturulan gizli anahtarlarınızla .env dosyasını oluşturun. n8n.example.com ve saat dilimini kendi değerlerinizle değiştirin:

cat > .env <<EOF DOMAIN=n8n.example.com GENERIC_TIMEZONE=Europe/Amsterdam POSTGRES_USER=n8n POSTGRES_DB=n8n POSTGRES_PASSWORD=$(openssl rand -hex 24) N8N_ENCRYPTION_KEY=$(openssl rand -hex 32) EOF chmod 600 .env

GENERIC_TIMEZONE, Schedule Trigger düğümü ve diğer zamana dayalı düğümler tarafından kullanılan saat dilimini ayarlar. Bu olmadan n8n America/New_York kullanır.

N8N_ENCRYPTION_KEY, n8n'in içine kaydettiğiniz kimlik bilgilerini (API belirteçleri, parolalar, OAuth gizli anahtarları) şifrelemek için kullandığı anahtardır. Bu anahtar kaybolursa, geri yüklenen bir veritabanındaki kimlik bilgileri şifresi çözülemez ve her birinin yeniden girilmesi gerekir.

Warning

.env dosyasını hemen sunucu dışında güvenli bir yere, örneğin bir parola yöneticisine kopyalayın. N8N_ENCRYPTION_KEY olmadan bir veritabanı yedeği, iş akışlarınızı geri yükler ancak kimlik bilgilerinizi geri yüklemez.

Docker Compose dosyasını oluşturun

/opt/n8n/compose.yaml dosyasını oluşturun:

services: postgres: image: postgres:17 restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} POSTGRES_DB: ${POSTGRES_DB} volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] interval: 10s timeout: 5s retries: 5 n8n: image: docker.n8n.io/n8nio/n8n restart: unless-stopped depends_on: postgres: condition: service_healthy 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_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY} N8N_HOST: ${DOMAIN} N8N_PROTOCOL: https N8N_PROXY_HOPS: 1 N8N_WEBHOOK_URL: https://${DOMAIN}/ GENERIC_TIMEZONE: ${GENERIC_TIMEZONE} TZ: ${GENERIC_TIMEZONE} ports: - "127.0.0.1:5678:5678" volumes: - n8n_data:/home/node/.n8n caddy: image: caddy:2 restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - caddy_data:/data - caddy_config:/config volumes: postgres_data: n8n_data: caddy_data: caddy_config:

Bu dosyadaki bazı ayrıntılar güvenlik ve stabilite için önemlidir.

PostgreSQL'in bir ports bölümü yoktur. Veritabanına yalnızca projedeki diğer konteynerlerden erişilebilir, asla internetten erişilemez.

n8n bağlantı noktası 127.0.0.1:5678 olarak yayınlanır. Kullanıcılar n8n'e yalnızca HTTPS üzerinden Caddy aracılığıyla ulaşır, ancak n8n'i sunucuda yerel olarak kontrol etmeye devam edebilirsiniz.

Warning

n8n bağlantı noktası satırını 5678:5678 olarak kısaltmayın. Docker, yayınlanan bağlantı noktaları için kendi güvenlik duvarı kurallarını ekler ve bunlar UFW'yi atlar. 127.0.0.1 öneki olmadan, UFW 5678 numaralı bağlantı noktasını engellese bile n8n, her yerden düz HTTP üzerinden erişilebilir hale gelir.

Bir healthcheck ile depends_on koşulu, n8n'in PostgreSQL bağlantıları kabul etmeye hazır olana kadar beklemesini sağlar. Bu olmadan, n8n soğuk bir önyüklemede önce başlayabilir ve veritabanına bağlanmada başarısız olabilir.

N8N_PROXY_HOPS, n8n'e bir ters proxy arkasında çalıştığını söyler, böylece gerçek istemci adresini proxy başlıklarından okur. N8N_WEBHOOK_URL, n8n'in webhook URL'leri için gösterdiği genel adresi ayarlar. 2.30 öncesi n8n sürümlerinde bu değişken WEBHOOK_URL olarak adlandırılır.

Caddy ile HTTPS Yapılandırma

Alan adınızla /opt/n8n/Caddyfile dosyasını oluşturun:

n8n.example.com { reverse_proxy n8n:5678 }

Tüm yapılandırma budur. İlk başlatmada, Caddy alan adı için bir Let's Encrypt sertifikası ister, HTTP'yi HTTPS'ye yönlendirir ve süresi dolmadan önce sertifikayı yeniler. Bunun çalışması için 80 ve 443 numaralı bağlantı noktalarının açık olması gerekir.

Güvenlik Duvarını Yapılandırma

Önce SSH'ye, ardından HTTP ve HTTPS'ye izin verin ve UFW'yi etkinleştirin:

ufw allow OpenSSH ufw allow 80/tcp ufw allow 443/tcp ufw --force enable ufw status

Info

UFW zaten kendi kurallarınızla etkinleştirilmişse, değişiklik yapmadan önce ufw status komutunu çalıştırın ve ihtiyacınız olan kuralları koruyun. UFW'yi etkinleştirmeden önce OpenSSH'ye izin vermek, mevcut SSH oturumunuzun kesilmesini önler.

n8n'i Başlatma

Konteynerleri arka planda başlatın:

cd /opt/n8n docker compose up -d

İlk başlatma görüntüleri indirir ve bir veya iki dakika sürer. Üç konteynerin de çalıştığını ve PostgreSQL'in sağlıklı (healthy) olduğunu kontrol edin:

docker compose ps

n8n günlüğüne bakın:

docker compose logs n8n --tail 50

Günlük şu şekilde bir satırla bitmelidir:

Editor is now accessible via: https://n8n.example.com

n8n'in yerel olarak ve Caddy üzerinden yanıt verip vermediğini kontrol edin:

curl -s http://127.0.0.1:5678/healthz curl -s https://n8n.example.com/healthz

Her iki komut da {"status":"ok"} döndürmelidir.

İkinci komut başarısız olursa, docker compose logs caddy ile Caddy günlüğünü kontrol edin. En yaygın neden, henüz bu sunucuyu işaret etmeyen bir DNS kaydı veya 80 ve 443 numaralı bağlantı noktalarının kapalı olmasıdır.

Sahip Hesabı Oluşturma

Tarayıcınızda https://n8n.example.com adresini açın. İlk ziyarette n8n, sahip hesabı oluşturmanızı ister. Bu hesap, örnek üzerinde tam haklara sahiptir ve diğer tüm kullanıcıları yönetir.

E-posta adresinizi, adınızı ve soyadınızı ve bir parolayı girin, ardından İleri (Next) düğmesine tıklayın. Parola en az 8 karakter uzunluğunda olmalı ve en az bir rakam ve bir büyük harf içermelidir. Güçlü bir parola kullanın: n8n düzenleyicisi internete açıktır ve içine giren herkes iş akışlarınız aracılığıyla sunucuda komutlar çalıştırabilir.

İlk girişten sonra n8n kısa bir anket gösterir: Customize n8n to you. Sorular isteğe bağlıdır. Cevaplayıp cevaplamadığınızdan bağımsız olarak kapatmak için Başlayın (Get started) düğmesine tıklayın.

Ardından n8n, Community Edition'ın birkaç özelliği için ücretsiz bir lisans anahtarı sunar: gelişmiş hata ayıklama, yürütme araması ve etiketleme ve iş akışları için klasörler. Anahtar, girdiğiniz e-posta adresine gönderilir. Bunu almak için Send me a free license key düğmesine tıklayın veya bu özelliklere ihtiyacınız yoksa Atla (Skip) düğmesine tıklayın.

Genel bakış sayfası açılır. Kurulum tamamlanmıştır ve ilk iş akışınızı oluşturabilirsiniz.

n8n'i Yedekleme

Bir n8n yedeği iki bölümden oluşur: iş akışlarınızı, kimlik bilgilerinizi, kullanıcılarınızı ve yürütme geçmişinizi içeren bir PostgreSQL dökümü (dump) ve N8N_ENCRYPTION_KEY içeren .env dosyası. Hiçbir bölüm diğeri olmadan kullanışlı değildir.

Bu kurulumda n8n tüm durumunu PostgreSQL'de tutar. n8n_data biriminin yedeklenmesine gerek yoktur: tam geri yükleme yalnızca veritabanı dökümü ve .env dosyasından çalışır.

Bir yedekleme dizini oluşturun ve veritabanını dökün:

mkdir -p /opt/n8n-backup cd /opt/n8n docker compose exec -T postgres pg_dump -U n8n -d n8n -Fc > /opt/n8n-backup/n8n-db.dump cp .env compose.yaml Caddyfile /opt/n8n-backup/

Döküm, n8n çalışırken yapılır, bu nedenle herhangi bir kesinti süresi gerekmez.

Aynı sunucuda kalan bir yedekleme, sunucunun diski arızalanırsa yardımcı olmaz. /opt/n8n-backup dosyasını düzenli aralıklarla harici depolamaya kopyalayın. Bunun için INTROSERV Cloud Storage'ı sunucuya bağlama kılavuzunda açıklandığı gibi INTROSERV Cloud Storage'ı kullanabilirsiniz.

Yedekten Geri Yükleme

n8n'i yeni bir sunucuda geri yüklemek için, yukarıda açıklandığı gibi Docker'ı yükleyin ve yedekleme dizinini o sunucudaki /opt/n8n-backup konumuna kopyalayın. Ardından yapılandırma dosyalarını yerine yerleştirin:

mkdir -p /opt/n8n cp /opt/n8n-backup/.env /opt/n8n-backup/compose.yaml /opt/n8n-backup/Caddyfile /opt/n8n/ chmod 600 /opt/n8n/.env

Yeni sunucunun farklı bir IP adresi varsa, önce alan adının A kaydını güncelleyin.

Yalnızca veritabanını başlatın:

cd /opt/n8n docker compose up -d postgres

docker compose ps PostgreSQL'i sağlıklı (healthy) olarak gösterene kadar bekleyin, ardından dökümü geri yükleyin:

docker compose exec -T postgres pg_restore -U n8n -d n8n --clean --if-exists < /opt/n8n-backup/n8n-db.dump

Yığının geri kalanını başlatın:

docker compose up -d

Aynı sahip hesabıyla giriş yapın ve iş akışlarınızın ve kimlik bilgilerinizin yerinde olduğunu kontrol edin. Kaydedilen kimlik bilgileri, geri yüklenen .env dosyasındaki N8N_ENCRYPTION_KEY ile şifresi çözülür, bu nedenle yeniden girilmeden çalışırlar.

n8n'i Güncelleme

n8n sık sık güncellemeler yayınlar. En son sürüme güncellemek için yeni görüntüleri çekin ve konteynerleri yeniden oluşturun:

cd /opt/n8n docker compose pull docker compose up -d docker image prune -f

Son komut, artık kullanılmayan eski görüntüleri kaldırır.

Yeni sürümü kontrol edin:

docker compose exec n8n n8n --version

Tip

Her güncellemeden önce bir yedekleme yapın. Başlangıçta, yeni bir n8n sürümü veritabanı şemasını geçiş yapabilir, bu nedenle önceki sürüme dönmenin güvenilir yolu, güncellemeden önce oluşturulan bir dökümü geri yüklemektir.

PostgreSQL görüntüsü ana sürüm 17'ye sabitlenmiştir, bu nedenle docker compose pull yalnızca PostgreSQL'in küçük güncellemelerini yükler. Yeni bir ana sürüme geçmek bir döküm ve geri yükleme gerektirir ve otomatik olarak yapılmaz.

Sırada Ne Var

n8n örneğiniz çalışmaya hazır. Buradan şunları yapabilirsiniz:

  1. örneğe diğer kullanıcıları davet etmek;
  2. n8n'in davetiyeler ve parola sıfırlama e-postaları gönderebilmesi için SMTP'yi ayarlamak;
  3. hizmetlerinizi bağlamak ve ilk iş akışlarınızı oluşturmak.

Yerel dil modelleriyle AI iş akışları çalıştırmayı planlıyorsanız, Ollama ile n8n AI Starter Kit Kurulumu kılavuzuna bakın.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • kingdom
  • germany
  • Español
  • French
  • Hrvatska
  • Italiano
  • Poland
  • Slovenski
  • ukraine
  • Türkçe
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA