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.
.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.
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
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
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:
- örneğe diğer kullanıcıları davet etmek;
- n8n'in davetiyeler ve parola sıfırlama e-postaları gönderebilmesi için SMTP'yi ayarlamak;
- 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.