Bu rehberde gerçek Ubuntu 24.04.4 LTS VPS üzerinde n8n’i Docker ile yalnız localhost 5678 portunda çalıştırdık, n8n.ekasunucu.com için Nginx + Let’s Encrypt kurduk, n8n’i aynı Docker ağındaki Ollama qwen3:4b modeline bağladık ve Chat Trigger + AI Agent + Simple Memory + Calculator + HTTP Request Tool workflow’unu gerçek hatalar ve gerçek başarılı execution ekranlarıyla doğruladık.
Ubuntu 24.04.4 LTS
↓ Docker / eka-ai
n8n 2.33.7 :5678
↓ AI Agent
Ollama :11434 → qwen3:4b
├─ Simple Memory
├─ Calculator Tool
└─ HTTP Request Tool
↓
Nginx + HTTPS → n8n.ekasunucu.comBu rehber gerçek Ubuntu 24.04.4 LTS VPS üzerinde kurduğumuz n8n otomasyon katmanını, Ollama üzerinde çalışan qwen3:4b modelini ve n8n AI Agent workflow’unu baştan sona belgeler. Sistem Docker üzerinde çalışır; n8n, Ollama ve Open WebUI aynı eka-ai bridge ağı içindedir.
Final akışta kullanıcı n8n Chat Trigger üzerinden mesaj gönderir. AI Agent, Ollama Chat Model ile qwen3:4b modelini çağırır, Simple Memory ile oturum bağlamını korur ve gerektiğinde Calculator ile HTTP Request Tool kullanır. n8n 5678 ve Ollama 11434 host portları yalnız localhost’a bind edilir; dış erişim Nginx + HTTPS üzerinden sağlanır.
Internet :443
↓
Nginx + Let's Encrypt
↓
127.0.0.1:5678 → n8n
↓ eka-ai
ollama:11434 → qwen3:4b
↓
AI Agent + Memory + Calculator + HTTP ToolGerçek test sunucusunda Ubuntu 24.04.4 LTS, kernel 6.8.0-137-generic, 31 GiB RAM ve yaklaşık 99 GB root disk bulunuyordu. Docker Engine 29.7.2 ve Docker Compose v5.4.0 aktifti.
Ollama daha önce kurulduğu için 127.0.0.1:11434 üzerinde çalışıyor ve qwen3:4b modeli /api/tags çıktısında görünüyordu. n8n kurulumundan önce bu bağımlılıkları doğrulamak, daha sonraki AI credential hatalarını ayırmayı kolaylaştırır.
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 dockerdocker ps --filter name='^/ollama$'
curl -sS http://127.0.0.1:11434/api/tagsn8n ile Ollama farklı containerlarda çalıştığı için container içindeki localhost Ollama’yı göstermez. Bu nedenle her iki servis aynı eka-ai Docker ağına bağlandı ve n8n içinden Ollama adresi http://ollama:11434 olarak kullanıldı.
n8n.ekasunucu.com A kaydı test VPS IP’sine çözülmeden Nginx ve Let’s Encrypt aşamasına geçilmedi. DNS’in hem 1.1.1.1 hem 8.8.8.8 üzerinden doğrulanması yayılım kaynaklı hataları azaltır.
docker network inspect eka-ai --format 'Ag={{.Name}} Driver={{.Driver}} Scope={{.Scope}}'dig +short A n8n.ekasunucu.com @1.1.1.1
dig +short A n8n.ekasunucu.com @8.8.8.8n8n uygulama verisini container dosya sistemine bırakmak yerine n8n_data named volume kullandık. Böylece image güncellense veya container yeniden oluşturulsa bile kullanıcı, workflow ve credential verileri volume içinde kalır.
N8N_ENCRYPTION_KEY credential şifrelemesi için sabit tutulmalıdır. Reverse proxy arkasında N8N_HOST, N8N_PROTOCOL, N8N_EDITOR_BASE_URL, proxy hop ve timezone ayarlarını açıkça tanımlamak daha öngörülebilir bir kurulum sağlar.
docker volume inspect n8n_data >/dev/null 2>&1 || docker volume create n8n_dataopenssl rand -hex 32N8N_ENCRYPTION_KEY=UZUN_RASTGELE_ANAHTAR
N8N_HOST=n8n.ekasunucu.com
N8N_PORT=5678
N8N_PROTOCOL=https
N8N_EDITOR_BASE_URL=https://n8n.ekasunucu.com
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=productionResmî n8n Docker image’ını çekip containerı eka-ai ağına bağladık. Hostta 5678 portu 0.0.0.0 yerine 127.0.0.1’e bind edildi; böylece n8n editörü doğrudan public Docker portundan erişilebilir olmadı.
Kalıcı n8n_data volume /home/node/.n8n yoluna bağlandı. Restart policy ile reboot sonrası containerın otomatik ayağa kalkması sağlandı.
docker pull docker.n8n.io/n8nio/n8n:latestdocker run -d --name n8n --restart=always --network eka-ai --env-file /root/n8n.env -p 127.0.0.1:5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n:latestContainer başladıktan sonra http://127.0.0.1:5678/healthz endpointi HTTP 200 ve {"status":"ok"} döndürdü. Gerçek testte çalışan n8n sürümü 2.33.7 idi.
İlk açılışta veritabanı migrationları normaldir. Loglarımız ayrıca Python task runnerın internal modda Python 3 bulamadığını ve bazı gelecekteki konfigürasyon değişikliklerini bildiren uyarılar gösterdi; temel JS tabanlı workflow çalışmasını engellemedi.
curl -sS http://127.0.0.1:5678/healthzdocker exec n8n n8n --versiondocker logs --tail 120 n8nHosttan Ollama’ya ulaşmak yeterli değildir; n8n containerının da aynı Docker ağı üzerinden Ollama’ya erişmesi gerekir. Node içinde fetch ile http://ollama:11434/api/tags çağrısı HTTP 200 döndürdü ve qwen3:4b bulundu.
Ardından n8n containerının içinden /api/chat endpointine gerçek mesaj gönderildi. Yanıt N8N-OLLAMA-BAGLANTISI-BASARILI oldu; böylece Docker DNS, Ollama API ve model inference zinciri workflow arayüzüne geçmeden önce doğrulandı.
docker exec n8n node -e "fetch('http://ollama:11434/api/tags').then(r=>r.text()).then(console.log)"docker exec n8n node -e "fetch('http://ollama:11434/api/chat',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({model:'qwen3:4b',messages:[{role:'user',content:'Sadece N8N-OLLAMA-BAGLANTISI-BASARILI yaz.'}],stream:false})}).then(r=>r.json()).then(d=>console.log(d.message?.content))"n8n yalnız localhost 5678’de dinlediği için public web katmanında Nginx kullanıldı. Host, X-Forwarded-* ve WebSocket upgrade başlıkları reverse proxy’ye eklendi; proxy buffering kapatıldı ve uzun workflow bağlantıları için timeout artırıldı.
İlk HTTP domain kontrolümüz 404 döndü; buna rağmen Nginx vhost ve Certbot akışı tamamlandıktan sonra Let’s Encrypt sertifikası başarıyla deploy edildi. Origin HTTPS ve public domain testleri finalde HTTP 200 verdi.
cat > /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;
}
}
EOFnginx -t && systemctl reload nginx/snap/bin/certbot --nginx -d n8n.ekasunucu.com --email [email protected] --agree-tos --no-eff-email --non-interactive --redirectFinal port kontrolünde n8n 127.0.0.1:5678, Ollama 127.0.0.1:11434 ve Open WebUI 127.0.0.1:3000 üzerinde dinliyordu. Public erişimde yalnız Nginx 80/443 vardı.
Aynı final kontrolde Portainer, Ollama, Open WebUI ve n8n containerları birlikte çalışıyor; n8n ve Ollama eka-ai ağı içinde ayrı IP’lere sahipti. Certbot renew --dry-run başarılı ve systemctl --failed sonucu sıfırdı.
ss -lntp | grep -E ':5678[[:space:]]|:11434[[:space:]]|:3000[[:space:]]|:443[[:space:]]|:80[[:space:]]'docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}'/snap/bin/certbot renew --dry-run
systemctl --failed --no-pagerHTTPS domain açıldığında n8n ilk olarak owner hesabı oluşturma formunu gösterdi. E-posta, ad, soyad ve güçlü parola ile instance sahibi oluşturuldu.
Ardından isteğe bağlı kişiselleştirme ekranı geldi. Bu sorular workflow motorunun çalışması için zorunlu değildir; kurulum tamamlandıktan sonra ana workflow alanına geçilebilir.
Kurulum Community Edition olarak kullanılabilir. Testte Usage and plan alanından ücretsiz lisans anahtarı talep edildi, e-postaya gelen activation key n8n arayüzündeki Enter activation key penceresine girildi ve durum Registered olarak değişti.
Bu adım AI Agent’ın temel çalışması için zorunlu değildir; ancak n8n’in o tarihte ücretsiz kayıtla sunduğu seçili ek özellikleri açmak için kullanıldı. Lisans koşulları ve sağlanan özellikler zaman içinde değişebileceği için arayüzde gösterilen güncel kapsamı esas alın.




Workflows ana sayfasından yeni workflow açtık. Boş editörde Chat Trigger ana giriş noktası, AI Agent root node’u ise karar ve tool çağrı katmanı oldu.
İlk temel mimari dört bileşenden oluştu: Chat Trigger, AI Agent, Ollama Chat Model ve Simple Memory. Daha sonra Calculator ve HTTP Request Tool aynı AI Agent’ın Tool girişine bağlandı.
Workflow JSON içinde Chat Trigger’ın main çıkışı Yapay Zeka Ajani node’una; Ollama Qwen3 4B ai_languageModel girişine; Basit Hafiza ise ai_memory girişine bağlandı. System Message, ajanı Türkçe cevap vermeye ve gerçek model adını qwen3:4b olarak belirtmeye zorlayacak şekilde tanımlandı.
Workflow export dosyaları credential sırlarını taşımak için güvenilir bir yöntem değildir. Ollama credentialını instance üzerinde oluşturup ilgili node’a seçmek daha doğru yaklaşımdır.
Sohbet Mesaji Geldiginde → Yapay Zeka Ajani
Ollama Qwen3 4B ──ai_languageModel──▶ Yapay Zeka Ajani
Basit Hafiza ──ai_memory────────────▶ Yapay Zeka Ajaniİlk importtan sonra workflow çalıştırıldığında Chat Trigger yeşile dönmesine rağmen AI Agent ve Ollama sub-node kırmızı hata verdi. Bunun nedeni workflow JSON’unun Ollama credential bağlantısını taşımamasıydı.
Ollama Chat Model node’unda yeni Ollama credential oluşturup Base URL olarak http://ollama:11434 girdik. Burada localhost:11434 kullanmak yanlıştır; n8n containerındaki localhost n8n’in kendisini ifade eder.
Ollama Credential Base URL:
http://ollama:11434Credential kaydedildikten sonra workflow tekrar çalıştırıldı. Chat Trigger, AI Agent, Ollama Qwen3 4B ve Simple Memory yeşil oldu; n8n “Workflow executed successfully” mesajı verdi.
İlk cevap model kimliğini uydurduğu için system prompt’u daha açık hale getirdik. İkinci testte ajan “Altyapımda Ollama kullanılmaktadır ve çalıştığım model qwen3:4b’dir” şeklinde doğru cevap verdi.



LLM’ler kendilerine ait runtime bilgisini otomatik olarak güvenilir biçimde bilmeyebilir. İlk testte model “SenEKA-Local-1.0” gibi uydurma bir ad üretti. Bu, altyapı hatası değil prompt doğruluğu problemiydi.
System Message içine altyapının Ollama, modelin qwen3:4b olduğu ve farklı model adı uydurulmaması gerektiği açıkça yazıldı. Teknik makalelerde model kimliği gibi doğrulanabilir bilgileri prompt ve gerçek runtime konfigürasyonuyla eşleştirmek önemlidir.
Sen EKA Sunucu üzerinde tamamen yerel çalışan bir yapay zeka ajanısın.
Altyapında Ollama kullanılmaktadır ve çalıştığın dil modeli qwen3:4b modelidir.
Kullanıcı model adını sorarsa yalnızca qwen3:4b olduğunu söyle.
Farklı veya uydurma model adı üretme.
Türkçe, açık ve doğru cevap ver. Bilmediğin bilgiyi uydurma.AI Agent’ın Tool girişine Calculator bağlandı. System Message içinde matematiksel hesap gerektiğinde HesapMakinesi aracını kullanması istendi.
“3478 × 129 kaç eder? Hesap makinesini kullan.” mesajında workflow Calculator Tool’u gerçekten çağırdı. Tool yaklaşık 1 ms’de tamamlandı ve ajan doğru sonuç olan 448662’yi kullanıcıya döndürdü.
Test mesajı: 3478 × 129 kaç eder? Hesap makinesini kullan.
Beklenen sonuç: 448662İlk HTTP tool denemesinde eski @n8n/n8n-nodes-langchain.toolHttpRequest tipi kullanıldı. Çalıştırmada “has a supplyData method but no execute method” hatası oluştu ve OrnekAPIVeriGetir node’u kırmızıya döndü.
Bu hata ağ veya JSONPlaceholder kaynaklı değildi; node tipi güncel n8n sürümüyle uyumsuzdu. Gerçek hata ekranını koruyup workflow’u güncel HTTP Request Tool node’una taşıdık.
Hata: The node '@n8n/n8n-nodes-langchain.toolHttpRequest' has a 'supplyData' method but no 'execute' method.Eski node yerine AI Agent’ın Tool girişine güncel HTTP Request Tool eklendi. Test için GET https://jsonplaceholder.typicode.com/todos/1 adresi kullanıldı ve tool açıklaması ajan tarafından ne zaman çağrılacağını açıkça belirtti.
“OrnekAPIVeriGetir aracını kullan ve gelen API verisini Türkçe açıkla” mesajında HTTP tool yeşil tamamlandı. Ajan gerçek JSON yanıtındaki userId 1, id 1, title “delectus aut autem” ve completed false alanlarını Türkçe özetledi.
GET https://jsonplaceholder.typicode.com/todos/1Test mesajı: OrnekAPIVeriGetir aracını kullan ve gelen API verisini Türkçe açıkla.Kurulum tamamlandığında n8n public domain üzerinden HTTPS ile açılıyor, fakat 5678 ve 11434 portları internete doğrudan açılmıyor. n8n → Ollama Docker ağı bağlantısı, qwen3:4b inference, hafıza, Calculator ve HTTP API tool çağrıları gerçek testlerle doğrulanmış durumda.
Üretimde image taglerini bilinçli yönetin, n8n_data ve Ollama verilerini yedekleyin, N8N_ENCRYPTION_KEY değerini koruyun, credential erişimlerini sınırlandırın ve n8n audit / system logs / Certbot yenileme kontrollerini düzenli çalıştırın. Sonraki adım aynı stack’e Qdrant ekleyerek RAG tabanlı belge arama olacaktır.
docker ps
docker stats n8n ollama --no-stream
curl -sS https://n8n.ekasunucu.com/ -o /dev/null -w '%{http_code}\n'
/snap/bin/certbot renew --dry-run
systemctl --failed --no-pagerEvet. Bu gerçek testte n8n 2.33.7 Ubuntu 24.04.4 LTS üzerinde Docker containerı olarak çalıştı.
Hayır. Ayrı containerlarda çalışabilirler. Aynı Docker ağına bağlayıp n8n içinden http://ollama:11434 kullanabilirsiniz.
Çünkü n8n containerındaki localhost n8n containerını ifade eder. Ollama ayrı container olduğu için Docker DNS adı ollama kullanılmalıdır.
Varsayılan uygulama portu 5678’dir. Bu kurulumda yalnız 127.0.0.1:5678’e bind edilip public erişim Nginx 443 üzerinden sağlandı.
Container yeniden oluşturulduğunda kullanıcı, workflow ve credential verilerinin kalıcı tutulmasına yardımcı olur.
n8n credential verilerini şifrelemek için kullanır. Anahtarın kaybı veya rastgele değiştirilmesi mevcut credential erişimini bozabilir.
Self-hosted Community Edition kullanılabilir. Bu testte ayrıca arayüzden ücretsiz registration key etkinleştirildi; sağlanan ek özellikler zamanla değişebilir.
Bu gerçek testte Chat Trigger, Memory, Calculator ve HTTP Tool ile çalıştı. Daha karmaşık ajanlarda model yeteneği ve sunucu kaynağına göre daha büyük model gerekebilir.
Model runtime yapılandırmasını otomatik olarak güvenilir biçimde bilemeyebilir. System prompt ile gerçek model adı qwen3:4b açıkça sabitlendi.
Evet. 3478 × 129 testi Calculator Tool üzerinden çalıştı ve doğru sonuç 448662 döndü.
İlk denemede eski LangChain HTTP tool node tipi kullanılmıştı. Çalışan n8n sürümüyle uyumlu güncel HTTP Request Tool’a geçince hata düzeldi.
Hayır. Bu mimaride ikisi localhost ile sınırlandırıldı; n8n public erişimi yalnız Nginx HTTPS üzerinden aldı.
certbot renew --dry-run ile gerçek sertifikayı değiştirmeden yenileme akışını simüle edebilirsiniz.
Qdrant ve embedding modeli ekleyerek n8n AI Agent için RAG tabanlı belge arama ve bilgi tabanı kurabilirsiniz.
n8n otomasyonları, Ollama modelleri, Open WebUI, Qdrant ve self-hosted AI servislerini kendi sunucunuzda çalıştırmak için EKA Sunucu Linux VPS paketlerini inceleyebilirsiniz.
Güncellendi: 10.08.2026