n8n, Docker Compose, PostgreSQL ve HTTPS ile nasıl kurulur
n8n'i Docker Compose, PostgreSQL ve resmi task runner ile Caddy HTTPS arkasında kendi sunucunuza kurun; queue mode, yedekleme ve güvenli güncellemeyi ekleyin.
- Orta
- 40 dk okuma
- Güncellendi
Denendiği sistemler: Ubuntu 24.04 LTS, Ubuntu 26.04 LTS, Debian 12, Debian 13
Bu sayfada
- Ön koşullar
- Adım 1 — Proje klasörünü ve gizli değerleri oluşturun
- Adım 2 — Veritabanı başlangıç betiğini ekleyin
- Adım 3 — Compose dosyasını yazın
- Adım 4 — n8n'i başlatın
- Adım 5 — n8n'i Caddy ile HTTPS üzerinden yayınlayın
- Adım 6 — Sahip hesabını oluşturun
- Adım 7 — Queue mode ile ölçekleyin (isteğe bağlı)
- Yedekleme ve geri yükleme
- n8n güncelleme
- Sorun giderme
- Webhook adresleri http://localhost:5678 gösteriyor
- /home/node/.n8n üzerinde EACCES: permission denied
- Mismatching encryption keys
- Code düğümü çalıştırmaları başarısız oluyor veya zaman aşımına uğruyor
- FATAL: database files are incompatible with server
- Sonraki adımlar
n8n bir iş akışı otomasyon platformudur. Uygulamaları, API'leri ve yapay zeka modellerini görsel bir tuval üzerinde birbirine bağlar, webhook'lara ve zamanlamalara tepki verir, bir düğüm tam istediğinizi yapmadığında JavaScript veya Python koduna geçersiniz. n8n'i kendi sunucunuzda çalıştırmak iş akışlarını, kimlik bilgilerini ve çalıştırma verilerini sizin kontrolünüzde tutar.
Bu rehber n8n'i, n8n'in resmi n8n-hosting deposundaki örnekleri izleyerek Docker Compose ile kurar: PostgreSQL ile çalışan n8n ve Code düğümü betiklerini ana sürecin dışında çalıştıran resmi task runner konteyneri. n8n yalnızca 127.0.0.1 üzerinde dinler, Caddy ise onu alan adınızda HTTPS ile yayınlar. Ardından sahip (owner) hesabını oluşturur, Redis ve worker konteynerleriyle queue mode'a ne zaman ve nasıl geçeceğinizi öğrenir, yedekleme, geri yükleme ve güncellemeyi ayarlarsınız.
Ön koşullar
- Docker Engine ve Compose eklentisi kurulu, Ubuntu 24.04 LTS, Ubuntu 26.04 LTS, Debian 12 veya Debian 13 çalıştıran bir sunucu. Önce Ubuntu'ya Docker kurulumu veya Debian'a Docker kurulumu rehberini izleyin.
- Yeni bir Linux sunucusunu güvenli hale getirin ve SSH anahtarlarını ayarlayın rehberlerindeki gibi hazırlanmış,
sudoyetkili ve SSH anahtarıyla giriş yapan root olmayan bir kullanıcı. - Sunucuyu gösteren bir A kaydına (IPv6 kullanıyorsanız AAAA kaydına da) sahip
n8n.example.comgibi bir alt alan adı. - Caddy reverse proxy rehberinde anlatıldığı gibi sunucuya kurulmuş Caddy. Nginx veya Traefik de olur; n8n tarafındaki ayarlar aynıdır.
n8n, PostgreSQL'li bir Docker Compose kurulumu için en düşük donanım değeri yayınlamaz. Yapay zeka sandbox servislerini de içeren yeni hepsi bir arada Compose yapısı için en az 2 vCPU ve 4 GB RAM ister; bu rehberdeki yapı daha hafiftir. Bellek kullanımı paralel çalıştırma sayısı ve iş akışlarının taşıdığı veri miktarıyla birlikte artar; bu nedenle aşağıdaki değerleri temkinli bir başlangıç noktası olarak görün.
| Kaynak | En düşük (resmi) | Önerilen başlangıç |
|---|---|---|
| CPU | Yayınlanmamış | 2 vCPU |
| RAM | Yayınlanmamış | 2 GB, queue mode ile 4 GB |
| Disk | Yayınlanmamış | 20 GB SSD, uzun çalıştırma geçmişi tutacaksanız daha fazlası |
Adım 1 — Proje klasörünü ve gizli değerleri oluşturun
n8n ile ilgili her şeyi yönetici kullanıcınıza ait /opt/n8n klasöründe tutun:
sudo mkdir -p /opt/n8n
sudo chown $USER:$USER /opt/n8n
cd /opt/n8n.env dosyasını oluşturun. Docker Compose bu dosyayı kendiliğinden okur; openssl çağrıları da dosya yazılırken uzun, rastgele gizli değerleri doldurur:
cat > .env <<EOF
N8N_VERSION=2.42.5
N8N_DOMAIN=n8n.example.com
GENERIC_TIMEZONE=Europe/Istanbul
POSTGRES_USER=postgres
POSTGRES_PASSWORD=$(openssl rand -hex 24)
POSTGRES_DB=n8n
POSTGRES_NON_ROOT_USER=n8n
POSTGRES_NON_ROOT_PASSWORD=$(openssl rand -hex 24)
N8N_ENCRYPTION_KEY=$(openssl rand -hex 32)
RUNNERS_AUTH_TOKEN=$(openssl rand -hex 32)
EOF
chmod 600 .envDeğerlerin görevleri:
N8N_VERSION, n8n ve task runner imajlarını tek bir sürüme sabitler.2.42.5, 2026-10-09 tarihindeki güncel kararlı sürümdü; n8n'in Docker sayfasında veya sürüm notlarında güncel kararlı sürümü kontrol edip onu kullanın. Sürümü sabitlemek, güncellemelerin yalnızca bu satırı değiştirdiğinizde yapılması demektir.N8N_DOMAINgenel host adıdır;GENERIC_TIMEZONEise Schedule tetikleyicilerinin kullandığı saat dilimidir. Kendi IANA saat dilimi adınızı, örneğinEurope/BerlinveyaAmerica/New_Yorkdeğerini kullanın.POSTGRES_*değerleri veritabanını oluşturur. n8n, resmi örnekte olduğu gibi süper kullanıcı olmayan ayrın8nhesabıyla bağlanır.N8N_ENCRYPTION_KEY, n8n'in sakladığı her kimlik bilgisini şifreler.RUNNERS_AUTH_TOKEN, n8n ile task runner arasındaki ortak gizli değerdir.
Adım 2 — Veritabanı başlangıç betiğini ekleyin
Resmi örnek, PostgreSQL'in /docker-entrypoint-initdb.d klasörüne küçük bir betik bağlar. Betik, veritabanı volume'u boşken yalnızca bir kez çalışır ve yetkileri n8n veritabanıyla sınırlı n8n kullanıcısını oluşturur:
cat > /opt/n8n/init-data.sh <<'EOF'
#!/bin/bash
set -e
if [ -n "${POSTGRES_NON_ROOT_USER:-}" ] && [ -n "${POSTGRES_NON_ROOT_PASSWORD:-}" ]; then
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<EOSQL
CREATE USER ${POSTGRES_NON_ROOT_USER} WITH PASSWORD '${POSTGRES_NON_ROOT_PASSWORD}';
GRANT ALL PRIVILEGES ON DATABASE ${POSTGRES_DB} TO ${POSTGRES_NON_ROOT_USER};
GRANT CREATE ON SCHEMA public TO ${POSTGRES_NON_ROOT_USER};
EOSQL
else
echo "SETUP INFO: No Environment variables given!"
fi
EOF
chmod +x /opt/n8n/init-data.shTırnak içindeki 'EOF', kabuğunuzun değişkenleri genişletmesini engeller; değerleri PostgreSQL konteyneri ilk açılışta kendi ortam değişkenlerinden doldurur.
Adım 3 — Compose dosyasını yazın
/opt/n8n/compose.yaml dosyasını oluşturun. Bu dosya, n8n'in resmi withPostgres örneğinin üç değişiklik yapılmış halidir: port yalnızca 127.0.0.1 üzerinde yayınlanır, reverse proxy için genel adres ayarları eklenir ve şifreleme anahtarı .env dosyasından gelir:
services:
postgres:
image: postgres:18
restart: always
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
- POSTGRES_DB
- POSTGRES_NON_ROOT_USER
- POSTGRES_NON_ROOT_PASSWORD
- PGDATA=/var/lib/postgresql/data
volumes:
- db_storage:/var/lib/postgresql/data
- ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh
healthcheck:
test: ['CMD-SHELL', 'pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}']
interval: 5s
timeout: 5s
retries: 10
n8n:
image: docker.n8n.io/n8nio/n8n:${N8N_VERSION}
restart: always
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_NON_ROOT_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD}
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- N8N_HOST=${N8N_DOMAIN}
- N8N_PORT=5678
- N8N_PROTOCOL=https
- N8N_WEBHOOK_URL=https://${N8N_DOMAIN}/
- N8N_PROXY_HOPS=1
- NODE_ENV=production
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- TZ=${GENERIC_TIMEZONE}
- N8N_RUNNERS_MODE=external
- N8N_RUNNERS_AUTH_TOKEN=${RUNNERS_AUTH_TOKEN}
- N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0
ports:
- "127.0.0.1:5678:5678"
volumes:
- n8n_storage:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
n8n-runner:
image: n8nio/runners:${N8N_VERSION}
restart: always
environment:
- N8N_RUNNERS_AUTH_TOKEN=${RUNNERS_AUTH_TOKEN}
- N8N_RUNNERS_TASK_BROKER_URI=http://n8n:5679
depends_on:
- n8n
volumes:
db_storage:
n8n_storage:Bazı ayarlar açıklamayı hak ediyor:
postgres:18imajı varsayılan veri klasörünü değiştirdiği içinPGDATAsabitlenmiştir. n8n'in örneği eski yolu korur; böylece volume bağlantısı ana sürümler arasında değişmez. Bu satırı silmeyin.n8n_storagevolume'u/home/node/.n8nklasörünü tutar. PostgreSQL kullansa bile n8n ayar dosyasını ve şifreleme anahtarını burada saklar; bu nedenle volume kalıcı olmalıdır.N8N_WEBHOOK_URLveN8N_PROXY_HOPS=1, n8n'e tek bir reverse proxy arkasında olduğunu ve webhook'lar için hangi genel adresi göstereceğini söyler.N8N_WEBHOOK_URL, n8n 2.35.0 ile eskiWEBHOOK_URLadının yerini aldı; eski ad hâlâ çalışır ama kullanımdan kalkma uyarısı yazar.N8N_RUNNERS_MODE=external, Code düğümü betiklerini n8n'in alt süreci yerine ayrın8nio/runnerskonteynerinde çalıştırır. n8n belgeleri üretim için harici task runner önerir ve runner imajının sürümü her zaman n8n sürümüyle aynı olmalıdır.
Adım 4 — n8n'i başlatın
İmajları çekin ve yapıyı arka planda başlatın:
cd /opt/n8n
docker compose pull
docker compose up -d
docker compose psÜç servisin de running göstermesi, postgres servisinin de healthy olması gerekir. n8n logunu, editörün erişilebilir olduğunu bildirene kadar izleyin, ardından Ctrl+C tuşlarına basın:
docker compose logs -f n8nSağlık uç noktasını sunucunun kendisinden kontrol edin:
curl -s http://127.0.0.1:5678/healthz{"status":"ok"} çıktısını görmelisiniz. Runner bağlanamıyorsa docker compose logs n8n-runner nedenini gösterir; genellikle token veya sürüm uyuşmazlığıdır.
Adım 5 — n8n'i Caddy ile HTTPS üzerinden yayınlayın
/etc/caddy/Caddyfile dosyasına alt alan adınız için bir site bloğu ekleyin. flush_interval -1 satırı n8n'in kendi Caddy örneğinden gelir ve akış halindeki yanıtları tarayıcıya hemen iletir:
n8n.example.com {
reverse_proxy 127.0.0.1:5678 {
flush_interval -1
}
}Caddy'yi yeniden yükleyin ve güvenlik duvarının yalnızca SSH ve web trafiğine izin verdiğinden emin olun. n8n'e yalnızca Caddy üzerinden erişildiği için 5678 numaralı port açılmamalıdır:
sudo systemctl reload caddy
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
curl -I https://n8n.example.comSon komut geçerli bir sertifikayla HTTP/2 200 döndürmelidir. Caddy sertifikayı kendiliğinden alır ve yeniler; n8n'in beklediği X-Forwarded-For, X-Forwarded-Host ve X-Forwarded-Proto başlıklarını da iletir. Caddy yerine Nginx veya Traefik için Nginx ve Certbot ile Traefik rehberlerine bakın.
Adım 6 — Sahip hesabını oluşturun
https://n8n.example.com adresini hemen açın. n8n ilk açılışta sahip hesabı için bir kayıt formu gösterir ve formu ilk dolduran kişi kurulumun sahibi olur. En az sekiz karakterli, bir rakam ve bir büyük harf içeren, tercihen bir parola yöneticisiyle üretilmiş bir parola kullanın.
SMTP sunucusu olmadan n8n davet ve parola sıfırlama bağlantılarını e-postayla gönderemez; davet bağlantılarını elle kopyalarsınız.
E-postayı açmak için bu satırları n8n servisinin environment listesine ekleyin, N8N_SMTP_PASS değerini .env dosyasına yazın ve konteyneri yeniden oluşturmak için docker compose up -d çalıştırın. N8N_SMTP_SSL varsayılan olarak true olduğundan 587 numaralı port için bunu false yapın ve N8N_SMTP_STARTTLS ayarını açık tutun:
- N8N_EMAIL_MODE=smtp
- N8N_SMTP_HOST=smtp.example.com
- N8N_SMTP_PORT=587
- N8N_SMTP_SSL=false
- N8N_SMTP_STARTTLS=true
- [email protected]
- N8N_SMTP_PASS=${N8N_SMTP_PASS}
- [email protected]Adım 7 — Queue mode ile ölçekleyin (isteğe bağlı)
Varsayılan modda tek bir n8n süreci webhook'ları alır, editörü çalıştırır ve tüm iş akışlarını yürütür. Queue mode'da ana örnek yalnızca tetikleyicileri ve webhook'ları kabul eder, her çalıştırmayı veritabanına yazar ve kimliğini bir Redis kuyruğuna koyar. Ayrı worker süreçleri bu kimlikleri alır, iş akışlarını çalıştırır ve sonuçları geri yazar.
Çalıştırmalar birikiyorsa, ağır iş akışları editörü veya webhook'ları yavaşlatıyorsa ya da daha fazla worker çalıştırarak kapasite eklemek istiyorsanız queue mode'a ihtiyacınız vardır. n8n belgelerine göre gereksinimler şunlardır:
- PostgreSQL (dağıtık kurulumlarda SQLite ile queue mode desteklenmez) ve ana sürecin ve tüm worker'ların erişebildiği bir Redis.
- Ana örnekte ve her worker'da aynı
N8N_ENCRYPTION_KEY; aksi halde worker'lar kimlik bilgilerini çözemez. - Tüm süreçlerde aynı n8n sürümü.
- Queue mode, ikili (binary) veriler için dosya sistemi depolamasını desteklemez; büyük dosyalarla çalışan iş akışlarından önce n8n'in binary data ayarlarını kontrol edin.
Önce yedek alın (sonraki bölüme bakın), ardından compose.yaml dosyasını bu sürümle değiştirin. Dosya n8n'in resmi withPostgresAndWorker örneğini izler: bir YAML anchor'ı ayarları ana örnek ile worker arasında paylaştırır ve her birine ayrı bir task runner verilir:
x-n8n: &n8n-common
image: docker.n8n.io/n8nio/n8n:${N8N_VERSION}
restart: always
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_NON_ROOT_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_NON_ROOT_PASSWORD}
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
- QUEUE_HEALTH_CHECK_ACTIVE=true
- OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS=true
- N8N_HOST=${N8N_DOMAIN}
- N8N_PORT=5678
- N8N_PROTOCOL=https
- N8N_WEBHOOK_URL=https://${N8N_DOMAIN}/
- N8N_PROXY_HOPS=1
- NODE_ENV=production
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- TZ=${GENERIC_TIMEZONE}
- N8N_RUNNERS_MODE=external
- N8N_RUNNERS_AUTH_TOKEN=${RUNNERS_AUTH_TOKEN}
- N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0
volumes:
- n8n_storage:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
services:
postgres:
image: postgres:18
restart: always
environment:
- POSTGRES_USER
- POSTGRES_PASSWORD
- POSTGRES_DB
- POSTGRES_NON_ROOT_USER
- POSTGRES_NON_ROOT_PASSWORD
- PGDATA=/var/lib/postgresql/data
volumes:
- db_storage:/var/lib/postgresql/data
- ./init-data.sh:/docker-entrypoint-initdb.d/init-data.sh
healthcheck:
test: ['CMD-SHELL', 'pg_isready -h localhost -U ${POSTGRES_USER} -d ${POSTGRES_DB}']
interval: 5s
timeout: 5s
retries: 10
redis:
image: redis:7-alpine
restart: always
volumes:
- redis_storage:/data
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
interval: 5s
timeout: 5s
retries: 10
n8n:
<<: *n8n-common
ports:
- "127.0.0.1:5678:5678"
n8n-runner:
image: n8nio/runners:${N8N_VERSION}
restart: always
environment:
- N8N_RUNNERS_AUTH_TOKEN=${RUNNERS_AUTH_TOKEN}
- N8N_RUNNERS_TASK_BROKER_URI=http://n8n:5679
depends_on:
- n8n
n8n-worker:
<<: *n8n-common
command: worker --concurrency=5
depends_on:
- n8n
n8n-worker-runner:
image: n8nio/runners:${N8N_VERSION}
restart: always
environment:
- N8N_RUNNERS_AUTH_TOKEN=${RUNNERS_AUTH_TOKEN}
- N8N_RUNNERS_TASK_BROKER_URI=http://n8n-worker:5679
depends_on:
- n8n-worker
volumes:
db_storage:
n8n_storage:
redis_storage:Değişikliği uygulayın ve worker'ın Redis'e ve veritabanına bağlandığını kontrol edin:
cd /opt/n8n
docker compose up -d --remove-orphans
docker compose ps
docker compose logs --tail=50 n8n-workerRedis'e yalnızca Compose'un iç ağından erişilir; sunucuda yayınlanmaz. Her worker varsayılan olarak aynı anda en fazla 10 iş çalıştırır; --concurrency=5 bu sayıyı düşürür. n8n 5'in altındaki değerleri önermez, çünkü düşük eşzamanlılıkla çalışan çok sayıda worker veritabanı bağlantı havuzunu tüketebilir. Kapasite eklemek için eşzamanlılığı artırın veya yeni servis adlarıyla bir worker ve runner çifti daha ekleyin. Çok yüksek webhook trafiği için n8n, queue mode belgelerinde anlatılan ve bir yük dengeleyicinin arkasında çalışan ayrı webhook süreçleri (n8n webhook) de sunar.
Yedekleme ve geri yükleme
n8n'in durumu üç yerde tutulur: PostgreSQL veritabanı (iş akışları, kimlik bilgileri, çalıştırma geçmişi), n8n_storage volume'u (ayar dosyası, şifreleme anahtarı, topluluk düğümleri) ve /opt/n8n içindeki dosyalar (.env, compose.yaml, init-data.sh). Üçünü de yedekleyin:
sudo mkdir -p /opt/backups
sudo chown $USER:$USER /opt/backups
cd /opt/n8n
docker compose exec -T postgres sh -c 'pg_dump -U "$POSTGRES_USER" -Fc "$POSTGRES_DB"' > /opt/backups/n8n-db-$(date +%F).dump
docker run --rm -v n8n_n8n_storage:/data:ro -v /opt/backups:/backup alpine tar czf /backup/n8n-storage-$(date +%F).tar.gz -C /data .
tar czf /opt/backups/n8n-config-$(date +%F).tar.gz -C /opt/n8n .env compose.yaml init-data.sh
chmod 600 /opt/backups/n8n-*Compose volume'lara proje klasörünün adını verir; bu yüzden depolama volume'unun adı n8n_n8n_storage olur. Bunu docker volume ls ile doğrulayın. Ayrıca n8n'in CLI'ı iş akışlarını ve kimlik bilgilerini JSON dosyaları olarak dışa aktarabilir; bu, tek tek iş akışlarını kurulumlar arasında taşımak için kullanışlıdır. --backup, --all --pretty --separate seçeneklerinin kısaltmasıdır ve kimlik bilgileri anahtarınızla şifreli kalır:
docker compose exec -u node n8n n8n export:workflow --backup --output=/home/node/.n8n/backups/workflows/
docker compose exec -u node n8n n8n export:credentials --backup --output=/home/node/.n8n/backups/credentials/
docker compose cp n8n:/home/node/.n8n/backups /opt/backups/n8n-export-$(date +%F)Yeni bir sunucuya geri yüklemek için Docker'ı kurun, yapılandırma arşivini orijinal .env yerinde olacak şekilde /opt/n8n içine açın ve veritabanını n8n ilk kez başlamadan önce geri yükleyin:
cd /opt/n8n
docker compose up -d --wait postgres
docker compose exec -T postgres sh -c 'pg_restore -U "$POSTGRES_USER" -d "$POSTGRES_DB"' < /opt/backups/n8n-db-2026-10-09.dump
docker compose create n8n
docker run --rm -v n8n_n8n_storage:/data -v /opt/backups:/backup alpine tar xzf /backup/n8n-storage-2026-10-09.tar.gz -C /data
docker compose up -d--wait, PostgreSQL sağlıklı hale gelip başlangıç betiği geri yüklenen tabloların sahibi olan n8n kullanıcısını oluşturduğunda geri döner. Tarihleri kendi dosya adlarınızdakilerle değiştirin. /opt/backups klasörünü düzenli olarak başka bir makineye veya nesne depolamaya kopyalayın, örneğin rsync ya da restic ile; yalnızca aynı sunucuda duran bir yedek, o sunucunun kaybından kurtulamaz.
n8n güncelleme
n8n sık sürüm yayınlar ve birçok sürümü tek seferde atlamak zorunda kalmamanız için en az ayda bir güncelleme yapmanızı önerir. Her güncellemeden önce:
- Sürüm notlarını okuyun. Ana sürümlerden önce o sürümün uyumsuz değişiklikler (breaking changes) sayfasını da okuyun; örneğin n8n 2.0, Code düğümünde ortam değişkenlerine erişimi engelledi ve Execute Command düğümünü varsayılan olarak devre dışı bıraktı.
- Veritabanını, depolama volume'unu ve
.envdosyasını yukarıdaki gibi yedekleyin.
Ardından .env içindeki N8N_VERSION değerini yeni sürümle değiştirin ve konteynerleri yeniden oluşturun. n8n ve runner imajlarının ikisi de aynı değişkeni izler:
cd /opt/n8n
nano .env
docker compose pull
docker compose up -d
docker compose exec n8n n8n --versionVeritabanı geçişleri n8n başlarken kendiliğinden çalışır. Sıradan bir güncellemenin parçası olarak postgres:18 imajını yeni bir ana sürüme geçirmeyin: n8n'in barındırma deposunda açıklandığı gibi PostgreSQL ana sürüm yükseltmesi döküm alıp geri yüklemeyi gerektirir.
Sorun giderme
Webhook adresleri http://localhost:5678 gösteriyor
n8n genel adresini bilmiyor. N8N_WEBHOOK_URL değerinin sonunda eğik çizgiyle https://n8n.example.com/ olduğunu, N8N_PROXY_HOPS=1 ayarının bulunduğunu ve .env içindeki alan adının doğru olduğunu kontrol edin, ardından docker compose up -d çalıştırın. Düzeltmeden önce harici servislere kaydedilen webhook'ları yeniden kaydetmeniz gerekir; bu genellikle iş akışını kapatıp yeniden etkinleştirerek yapılır.
/home/node/.n8n üzerinde EACCES: permission denied
n8n konteyneri yetkisiz node kullanıcısıyla (UID 1000) çalışır. Bu hata, adlandırılmış volume'u root'a ait bir ana makine klasörüyle değiştirdiğinizde ortaya çıkar. Klasörü UID 1000'e verin, örneğin sudo chown -R 1000:1000 /opt/n8n/n8n-data, ya da bu rehberdeki adlandırılmış volume'u kullanmaya devam edin. n8n 2.x ayrıca ayar dosyasının 0600 izinlerine sahip olmasını bekler; daha geniş izinlerle kopyalanmış bir dosyayı docker compose exec n8n chmod 600 /home/node/.n8n/config düzeltir.
Mismatching encryption keys
N8N_ENCRYPTION_KEY içindeki anahtar, n8n_storage içindeki ayar dosyasında kayıtlı anahtardan farklıdır; bu genellikle yeni bir .env ile yapılan geri yüklemeden sonra olur. Orijinal anahtarı .env dosyasına geri koyun ve docker compose up -d çalıştırın. Orijinal anahtar kaybolduysa kayıtlı kimlik bilgileri kurtarılamaz ve yeniden oluşturulmaları gerekir.
Code düğümü çalıştırmaları başarısız oluyor veya zaman aşımına uğruyor
Task runner bağlı değil. docker compose logs n8n-runner çalıştırın: runner ve n8n imajları aynı sürümü kullanmalı, RUNNERS_AUTH_TOKEN iki serviste de aynı olmalı ve runner konteynerinin 5679 numaralı porta erişebilmesi için n8n servisinde N8N_RUNNERS_BROKER_LISTEN_ADDRESS=0.0.0.0 ayarı kalmalıdır.
FATAL: database files are incompatible with server
PostgreSQL imajı, veri klasörünü oluşturan sürümden daha yeni bir ana sürüme değiştirilmiş. Hiçbir şey silinmez: imajı önceki ana sürüme (örneğin postgres:16) geri alın, yeniden başlatın ve yeni sürüme geçmek istiyorsanız n8n'in barındırma deposundaki döküm alıp geri yükleme yöntemini izleyin.
Sonraki adımlar
- Compose dosya biçimini Docker Compose temelleri rehberiyle ayrıntılı öğrenin.
- Otomasyon ihtiyaçlarınız için n8n'i Node-RED ve Activepieces ile karşılaştırın.
- Otomasyon iş yüklerine göre boyutlandırılmış sunucuları n8n hosting sayfasında bulun.
- Ortam değişkenleri, ölçekleme ve güvenlik ayarları için n8n'in barındırma belgelerini okuyun.
Sık sorulan sorular
n8n için PostgreSQL gerekli mi, yoksa SQLite yeterli mi?
n8n varsayılan olarak SQLite kullanır; bu, testler ve küçük tek örnekli kurulumlar için uygundur. n8n'in kendi barındırma örnekleri üretim için PostgreSQL önerir ve queue mode PostgreSQL gerektirir. Baştan PostgreSQL ile başlamak sonradan taşıma yapma zorunluluğunu ortadan kaldırır.
n8n şifreleme anahtarını kaybedersem ne olur?
n8n kaydedilen her kimlik bilgisini N8N_ENCRYPTION_KEY ile şifreler. Farklı bir anahtarla geri yüklenen veritabanında iş akışları görünür, ancak kayıtlı kimlik bilgileri çözülemez ve yeniden girilmeleri gerekir. .env dosyasını her yedeğe dahil edin.
n8n queue mode'a ne zaman ihtiyacım olur?
Tek bir n8n süreci çalıştırmalara yetişemediğinde veya uzun süren iş akışları editörü ve webhook'ları yavaşlattığında queue mode'a geçin. Bu mod Redis ve ayrı worker konteynerleri ekler. Çoğu küçük ekip için tek örnek yeterlidir.
n8n webhook adreslerim neden localhost:5678 gösteriyor?
Genel adresi vermediğiniz sürece n8n webhook adreslerini kendi iç host ve port değerinden üretir. N8N_WEBHOOK_URL (eski sürümlerde WEBHOOK_URL) ve N8N_PROXY_HOPS=1 değerlerini ayarlayın, ardından konteyneri docker compose up -d ile yeniden oluşturun.
Bunu bir HyperDC sunucusunda çalıştırabilir miyim?
Evet. Adımlar, Ubuntu 24.04, Ubuntu 26.04, Debian 12 veya Debian 13 çalıştıran ve root erişiminiz olan bir HyperDC Linux VPS, VDS veya dedicated sunucuda çalışır. Sunucuyu paralel çalıştırmayı planladığınız iş akışı sayısına göre boyutlandırın.
Kaynaklar
- docs.n8n.io/hosting
- docs.n8n.io/hosting/installation/docker
- docs.n8n.io/hosting/installation/server-setups/docker-compose
- docs.n8n.io/deploy/host-n8n/install-options/install-using-docker-co…
- github.com/n8n-io/n8n-hosting
- raw.githubusercontent.com/n8n-io/n8n-hosting/main/docker-compose/wi…
- raw.githubusercontent.com/n8n-io/n8n-hosting/main/docker-compose/wi…
- github.com/n8n-io/n8n/blob/master/docker/images/n8n/README.md
- docs.n8n.io/hosting/configuration/task-runners
- docs.n8n.io/hosting/configuration/configuration-examples/encryption…
- docs.n8n.io/hosting/configuration/configuration-examples/webhook-url
- docs.n8n.io/hosting/configuration/environment-variables/deployment