n8n Ubuntu Sunucuya Manuel Kurulum Rehberi

Otomasyon dünyasına adım atmak isteyenler için n8n gerçekten güzel bir başlangıç noktası. Zapier veya Make gibi SaaS alternatiflerin aksine, n8n’i kendi sunucunuzda barındırabiliyorsunuz ve bu durum hem veri gizliliği hem de maliyet açısından ciddi avantajlar sağlıyor. Ben bu kurulum sürecini onlarca farklı Ubuntu sunucusunda geçirdim ve her seferinde küçük farklılıklarla karşılaştım. Bu rehberde size en temiz ve sorunsuz kurulum yolunu anlatacağım.

Neden Manuel Kurulum?

Docker ile kurulum çok daha hızlı ama production ortamlarda bazen Docker katmanı gereksiz bir karmaşıklık ekliyor. Özellikle kaynak kısıtlı VPS’lerde veya n8n’i mevcut bir Node.js ekosistemine entegre etmek istediğinizde manuel kurulum çok daha mantıklı. Ayrıca servis yönetimi, log takibi ve güncelleme süreçleri üzerinde tam kontrol istiyorsanız bu yol sizin için.

Kurulumu Ubuntu 22.04 LTS üzerinde yapıyoruz. 20.04 için de büyük ölçüde aynı adımlar geçerli, sadece birkaç paket versiyonu farklılığı olabilir.

Ön Gereksinimler

Başlamadan önce sisteminizin hazır olması gereken birkaç şey var:

  • Minimum 1 GB RAM (2 GB önerilir, karmaşık workflow’larda bellek tüketimi artıyor)
  • Ubuntu 22.04 LTS kurulu ve güncel bir sunucu
  • Sudo yetkisi olan bir kullanıcı (root ile çalışmak istemiyoruz)
  • Bir alan adı (SSL için, yoksa IP ile de devam edilebilir ama önerilmez)
  • 443 ve 80 portları açık olmalı

Önce sistemi güncelleyelim:

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget git build-essential

Node.js Kurulumu

n8n, Node.js üzerinde çalışıyor ve doğru versiyonu kullanmak kritik önemde. Sisteminizin paket deposundaki Node.js genellikle çok eski olduğu için NodeSource reposunu kullanacağız. n8n şu an için Node.js 18.x ile en stabil şekilde çalışıyor, 20.x de destekleniyor ama bazı paketlerde uyumsuzluklar görebildim.

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs

Kurulumun başarılı olduğunu doğrulayalım:

node --version
npm --version

npm ile kurulum yapabiliriz ama ben pnpm tercih ediyorum. Daha hızlı ve disk kullanımı açısından çok daha verimli. Özellikle node_modules boyutunu düşündüğünüzde farkı hissediyorsunuz:

sudo npm install -g pnpm

Dedicated Kullanıcı Oluşturma

Güvenlik açısından n8n’i kendi kullanıcısı altında çalıştırmak doğru yaklaşım. Root veya kendi kullanıcı hesabınızla çalıştırmak, bir güvenlik açığı durumunda sisteminizin tamamını riske atabilir.

sudo useradd -r -s /bin/bash -m -d /home/n8n n8n
sudo mkdir -p /home/n8n/.n8n
sudo chown -R n8n:n8n /home/n8n

-r parametresi sistem kullanıcısı oluşturur, login amacıyla değil servis çalıştırmak için kullanılır. Yine de shell atadık çünkü zaman zaman bu kullanıcıya geçip dosyaları incelemeniz gerekebilir.

n8n Kurulumu

Şimdi asıl kuruluma geliyoruz. n8n’i global olarak mı yoksa n8n kullanıcısının dizinine mi kuracağımız tartışmalı. Ben global kurulumu tercih ediyorum, yönetimi daha kolay:

sudo npm install -g n8n

Bu işlem birkaç dakika sürebilir, n8n oldukça büyük bir paket. Kahvenizi hazırlayın.

Kurulum tamamlandıktan sonra doğrulama:

n8n --version

Ortam Değişkenlerini Yapılandırma

n8n’in davranışını ortam değişkenleriyle yönetiyoruz. Bu değişkenleri bir dosyada tutmak en temiz yöntem. n8n kullanıcısı için bir environment dosyası oluşturalım:

sudo nano /home/n8n/.n8n/.env

Dosyanın içine şunları ekleyin (kendi değerlerinizle düzenleyin):

# Temel ayarlar
N8N_HOST=0.0.0.0
N8N_PORT=5678
N8N_PROTOCOL=https
WEBHOOK_URL=https://n8n.yourdomain.com/

# Güvenlik
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=guclu_bir_sifre_buraya

# Veritabanı (SQLite varsayılan, production için PostgreSQL önerilir)
DB_TYPE=sqlite
DB_SQLITE_DATABASE_FILE=/home/n8n/.n8n/database.sqlite

# Zaman dilimi
GENERIC_TIMEZONE=Europe/Istanbul
TZ=Europe/Istanbul

# Log ayarları
N8N_LOG_LEVEL=info
N8N_LOG_OUTPUT=console,file
N8N_LOG_FILE_LOCATION=/home/n8n/.n8n/logs/n8n.log

Dosyayı kaydedin ve izinleri ayarlayın:

sudo chown n8n:n8n /home/n8n/.n8n/.env
sudo chmod 600 /home/n8n/.n8n/.env
sudo mkdir -p /home/n8n/.n8n/logs
sudo chown -R n8n:n8n /home/n8n/.n8n

Systemd Servis Dosyası

Sunucu yeniden başladığında n8n’in otomatik olarak ayağa kalkması için bir systemd servisi oluşturmamız gerekiyor. Bu adımı atlayanları gece 3’te telefon başında görmek mümkün.

sudo nano /etc/systemd/system/n8n.service
[Unit]
Description=n8n workflow automation
After=network.target
Wants=network-online.target

[Service]
Type=simple
User=n8n
Group=n8n
WorkingDirectory=/home/n8n
EnvironmentFile=/home/n8n/.n8n/.env
ExecStart=/usr/bin/n8n start
Restart=always
RestartSec=10
StandardOutput=journal
StandardError=journal
SyslogIdentifier=n8n

# Güvenlik sınırlamaları
NoNewPrivileges=true
ProtectSystem=strict
ReadWritePaths=/home/n8n

[Install]
WantedBy=multi-user.target

Servisi etkinleştirip başlatalım:

sudo systemctl daemon-reload
sudo systemctl enable n8n
sudo systemctl start n8n
sudo systemctl status n8n

Status çıktısında Active: active (running) görüyorsanız her şey yolunda demektir.

Nginx ile Reverse Proxy Kurulumu

n8n’i doğrudan 5678 portuyla kullanmak hem güvensiz hem de çirkin. Nginx üzerinden SSL ile yayınlamak doğru yaklaşım.

sudo apt install -y nginx

Nginx site konfigürasyonu:

sudo nano /etc/nginx/sites-available/n8n
server {
    listen 80;
    server_name n8n.yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name n8n.yourdomain.com;

    ssl_certificate /etc/letsencrypt/live/n8n.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/n8n.yourdomain.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    # n8n WebSocket desteği için kritik
    location / {
        proxy_pass http://localhost: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_cache_bypass $http_upgrade;
        proxy_read_timeout 86400;
        client_max_body_size 50m;
    }
}

proxy_read_timeout 86400 değeri önemli. Uzun süren workflow’larda bağlantı timeout almamak için bu değeri yüksek tutuyoruz.

Konfigürasyonu etkinleştirelim:

sudo ln -s /etc/nginx/sites-available/n8n /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

SSL Sertifikası (Let’s Encrypt)

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d n8n.yourdomain.com

Certbot, Nginx konfigürasyonunuzu otomatik olarak güncelleyecek. Sertifika yenileme otomatik olarak çalışıyor ama test etmekte fayda var:

sudo certbot renew --dry-run

PostgreSQL ile Production Veritabanı

SQLite küçük kullanım için yeterli ama ciddi iş yüklerinde PostgreSQL şart. Özellikle birden fazla kullanıcı veya yoğun webhook trafiği söz konusuysa SQLite’ı zorlamamak gerekiyor.

sudo apt install -y postgresql postgresql-contrib
sudo systemctl start postgresql
sudo systemctl enable postgresql

PostgreSQL kullanıcısı ve veritabanı oluşturalım:

sudo -u postgres psql

PostgreSQL konsolunda:

CREATE USER n8n_user WITH PASSWORD 'guclu_veritabani_sifresi';
CREATE DATABASE n8n_db OWNER n8n_user;
GRANT ALL PRIVILEGES ON DATABASE n8n_db TO n8n_user;
q

Ardından /home/n8n/.n8n/.env dosyasındaki veritabanı ayarlarını güncelleyin:

DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=localhost
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_DATABASE=n8n_db
DB_POSTGRESDB_USER=n8n_user
DB_POSTGRESDB_PASSWORD=guclu_veritabani_sifresi

SQLite satırlarını yorum satırına alın veya silin. Ardından servisi yeniden başlatın:

sudo systemctl restart n8n

Güncelleme Süreci

n8n oldukça aktif geliştirilen bir proje, sık sık güncelleme geliyor. Güncelleme süreci şöyle işliyor:

sudo npm update -g n8n
sudo systemctl restart n8n
sudo systemctl status n8n

Ben bu işlemi bir script’e bağladım ve cron ile haftada bir otomatik çalıştırıyorum. Ama dikkat: major versiyonlarda breaking change’ler olabiliyor. Her güncellemeden önce changelog’a bakmakta fayda var. Özellikle node credential’ları veya workflow yapısıyla ilgili değişiklikler sizi şaşırtmasın.

Log Takibi ve Sorun Giderme

Bir şeyler ters gittiğinde ilk bakacağınız yer loglar olmalı:

# Systemd logları
sudo journalctl -u n8n -f

# Son 100 satır
sudo journalctl -u n8n --lines=100

# Belirli bir zaman aralığı
sudo journalctl -u n8n --since "2024-01-01 00:00:00" --until "2024-01-01 23:59:59"

Sık karşılaşılan sorunlar ve çözümleri:

  • Port already in use: sudo lsof -i :5678 komutuyla hangi process’in portu kullandığını kontrol edin
  • Permission denied hataları: /home/n8n/.n8n dizininin sahipliğini kontrol edin, sudo chown -R n8n:n8n /home/n8n ile düzeltin
  • WebSocket bağlantı sorunları: Nginx konfigürasyonundaki Upgrade header’larının doğru olduğunu kontrol edin
  • Workflow’lar çalışmıyor: Timezone ayarlarını kontrol edin, GENERIC_TIMEZONE=Europe/Istanbul doğru set edilmiş olmalı

Yedekleme Stratejisi

Production’da n8n kullanıyorsanız yedekleme şart. SQLite kullanıyorsanız sadece database dosyasını ve .n8n dizinini yedeklemek yeterli. PostgreSQL için:

sudo -u postgres pg_dump n8n_db > /backup/n8n_backup_$(date +%Y%m%d).sql

Bu komutu bir cron job’a bağlayabilirsiniz:

sudo crontab -e
0 2 * * * /usr/bin/sudo -u postgres /usr/bin/pg_dump n8n_db > /backup/n8n_backup_$(date +%Y%m%d).sql 2>&1

n8n’in kendi içinde de workflow export özelliği var. Önemli workflow’larınızı JSON olarak export edip bir Git reposunda tutmak iyi bir pratik. Hem versiyon takibi hem de disaster recovery için hayat kurtarıcı.

Gerçek Dünya Senaryosu: Monitoring Entegrasyonu

Sunucularda n8n’i kurmanın en pratik kullanım alanlarından biri monitoring ve alerting otomasyonu. Örneğin Zabbix veya Prometheus’tan gelen alertleri n8n webhook’u üzerinden alıp Slack, Telegram veya e-posta ile bildirim göndermek klasik bir senaryo.

Webhook URL formatınız şöyle olacak: https://n8n.yourdomain.com/webhook/your-unique-webhook-id

Bu URL’i Zabbix’te media type olarak tanımlayabilir, Prometheus AlertManager’da receiver olarak kullanabilirsiniz. n8n tarafında gelen payload’ı parse edip koşullara göre farklı kanallardan bildirim gönderebilirsiniz. Ben bir müşteri projesinde Zabbix alertlerini n8n üzerinden hem Telegram grubuna hem de PagerDuty’ye yönlendirdim, araya birkaç filtreleme ve zenginleştirme adımı ekledim. Bu tür bir entegrasyonu kodla yapmak saatler alırdı, n8n’de 20 dakikada tamamlandı.

Sonuç

n8n’in manuel kurulumu ilk bakışta karmaşık görünebilir ama adımları takip ettiğinizde oldukça akıcı ilerliyor. Özetlemek gerekirse:

  • Node.js 18.x ile çalışın, sistem paketine güvenmeyin
  • Dedicated kullanıcı ve systemd servisi şart
  • Production için PostgreSQL geçişini geciktirmeyin
  • SSL’siz kullanmayın, Certbot ile 5 dakikada hallolur
  • Log takibini ve yedeklemeyi ihmal etmeyin

Kurulumun ardından n8n arayüzüne ilk girdiğinizde sizi karşılayan görsel workflow editörü gerçekten etkileyici. API entegrasyonları, zamanlanmış görevler, webhook tetikleyiciler ve 300’den fazla hazır entegrasyon ile otomasyon projelerinizi kodlamadan hayata geçirebilirsiniz. Sistem yöneticileri için en büyük kazanım ise tekrar eden operasyonel görevleri otomatize etmek, yani backup bildirimleri, sertifika yenileme alertleri, sunucu health check raporları gibi şeyler. Bir kez kurulup yapılandırdıktan sonra bırakın n8n çalışsın, siz daha önemli işlere odaklanın.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir