Bu rehberde gerçek Ubuntu 24.04.4 LTS VPS üzerinde n8n’i Docker ile kurduk, n8n_data volume ve sabit encryption key hazırladık, uygulamayı yalnız 127.0.0.1:5678 üzerinde çalıştırdık, n8n.ekasunucu.com için Nginx + Let’s Encrypt SSL kurduk ve owner hesabından workflow editörüne kadar tüm ilk kurulum akışını gerçek WebP ekran görüntüleriyle doğruladık.
Ubuntu 24.04.4 LTS
↓ Docker
n8n :5678 → 127.0.0.1
↓
n8n_data + Encryption Key
↓
Nginx + WebSocket
↓
Let’s Encrypt HTTPS
↓
n8n.ekasunucu.comBu rehber gerçek Ubuntu 24.04.4 LTS VPS üzerinde n8n’in Docker ile kurulmasını, uygulama portunun yalnız localhost üzerinde tutulmasını ve n8n.ekasunucu.com alan adının Nginx + Let’s Encrypt üzerinden HTTPS ile yayınlanmasını belgeler.
Final mimaride kullanıcı doğrudan 5678 portuna bağlanmaz. İnternet trafiği 443 üzerinden Nginx’e gelir, reverse proxy isteği 127.0.0.1:5678 üzerinde çalışan n8n containerına iletir. Uygulama verileri n8n_data named volume içinde kalıcı tutulur.
Internet :443
↓
Nginx + Let’s Encrypt
↓
127.0.0.1:5678
↓
n8n Docker container
↓
n8n_data volumeTest sunucusunda Ubuntu 24.04.4 LTS ve Docker Engine aktifti. n8n kurulmadan önce işletim sistemi, kernel, RAM, disk ve Docker durumunu kontrol etmek daha sonraki hatalarda altyapı ile uygulama problemlerini birbirinden ayırmayı kolaylaştırır.
n8n.ekasunucu.com alan adının sunucu IP’sine çözüldüğünü hem Cloudflare hem Google DNS üzerinden kontrol ettik. Let’s Encrypt aşamasına geçmeden önce DNS’in doğru hedefe gitmesi gerekir.
cat /etc/os-release | grep -E 'PRETTY_NAME|VERSION_ID|VERSION_CODENAME'
uname -r
free -h
df -h /docker --version
docker compose version
systemctl is-active dockerdig +short A n8n.ekasunucu.com @1.1.1.1
dig +short A n8n.ekasunucu.com @8.8.8.8n8n verilerini container dosya sistemine bırakmak yerine n8n_data named volume kullandık. Böylece container yeniden oluşturulduğunda kullanıcılar, workflowlar ve credential verileri kalıcı depolama alanında tutulabilir.
Credential şifrelemesi için sabit bir N8N_ENCRYPTION_KEY oluşturun ve güvenli biçimde yedekleyin. Reverse proxy arkasında host, protocol, editor base URL, webhook URL, proxy hop ve timezone ayarlarının açıkça tanımlanması üretim davranışını daha öngörülebilir hale getirir.
docker volume inspect n8n_data >/dev/null 2>&1 || docker volume create n8n_dataopenssl rand -hex 32cat > /root/n8n.env <<'EOF'
N8N_ENCRYPTION_KEY=BURAYA_UZUN_RASTGELE_ANAHTAR
N8N_HOST=n8n.ekasunucu.com
N8N_PORT=5678
N8N_PROTOCOL=https
N8N_EDITOR_BASE_URL=https://n8n.ekasunucu.com
N8N_WEBHOOK_URL=https://n8n.ekasunucu.com/
N8N_PROXY_HOPS=1
N8N_SECURE_COOKIE=true
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
GENERIC_TIMEZONE=Europe/Istanbul
TZ=Europe/Istanbul
NODE_ENV=production
EOF
chmod 600 /root/n8n.envResmî n8n image’ını docker.n8n.io üzerinden çektik. Containerı restart policy ile başlattık ve host 5678 portunu 0.0.0.0 yerine yalnız 127.0.0.1’e bind ettik.
n8n_data volume /home/node/.n8n yoluna bağlandı. Bu yapı public erişimi Docker portundan değil Nginx üzerinden vermemizi sağlar.
docker pull docker.n8n.io/n8nio/n8n:latestdocker rm -f n8n 2>/dev/null || true
docker run -d \
--name n8n \
--restart=always \
--env-file /root/n8n.env \
-p 127.0.0.1:5678:5678 \
-v n8n_data:/home/node/.n8n \
docker.n8n.io/n8nio/n8n:latestContainer ayağa kalktıktan sonra /healthz endpointi gerçek testte HTTP 200 ve {"status":"ok"} döndürdü. Test sırasında çalışan n8n sürümü 2.33.7 idi.
İlk başlangıçta veritabanı migrationlarının çalışması normaldir. Loglarda ayrıca Python 3 olmadığı için internal Python task runner’ın başlatılamadığı uyarısını gördük; log n8n’in production için external task runner modunu öneriyordu. JS Task Runner ise kayıt edildi ve temel n8n editörü çalışmaya devam etti.
Aynı loglar gelecekte varsayılanı değişecek bazı ayarlar için deprecation uyarıları verdi. Güncelleme sonrasında docker logs çıktısını okumak bu nedenle önemlidir.
curl -sS -i http://127.0.0.1:5678/healthzdocker exec n8n n8n --versiondocker logs --tail 160 n8nn8n yalnız 127.0.0.1:5678 üzerinde çalıştığı için alan adı katmanında Nginx reverse proxy kullandık. Host ve X-Forwarded başlıklarının yanında WebSocket upgrade başlıklarını da proxy’ye ilettik.
Nginx yapılandırma testi başarılı olduktan sonra Certbot ile n8n.ekasunucu.com sertifikası alındı ve vhost’a otomatik deploy edildi. Final origin HTTPS ve public domain testleri HTTP 200 verdi.
cat > /etc/nginx/conf.d/eka-websocket-map.conf <<'EOF'
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
EOFcat > /etc/nginx/sites-available/n8n.ekasunucu.com <<'EOF'
server {
listen 80;
listen [::]:80;
server_name n8n.ekasunucu.com;
client_max_body_size 100m;
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-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_buffering off;
proxy_read_timeout 3600;
proxy_send_timeout 3600;
}
}
EOF
ln -sfn /etc/nginx/sites-available/n8n.ekasunucu.com /etc/nginx/sites-enabled/n8n.ekasunucu.com
nginx -t && systemctl reload nginxcertbot --nginx -d n8n.ekasunucu.comcurl -I https://n8n.ekasunucu.comFinal yapıda n8n 127.0.0.1:5678 üzerinde dinlerken dış dünyaya yalnız Nginx 80/443 portları açıktı. Böylece n8n editörü Docker’ın doğrudan public port publish’i üzerinden yayınlanmadı.
certbot renew --dry-run ile gerçek sertifikayı değiştirmeden yenileme mekanizmasını test ettik. systemctl --failed çıktısında da başarısız servis bulunmadığını doğruladık.
ss -lntp | grep -E ':5678|:80|:443'docker ps --filter name='^/n8n$'certbot renew --dry-runsystemctl --failedHTTPS alan adını açtığımızda self-hosted n8n ilk olarak owner hesabı oluşturma ekranını gösterdi. Üretimde benzersiz ve güçlü bir parola kullanın.
Owner hesabından sonra n8n bazı kullanım ve kişiselleştirme soruları gösterebilir. Bunları tamamladıktan sonra instance ana arayüzüne geçilir.
Kurulum tamamlandıktan sonra n8n yeni otomasyon oluşturma ekranına geçer. Boş workflow açılması; kullanıcı oturumunun, frontend’in ve backend API bağlantısının temel seviyede düzgün çalıştığını gösterir.
Bu aşamada workflow’a trigger, HTTP Request, veritabanı, mail, Telegram veya yapay zeka node’ları ekleyebilirsiniz. Bu makalenin amacı önce sağlam self-hosted n8n temelini kurmaktır.
Self-hosted Community Edition temel olarak çalışır durumdayken arayüzde Registered Community Edition için ücretsiz aktivasyon seçeneği gösterildi. Gerçek testte aktivasyon anahtarı e-posta ile geldi ve panelde girildikten sonra kayıt başarıyla tamamlandı.
Bu aktivasyonun sunduğu özellikler zamanla değişebilir. Kurulumun temel Docker, Nginx ve SSL çalışması bu isteğe bağlı adıma bağlı değildir.




Aktivasyon sonrasında Workflows ana ekranı ve workflow editörü normal şekilde açıldı. Bu noktada n8n instance’ı domain + HTTPS üzerinden kullanılabilir, veriler named volume’da kalıcı ve uygulama portu localhost ile sınırlandırılmış durumdadır.
Bundan sonraki adım ihtiyaca göre webhook otomasyonları, API entegrasyonları, e-posta süreçleri veya Ollama gibi yerel AI servislerini n8n’e bağlamaktır.
n8n güncellemeden önce n8n_data volume yedeği veya VPS snapshotı alın. Image güncellemesi yaparken containerı aynı environment dosyası ve aynı volume ile yeniden oluşturduğunuzdan emin olun.
Güncelleme sonrasında /healthz, docker logs, domain HTTPS ve webhook davranışını tekrar test edin. n8n ayrıca yaygın güvenlik sorunlarını kontrol etmek için security audit komutu sunar.
docker exec n8n n8n auditdocker logs --tail 200 n8ncurl -sS http://127.0.0.1:5678/healthzcertbot renew --dry-runEvet. Bu gerçek testte n8n 2.33.7 Ubuntu 24.04.4 LTS üzerinde resmî Docker image ile çalıştı.
Varsayılan uygulama portu 5678’dir. Bu rehberde host tarafında yalnız 127.0.0.1:5678’e bind edildi.
Hayır. Bu mimaride n8n localhost’ta kalır ve public erişim Nginx HTTPS üzerinden verilir.
Container yeniden oluşturulduğunda n8n uygulama verilerinin kalıcı tutulmasına yardımcı olur.
Credential verilerinin şifrelenmesinde kullanılır. Anahtarın kaybolması veya değiştirilmesi mevcut credential erişimini bozabilir.
Bu yeni örnekte N8N_WEBHOOK_URL=https://n8n.ekasunucu.com/ kullanıldı. Test logumuz eski WEBHOOK_URL adını deprecated olarak işaretledi.
Evet, reverse proxy yapılandırmasında Upgrade ve Connection başlıklarını iletmek uzun bağlantı ve gerçek zamanlı arayüz davranışları için önemlidir.
Nginx vhost hazırlandıktan sonra Certbot --nginx ile Let’s Encrypt sertifikası alındı.
certbot renew --dry-run komutu ile canlı sertifikayı değiştirmeden yenileme akışı simüle edilebilir.
Evet. Self-hosted Community Edition çalışır. Testte ayrıca isteğe bağlı ücretsiz Registered Community Edition aktivasyonu tamamlandı.
Test logunda internal Python runner Python 3 olmadığı için başlamadı ve n8n production için external mode önerdi. Standart editör ve JS tabanlı workflowlar çalışmaya devam etti.
Evet. Yeni veya güncellenmiş instance ilk başlangıçta veritabanı migrationları çalıştırabilir.
n8n_data yedeği veya VPS snapshotı alın, environment dosyasını ve encryption key’i güvenli tutun.
n8n audit komutu ile credential, database, filesystem, node ve instance riskleri için security audit çalıştırılabilir.
Webhook, API, yapay zeka ve iş akışı otomasyonlarını kendi sunucunuzda çalıştırmak için EKA Sunucu Linux VPS paketlerini inceleyebilirsiniz.
Güncellendi: 10.08.2026