# Node.JS - Webhook Kurulum Rehberi

Bu rehber, Node.js tabanlı bir webhook hizmetinin Ubuntu/Debian tabanlı bir Linux sisteminde nasıl kurulacağını ve yapılandırılacağını açıklamaktadır. Hizmet, Nginx ile ters proxy olarak çalışacak ve Let's Encrypt sertifikası ile HTTPS üzerinden güvenli bir şekilde erişilebilir olacaktır.

Başlamadan önce, aşağıdakilerin sisteminizde kurulu olduğundan emin olun:

* Node.js ve npm
    
* Nginx web sunucusu
    
* Certbot (Let's Encrypt sertifikaları için)
    
* Çalışan bir webhook uygulamanız (`/home/berk/webhook/index.js` dosyası)
    
* [`webhook.iberk.me`](http://webhook.iberk.me) gibi webhook hizmetinize yönlendirilmiş bir alan adı
    

## 1\. Node.js Webhook Sunucusunu Oluştur

`webhook.js` (örnek)

```javascript
const http = require('http');

const server = http.createServer((req, res) => {
  if (req.method === 'POST') {
    let body = '';

    req.on('data', chunk => body += chunk.toString());
    req.on('end', () => {
      console.log('📩 Webhook received:', body);
      res.writeHead(200);
      res.end('Received');
    });
  } else {
    res.writeHead(405);
    res.end('Only POST allowed');
  }
});

const PORT = 3001;
server.listen(PORT, () => {
  console.log(`🚀 Webhook server running on port ${PORT}`);
});
```

## 2\. Webhook Servisinin Oluşturulması

Webhook hizmetini bir systemd servisi olarak yapılandıralım. Bu, sisteminiz yeniden başlatıldığında bile otomatik olarak çalışmasını sağlar.

```bash
sudo nano /etc/systemd/system/webhook.service
```

Dosyaya aşağıdaki içeriği ekleyin:

```bash
[Unit]
Description=Webhook
After=network.target

[Service]
ExecStart=/usr/bin/node /home/berk/webhook/webhook.js
Restart=always
User=berk
WorkingDirectory=/home/berk/webhook
Environment=NODE_ENV=production
Environment=PORT=3001

[Install]
WantedBy=multi-user.target
```

**Açıklamalar:**

* `Description`: Servisin açıklaması
    
* `After`: Bu servisin ağ hizmetleri başladıktan sonra başlaması gerektiğini belirtir
    
* `ExecStart`: Çalıştırılacak komut
    
* `WorkingDirectory`: Komutun çalıştırılacağı dizin
    
* `Restart`: Hizmet çöktüğünde otomatik olarak yeniden başlatılmasını sağlar
    
* `User`: Hizmetin hangi kullanıcı altında çalışacağı
    
* `Environment`: Ortam değişkenleri
    
* `WantedBy`: Hangi hedef için bu hizmetin başlatılacağını belirtir
    

Servisi etkinleştirin ve başlatın:

```bash
sudo systemctl daemon-reexec
sudo systemctl daemon-reload
sudo systemctl enable webhook.service
sudo systemctl start webhook.service
sudo systemctl status webhook.service
```

Servisin durumunu kontrol edin:

```bash
sudo systemctl status webhook.service
```

## 2\. Nginx Web Sunucusunun Yapılandırılması

Nginx'i webhook hizmetiniz için bir ters proxy olarak yapılandıralım:

```bash
sudo nano /etc/nginx/sites-available/webhook
```

Dosyaya aşağıdaki içeriği ekleyin:

```bash
server {
    listen 80;
    listen [::]:80;  # IPv6 için
    server_name webhook.iberk.me;

    location / {
        proxy_pass http://localhost:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}
```

**Açıklamalar:**

* `listen`: Nginx'in dinleyeceği port (HTTP için 80)
    
* `server_name`: Bu yapılandırmanın geçerli olduğu alan adı
    
* `proxy_pass`: İsteklerin yönlendirileceği iç adres (Node.js uygulamanızın çalıştığı port)
    
* `proxy_set_header`: Webhook sunucusuna iletilen HTTP başlıklarını ayarlar
    
* `proxy_cache_bypass`: Proxy önbelleğini devre dışı bırakır, gerçek zamanlı iletişim için önemlidir
    

Symbolic link oluşturun ve Nginx'i yeniden başlatın:

```bash
sudo ln -s /etc/nginx/sites-available/webhook /etc/nginx/sites-enabled
sudo nginx -t  # Yapılandırma dosyasını test edin
sudo systemctl reload nginx
```

## 3\. HTTPS Sertifikasının Kurulumu

Let's Encrypt sertifikasını kuralım:

```bash
sudo apt update && sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d webhook.iberk.me
```

Bu komut:

1. [webhook.iberk.me](http://webhook.iberk.me) için yeni bir SSL sertifikası oluşturur
    
2. Nginx yapılandırmasını otomatik olarak günceller
    
3. HTTP isteklerini HTTPS'e yönlendirir
    

Certbot, interaktif bir sihirbaz gibi çalışır ve ekrandaki talimatları takip etmeniz gerekir.

Sertifika otomatik olarak eklenir. Test etmek için:

```bash
curl -X POST https://webhook.iberk.me -d "Merhaba webhook"
```

Logları görmek için:

```bash
journalctl -u webhook.service -f
```

## 4\. Sorun Giderme

Webhook servisinde sorun yaşarsanız, aşağıdaki komutlarla günlükleri kontrol edebilirsiniz:

```bash
# Webhook servis günlüklerini görüntüle
sudo journalctl -u webhook.service

# Nginx günlüklerini görüntüle
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
```

Bu kurulumla webhook hizmetiniz şimdi:

* Bir systemd servisi olarak çalışıyor
    
* Nginx ile dış dünyaya açık
    
* Let's Encrypt SSL sertifikası ile güvenli
    
* Sistem yeniden başlatıldığında otomatik olarak başlıyor
