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.jsdosyası)webhook.iberk.megibi webhook hizmetinize yönlendirilmiş bir alan adı
1. Node.js Webhook Sunucusunu Oluştur
webhook.js (örnek)
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.
sudo nano /etc/systemd/system/webhook.service
Dosyaya aşağıdaki içeriği ekleyin:
[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 belirtirExecStart: Çalıştırılacak komutWorkingDirectory: Komutun çalıştırılacağı dizinRestart: Hizmet çöktüğünde otomatik olarak yeniden başlatılmasını sağlarUser: Hizmetin hangi kullanıcı altında çalışacağıEnvironment: Ortam değişkenleriWantedBy: Hangi hedef için bu hizmetin başlatılacağını belirtir
Servisi etkinleştirin ve başlatın:
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:
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:
sudo nano /etc/nginx/sites-available/webhook
Dosyaya aşağıdaki içeriği ekleyin:
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ı ayarlarproxy_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:
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:
sudo apt update && sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d webhook.iberk.me
Bu komut:
webhook.iberk.me için yeni bir SSL sertifikası oluşturur
Nginx yapılandırmasını otomatik olarak günceller
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:
curl -X POST https://webhook.iberk.me -d "Merhaba webhook"
Logları görmek için:
journalctl -u webhook.service -f
4. Sorun Giderme
Webhook servisinde sorun yaşarsanız, aşağıdaki komutlarla günlükleri kontrol edebilirsiniz:
# 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