n8n Kurulumu: VPS'e Docker ile n8n Kurma
Kendi n8n otomasyon sunucunuzu kurmak için adım adım rehber: Docker Engine kurulumu, docker compose dosyası, Nginx ters vekil, ücretsiz SSL, güncelleme ve yedekleme.
n8n, uygulamaları birbirine bağlayıp iş akışlarını otomatikleştirmenizi sağlayan açık kaynaklı bir araçtır. Bir formdan gelen veriyi tabloya yazmak, e-postaları sınıflandırmak, bir yapay zekâ modeline soru gönderip cevabı Telegram'a iletmek gibi işleri sürükle-bırak düğümlerle kurarsınız. Bulut sürümü yerine kendi sunucunuzda çalıştırdığınızda verileriniz sizde kalır ve iş akışı sayısı gibi sınırlarla uğraşmazsınız.
Bu rehberde Ubuntu 24.04 çalışan bir VPS üzerine n8n'i Docker ile kuracağız. Kuracağımız yapı şöyle:
- Docker Engine, Docker'ın resmî paket deposundan kurulur.
- n8n, bir docker compose dosyasıyla çalışır ve yalnızca sunucunun içinden erişilebilen
127.0.0.1:5678adresini dinler. - Nginx, dışarıdan gelen istekleri karşılar ve n8n'e iletir.
- Certbot, ücretsiz Let's Encrypt sertifikasıyla HTTPS'i etkinleştirir.
1. Sunucuyu hazırlayın
SSH ile bağlanın ve paketleri güncelleyin:
sudo apt update && sudo apt upgrade -y
Yeni bir sunucuysa önce Linux sunucu güvenliği rehberimizdeki temel adımları (SSH anahtarı, root girişini kapatma, güvenlik duvarı) uygulamanızı öneririz. Ayrıca n8n'e vereceğiniz alt alan adı için DNS panelinizde bir A kaydı oluşturun; örneğin n8n.ornek.com → VPS'in IP adresi. Kaydın yayılması birkaç dakika sürebilir.
2. Docker Engine'i kurun
Ubuntu depolarındaki docker.io paketi de çalışır, ancak güncel sürüm ve docker compose eklentisi için Docker'ın kendi deposunu kullanmak daha iyidir:
sudo apt install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
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" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Kurulumu kontrol edin:
sudo docker run --rm hello-world
docker compose version
hello-world kapsayıcısı bir karşılama mesajı yazdırıp kapanıyorsa Docker hazırdır.
Komutları
sudoolmadan çalıştırmak için kullanıcınızıdockergrubuna ekleyebilirsiniz (sudo usermod -aG docker $USER). Ancak bu grup pratikte root yetkisi demektir; bu rehberdesudoile devam ediyoruz.
3. docker compose dosyasını yazın
n8n için bir klasör oluşturun ve içine compose dosyasını yazın:
sudo mkdir -p /opt/n8n
cd /opt/n8n
sudo nano compose.yaml
İçeriği (alan adını kendinizinkiyle değiştirin):
services:
n8n:
image: docker.n8n.io/n8nio/n8n
container_name: n8n
restart: unless-stopped
ports:
- "127.0.0.1:5678:5678"
environment:
- N8N_HOST=n8n.ornek.com
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n.ornek.com/
- N8N_PROXY_HOPS=1
- GENERIC_TIMEZONE=Europe/Istanbul
- TZ=Europe/Istanbul
volumes:
- n8n_data:/home/node/.n8n
volumes:
n8n_data:
Ayarların anlamı:
127.0.0.1:5678:5678: n8n yalnızca sunucunun kendi içinden erişilebilir. Bu önemlidir, çünkü Docker'ın yayınladığı portlar UFW kurallarını atlayabilir;5678:5678yazsaydınız n8n güvenlik duvarına rağmen internete açılabilirdi.N8N_HOSTveN8N_PROTOCOL: n8n'in kendi adresini doğru oluşturması için gerekir.WEBHOOK_URL: Webhook ve form düğümlerinin dışarıya gösterdiği adres. Ters vekil arkasında bunu ayarlamazsanız webhook adreslerihttp://localhost:5678gibi işe yaramaz bir değerle görünür.N8N_PROXY_HOPS=1: n8n'e önünde bir ters vekil olduğunu söyler; böylece ziyaretçi IP'siX-Forwarded-Forbaşlığından okunur.GENERIC_TIMEZONE: Zamanlanmış (Schedule) düğümlerin hangi saat dilimine göre çalışacağını belirler. Ayarlamazsanız iş akışlarınız Türkiye saatine göre değil, varsayılan saat dilimine göre tetiklenir.n8n_databirimi: İş akışları, kimlik bilgileri, SQLite veritabanı ve şifreleme anahtarı/home/node/.n8niçinde tutulur. Bu birim kaybolursa her şey kaybolur.
N8N_SECURE_COOKIE hakkında
n8n, oturum çerezini varsayılan olarak yalnızca HTTPS üzerinden gönderir. Bu yüzden n8n'e http://IP:5678 gibi şifresiz bir adresten girmeye çalışırsanız "secure cookie" uyarısı alır ve giriş yapamazsınız. Bazı rehberler N8N_SECURE_COOKIE=false eklemeyi önerir; bu, şifrenizin ve oturumunuzun ağda açık metin olarak gitmesine izin verir. Doğru çözüm, aşağıdaki adımlarla HTTPS kurmaktır. Bu değişkeni yalnızca kısa bir yerel deneme için, sonra geri almak üzere kullanın.
n8n'i başlatın:
sudo docker compose up -d
sudo docker compose logs -f
Günlüklerde n8n'in hazır olduğunu belirten satırı gördüğünüzde Ctrl+C ile günlük izlemeden çıkabilirsiniz; kapsayıcı çalışmaya devam eder. curl -I http://127.0.0.1:5678 komutu bir HTTP yanıtı döndürmelidir.
4. Nginx ile ters vekil kurun
sudo apt install -y nginx
sudo nano /etc/nginx/sites-available/n8n
server {
listen 80;
server_name n8n.ornek.com;
client_max_body_size 50M;
location / {
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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_buffering off;
proxy_read_timeout 3600s;
}
}
Upgrade ve Connection başlıkları websocket bağlantısı içindir. n8n editörü, iş akışı çalışırken sonuçları tarayıcıya bu bağlantı üzerinden gönderir; bu satırlar eksikse editör "Connection lost" uyarısı verir ve çalışan iş akışının çıktısı ekrana gelmez. proxy_read_timeout uzun süren isteklerin yarıda kesilmesini önler.
Siteyi etkinleştirin:
sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
5. Güvenlik duvarı ve SSL
UFW kullanıyorsanız yalnızca SSH ve web trafiğine izin verin. 5678 portunu açmanıza gerek yok:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
Let's Encrypt sertifikasını alın:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d n8n.ornek.com
Certbot, HTTPS ayarlarını Nginx dosyanıza ekler ve otomatik yenilemeyi kurar. Artık https://n8n.ornek.com adresine girip ilk yönetici hesabınızı oluşturabilirsiniz. Bu hesabı hemen oluşturun: kurulum sayfası açık kaldığı sürece adresi bilen herkes sahip hesabını sizden önce açabilir.
n8n'i güncellemek
n8n sık sürüm çıkarır. Güncellemek için compose klasöründe şu komutları çalıştırın:
cd /opt/n8n
sudo docker compose pull
sudo docker compose up -d
sudo docker image prune -f
Verileriniz birimde durduğu için kapsayıcının yeniden oluşturulması iş akışlarınızı silmez. Yine de büyük sürüm geçişlerinden önce yedek alın ve n8n'in sürüm notlarındaki uyumsuzluk (breaking changes) bölümünü okuyun. Belirli bir sürümde sabit kalmak isterseniz imaj adına etiket ekleyebilirsiniz; örneğin docker.n8n.io/n8nio/n8n:1.x.y gibi.
Yedekleme
En önemli şey n8n_data birimidir. Docker compose, birim adının başına klasör adını ekler; gerçek adı görmek için:
sudo docker volume ls
Klasör /opt/n8n ise ad büyük olasılıkla n8n_n8n_data olur. Tutarlı bir yedek için n8n'i kısa süreliğine durdurup birimi arşivleyin:
cd /opt/n8n
sudo docker compose stop
sudo docker run --rm -v n8n_n8n_data:/data -v /opt/n8n:/backup alpine tar czf /backup/n8n-yedek-$(date +%F).tar.gz -C /data .
sudo docker compose start
Arşivi sunucunun dışına da kopyalayın; aynı diskte duran yedek, disk arızasında işe yaramaz. Birimin içindeki config dosyasında n8n'in şifreleme anahtarı bulunur. Kayıtlı kimlik bilgileri (API anahtarları, şifreler) bu anahtarla şifrelenir; anahtar olmadan yedeği geri yükleseniz bile kimlik bilgilerini kullanamazsınız.
İş akışlarını ayrıca JSON olarak dışa aktarmak isterseniz:
sudo docker exec n8n n8n export:workflow --all --output=/home/node/.n8n/workflows.json
Ne kadar RAM gerekir?
Az sayıda basit iş akışı için n8n en az 1 GB RAM ile çalışır, ancak bu sınırda bir değerdir; özellikle büyük JSON verileri işlenirken veya aynı anda birkaç iş akışı çalışırken bellek yetmeyebilir. 2 GB ve üzeri rahat bir başlangıçtır. Büyük dosyalar, çok sayıda eşzamanlı çalışma ya da aynı sunucuda yerel yapay zekâ modeli gibi ek servisler varsa daha fazlasını planlayın. Kaynakların başkalarıyla paylaşılmamasını istiyorsanız VDS paketleri daha öngörülebilir performans sunar.
Kurulumla uğraşmak istemiyorsanız n8n & AI VPS paketlerine de bakabilirsiniz: ödemeden sonra ekibimiz sunucuya sizin seçiminize göre n8n, OpenWebUI, AI Agent veya Cloudron kurar ve sunucuyu kullanıma hazır şekilde teslim eder. Kendiniz kurmak isterseniz bu rehberdeki adımlar, root erişimli herhangi bir TürkiyeVPS VPS'inde aynen çalışır.
Sık Sorulan Sorular
n8n'i Docker olmadan kurabilir miyim?
Evet, Node.js kurup npm install -g n8n ile de çalıştırabilirsiniz. Ancak Node.js sürüm uyumu, güncelleme ve servis yönetimi işini kendiniz üstlenirsiniz. Docker ile güncelleme iki komuttan ibarettir ve n8n'in kendisi de Docker kurulumunu önerir.
Editör "Connection lost" uyarısı veriyor, neden?
Genellikle Nginx'te websocket başlıkları eksiktir. proxy_http_version 1.1, Upgrade ve Connection "upgrade" satırlarının location bloğunda olduğunu kontrol edin, ardından sudo nginx -t ve sudo systemctl reload nginx çalıştırın.
Webhook adresleri localhost olarak görünüyor, nasıl düzeltirim?
compose dosyasındaki WEBHOOK_URL değerini alan adınızla, sonunda / olacak şekilde ayarlayın ve sudo docker compose up -d ile kapsayıcıyı yeniden oluşturun.
SQLite yeterli mi, PostgreSQL kullanmalı mıyım?
Kişisel kullanım ve küçük ekipler için varsayılan SQLite genellikle yeterlidir. Çok sayıda çalıştırma geçmişi tutuyorsanız veya n8n'i birden fazla süreçle (queue mode) çalıştırmayı düşünüyorsanız PostgreSQL daha uygun olur.
Sunucuyu yeniden başlatınca n8n kendiliğinden açılır mı?
Evet. Docker servisi açılışta başlar ve compose dosyasındaki restart: unless-stopped ayarı sayesinde n8n kapsayıcısı da otomatik olarak yeniden çalışır.
Bunları da okuyun
512 MB veya 1 GB RAM'li bir VPS'te uygulamalarınız kapanıyorsa swap alanı ilk yardımdır. Ubuntu 24.04'te swap...
Bilgisayarınız kapanınca botunuz da susmasın. Python Telegram botunu Ubuntu 24.04 VPS'te systemd ile 7/24 çalı...
Metin2 sunucusu kuracaksınız ama VPS mi VDS mi alacağınızdan emin değil misiniz? Kaynak paylaşımı, RAM, disk,...