Ekran Kartlı Sunucu Satışları Başladı. İncele
Altyapı ve Sistem Yönetimi

Discord Bot Hosting ve 7/24 Çalıştırma

Discord botunuzu sunucuda 7/24 çalıştırın: Node.js/Python kurulumu, pm2 ve systemd ile süreç yönetimi, log takibi ve otomatik yeniden başlatma.

  • 9 dk okuma
  • Güncelleme:
  • Yayın:
  • Batihost Teknik Ekibi

Kısaca Özet

  • Discord botunu 7/24 çalıştırmanın doğru yolu, kendi sunucunuzda bir süreç yöneticisi kullanmaktır: Node.js botlar için pm2, dil bağımsız kurulumlar için systemd.
  • Bot çöktüğünde otomatik yeniden başlaması, sunucu yeniden başlatıldığında kendiliğinden ayağa kalkması ve logların dosyaya yazılması zorunludur.
  • Bot token’ı asla kod içine yazılmaz; .env dosyasında tutulur, dosya izni 600 yapılır ve depoya gönderilmez.
  • Küçük botlar için 8 GB RAM’li bir VDS fazlasıyla yeterlidir; birden fazla bot ve veritabanı çalıştıracaksanız kaynağı buna göre planlayın.

Discord bot hosting, botunuzun bilgisayarınız kapalıyken de çalışmaya devam etmesi demektir. Bir botu kendi makinenizde node index.js yazarak çalıştırmak geliştirme aşamasında yeterlidir; ama bilgisayarı kapattığınız anda bot düşer, terminal penceresi kapandığında süreç sonlanır ve bir hata oluştuğunda kimse yeniden başlatmaz.

Doğru çözüm, botu bir sunucuda süreç yöneticisi altında çalıştırmaktır. Bu rehberde Ubuntu 24.04 üzerinde Node.js ve Python botlarının kurulumunu, pm2 ve systemd yapılandırmalarını gerçek dosya içerikleriyle, log yönetimini, otomatik yeniden başlatmayı ve güvenlik önlemlerini bulacaksınız.

BilgiBu sayfa Linux (Ubuntu 24.04 LTS) örnekleriyle ilerliyor çünkü bot barındırmanın standardı budur. Windows sunucuda çalışmak zorundaysanız aynı işi NSSM ile bir Windows hizmeti oluşturarak yaparsınız; mantık aynı, araç farklıdır.

Gereksinimler ve Sunucu Seçimi#

Discord botları genellikle hafif uygulamalardır: ağ geçidine bir WebSocket bağlantısı açar, olayları dinler ve komutlara yanıt verir. Kaynak ihtiyacı botun ne yaptığına göre değişir.

Bot türüRAMNot
Moderasyon / yardımcı bot8 GB paket yeterliBot birkaç yüz MB tüketir; sunucuda başka işler de çalışabilir
Veritabanı kullanan bot8 GBPostgreSQL veya MariaDB ile birlikte
Müzik botu8-12 GBSes kodlama CPU yoğun; saat hızı önemli
Birden çok bot + panel12-16 GBHer bot ayrı süreç olarak izlenmeli
Görüntü/veri işleme16 GB ve üzeriİş kuyruğu ve ayrı işçi süreçleri gerekir
Bot türüne göre önerilen paket

Disk tarafında NVMe SSD ve en az 50 GB alan planlayın; loglar ve veritabanı zamanla büyür. İşlemcide yüksek saat hızlı AMD Ryzen tercih edin, özellikle ses işleyen botlarda fark belirgindir. Uygun paketleri VDS sayfasında inceleyebilir, seçim kriterleri için sunucu kiralama rehberine bakabilirsiniz.

Sunucuyu Hazırlama#

Sunucuya SSH ile bağlanın ve botu root ile çalıştırmayın. Ayrı bir kullanıcı açmak, botta bir güvenlik açığı çıktığında zararı sınırlar.

# Sistemi güncelle
sudo apt update && sudo apt upgrade -y

# Bot için ayrı kullanıcı oluştur (giriş kabuğu yok)
sudo adduser --system --group --home /opt/discordbot --shell /bin/bash discordbot

# Çalışma dizinini hazırla
sudo mkdir -p /opt/discordbot/bot
sudo chown -R discordbot:discordbot /opt/discordbot

# Temel araçlar
sudo apt install -y git curl build-essential

SSH bağlantısını hiç kurmadıysanız SSH bağlantı rehberi ile başlayın, komutlara yabancıysanız Linux temel komutları sayfasına göz atın.

Node.js Kurulumu#

Ubuntu depolarındaki Node.js sürümü genellikle eskidir. Discord kütüphaneleri güncel LTS sürümünü ister; NodeSource deposunu kullanın:

# NodeSource LTS deposunu ekle ve Node.js'i kur
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install -y nodejs

# Sürümleri doğrula
node -v
npm -v

# Örnek çıktı:
# v22.14.0
# 10.9.2
Gerekli yazılımlar
  • Node.js (resmî site)LTS Linux, Windows, macOSÜcretsiz
  • Python (resmî site) Linux, Windows, macOSÜcretsiz
  • PuTTY (Windows’tan SSH) Windows.exeÜcretsiz
    İndir
  • WinSCP (dosya aktarımı) WindowsSFTP/SCPÜcretsiz
    İndir

Bağlantılar resmî kaynaklara gider. pm2 ve bot kütüphaneleri npm üzerinden kurulur, ayrı indirme gerektirmez.

Bot Kodunu Sunucuya Alma ve Token Yönetimi#

# Bot kullanıcısına geç
sudo -u discordbot -i
cd /opt/discordbot/bot

# Kodu depodan çek
git clone https://github.com/kullanici/botunuz.git .

# Bağımlılıkları üretim modunda kur
npm ci --omit=dev

Token’ı asla kaynak koda yazmayın. Ortam değişkeni dosyası oluşturun:

# /opt/discordbot/bot/.env
DISCORD_TOKEN=BURAYA_GERCEK_TOKEN
CLIENT_ID=123456789012345678
GUILD_ID=987654321098765432
NODE_ENV=production
LOG_LEVEL=info
DATABASE_URL=postgresql://botuser:parola@localhost:5432/botdb
# Dosyayı yalnızca sahibi okuyabilsin
chmod 600 /opt/discordbot/bot/.env

# .gitignore içine mutlaka ekleyin
echo ".env" >> /opt/discordbot/bot/.gitignore
echo "node_modules/" >> /opt/discordbot/bot/.gitignore
echo "logs/" >> /opt/discordbot/bot/.gitignore
UyarıBot token’ı, botunuzun tam kontrolünü veren bir anahtardır. Yanlışlıkla bir depoya gönderildiyse geçmişten silmek yetmez — Discord geliştirici portalından Reset Token ile mutlaka sıfırlayın. Otomatik tarayıcılar herkese açık depolardaki token’ları dakikalar içinde bulup kullanır.

pm2 ile Süreç Yönetimi#

pm2, Node.js uygulamaları için tasarlanmış bir süreç yöneticisidir: botu arka planda tutar, çöktüğünde yeniden başlatır, logları yönetir ve kaynak kullanımını gösterir.

# pm2'yi global kur
sudo npm install -g pm2

# Sürümü doğrula
pm2 -v

Botu doğrudan komutla başlatmak yerine bir yapılandırma dosyası yazın. Bu dosya, ayarların kaybolmamasını ve tekrar edilebilir olmasını sağlar:

// /opt/discordbot/bot/ecosystem.config.js
module.exports = {
  apps: [
    {
      name: 'discord-bot',
      script: './index.js',
      cwd: '/opt/discordbot/bot',
      instances: 1,
      exec_mode: 'fork',

      // Otomatik yeniden başlatma
      autorestart: true,
      watch: false,
      max_restarts: 10,
      min_uptime: '30s',
      restart_delay: 5000,
      exp_backoff_restart_delay: 200,

      // Bellek sızıntısına karşı koruma
      max_memory_restart: '600M',

      // Ortam
      env: {
        NODE_ENV: 'production',
      },

      // Loglar
      output: '/opt/discordbot/logs/out.log',
      error: '/opt/discordbot/logs/error.log',
      log_date_format: 'YYYY-MM-DD HH:mm:ss',
      merge_logs: true,

      // Kapatma sırasında temiz çıkış için süre tanı
      kill_timeout: 5000,
    },
  ],
};
# Log dizinini oluştur
mkdir -p /opt/discordbot/logs

# Botu başlat
cd /opt/discordbot/bot
pm2 start ecosystem.config.js

# Durumu gör
pm2 status

# Örnek çıktı:
# ┌────┬───────────────┬─────────┬─────────┬──────────┬────────┬──────┐
# │ id │ name          │ mode    │ status  │ cpu      │ mem    │ ↺    │
# ├────┼───────────────┼─────────┼─────────┼──────────┼────────┼──────┤
# │ 0  │ discord-bot   │ fork    │ online  │ 0.4%     │ 92.1mb │ 0    │
# └────┴───────────────┴─────────┴─────────┴──────────┴────────┴──────┘

Sunucu yeniden başladığında botun otomatik açılması#

# pm2'nin systemd servisi oluşturmasını sağla
pm2 startup systemd -u discordbot --hp /opt/discordbot

# Komutun çıktısında verilen sudo satırını aynen çalıştırın, örneğin:
# sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u discordbot --hp /opt/discordbot

# Mevcut süreç listesini kaydet
pm2 save

# Test edin
sudo reboot
# Tekrar bağlanıp:
pm2 status

Günlük pm2 komutları#

pm2 logs discord-bot            # canlı log akışı
pm2 logs discord-bot --lines 200 # son 200 satır
pm2 restart discord-bot         # yeniden başlat
pm2 reload discord-bot          # güncelleme sonrası yumuşak yeniden yükleme
pm2 stop discord-bot            # durdur
pm2 delete discord-bot          # listeden kaldır
pm2 monit                       # canlı CPU/RAM izleme ekranı
pm2 describe discord-bot        # ayrıntılı bilgi ve yeniden başlatma sayısı
DikkatLog dosyaları sınırsız büyür ve zamanla diski doldurur. pm2 için log döndürme modülünü kurun: pm2 install pm2-logrotate ve ardından pm2 set pm2-logrotate:max_size 20M, pm2 set pm2-logrotate:retain 14. Dolan disk, botu değil tüm sunucuyu durdurur.

systemd ile Süreç Yönetimi#

Python, Java ya da Go ile yazılmış bir bot çalıştırıyorsanız ya da ek bağımlılık istemiyorsanız systemd doğru araçtır. İşletim sisteminin kendi servis altyapısıdır.

# /etc/systemd/system/discord-bot.service
[Unit]
Description=Discord Bot
Documentation=https://batihost.com/wiki/discord-bot-hosting-kurulumu.php
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=discordbot
Group=discordbot
WorkingDirectory=/opt/discordbot/bot

# Ortam değişkenlerini dosyadan oku
EnvironmentFile=/opt/discordbot/bot/.env

ExecStart=/usr/bin/node /opt/discordbot/bot/index.js

# Çökerse her zaman yeniden başlat
Restart=always
RestartSec=10

# Sonsuz döngüye girmesin: 300 saniyede en fazla 5 deneme
StartLimitIntervalSec=300
StartLimitBurst=5

# Kaynak sınırları
MemoryMax=1G
CPUQuota=200%

# Güvenlik sıkılaştırma
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/opt/discordbot
ProtectKernelTunables=true
ProtectControlGroups=true
RestrictSUIDSGID=true

# Log
StandardOutput=journal
StandardError=journal
SyslogIdentifier=discord-bot

[Install]
WantedBy=multi-user.target
# Servisi tanıt ve başlat
sudo systemctl daemon-reload
sudo systemctl enable --now discord-bot

# Durumu kontrol et
sudo systemctl status discord-bot

# Örnek çıktı:
# ● discord-bot.service - Discord Bot
#      Loaded: loaded (/etc/systemd/system/discord-bot.service; enabled)
#      Active: active (running) since Wed 2026-08-12 03:14:22 +03; 12min ago
#    Main PID: 4128 (node)
#       Tasks: 11 (limit: 9451)
#      Memory: 88.4M (max: 1.0G)
#         CPU: 3.812s

# Canlı log takibi
sudo journalctl -u discord-bot -f

# Son 200 satır
sudo journalctl -u discord-bot -n 200 --no-pager

# Yalnızca hataları filtrele
sudo journalctl -u discord-bot -p err --since "1 hour ago"

Python botu için ExecStart#

Python kullanıyorsanız sanal ortam oluşturup servis dosyasındaki ExecStart satırını değiştirmeniz yeterlidir:

cd /opt/discordbot/bot
python3 -m venv venv
./venv/bin/pip install -U pip
./venv/bin/pip install -r requirements.txt

# Servis dosyasında:
# ExecStart=/opt/discordbot/bot/venv/bin/python /opt/discordbot/bot/main.py

Log Yönetimi ve İzleme#

Bot çöktüğünde neden çöktüğünü bilmek, yeniden başlatmaktan daha önemlidir. İki şeyi kurun: yapılandırılmış log ve kaynak izleme.

# journald log boyutunu sınırla
sudo mkdir -p /etc/systemd/journald.conf.d
sudo tee /etc/systemd/journald.conf.d/limit.conf > /dev/null <<'EOF'
[Journal]
SystemMaxUse=500M
MaxRetentionSec=30day
EOF
sudo systemctl restart systemd-journald

# Botun bellek kullanımını anlık gör
ps -o pid,user,%cpu,%mem,rss,etime,cmd -C node

# Örnek çıktı:
#   PID USER     %CPU %MEM   RSS     ELAPSED CMD
#  4128 discord   0.6  1.1 90124    00:42:17 node /opt/discordbot/bot/index.js

Botun kaç kez yeniden başladığını izlemek, sessiz sorunları yakalamanın en pratik yoludur. pm2’de pm2 describe çıktısındaki restart sayacı, systemd’de systemctl show discord-bot -p NRestarts bunu gösterir. Sayaç sürekli artıyorsa bot sağlıklı değildir. Kalıcı izleme ve uyarı kurmak için sunucu izleme rehberine bakın.

Sık Karşılaşılan Sorunlar#

BelirtiSebepÇözüm
Bot SSH kapanınca duruyorSüreç terminale bağlı çalışıyorpm2 veya systemd ile servis haline getirin
Sunucu yeniden başlayınca bot açılmıyorpm2 save yapılmamış ya da servis enable değilpm2 startup + pm2 save ya da systemctl enable
Sürekli yeniden başlıyorBaşlangıçta hata veriyor, token yanlış olabilirLogları okuyun; .env yolunu ve token’ı doğrulayın
Zamanla RAM tüketimi artıyorBellek sızıntısı (dinleyici birikimi, önbellek)max_memory_restart / MemoryMax koyun, kodu profilleyin
429 Too Many RequestsDiscord API hız sınırıİstekleri kuyruğa alın, toplu işlemleri yavaşlatın
Disk doldu, bot durduLog dosyaları büyümüşlogrotate ya da pm2-logrotate kurun
Komutlar sunucuda görünmüyorSlash komutları kaydedilmemişKomut kayıt betiğini çalıştırın; global kayıt yayılması zaman alır
Bot çevrim içi ama yanıt vermiyorGerekli intent açılmamışGeliştirici portalından ilgili intent’i etkinleştirin
Discord bot barındırmada sık karşılaşılan sorunlar

Güvenlik ve Yedekleme#

  • Botu root ile çalıştırmayın. Ayrı bir sistem kullanıcısı zorunludur.
  • Token’ı ve veritabanı parolasını .env’de tutun, izni 600 olsun, depoya göndermeyin.
  • Bot izinlerini daraltın. Discord’da “Administrator” yetkisi vermek yerine yalnızca gereken izinleri seçin.
  • Bağımlılıkları güncel tutun. npm audit çıktısını düzenli kontrol edin.
  • Güvenlik duvarını kapalı tutun. Bot dışarıdan bağlantı kabul etmez; yalnızca SSH portu açık olsun. Kural yönetimi: firewall yapılandırması.
  • Veritabanını yedekleyin. Bot verisi (ekonomi, seviye, ayarlar) kaybedilirse geri gelmez.
# Basit yedek betiği: /opt/discordbot/yedek.sh
#!/bin/bash
TARIH=$(date +%F_%H%M)
HEDEF=/opt/discordbot/yedek

mkdir -p "$HEDEF"

# Veritabanı
pg_dump -U botuser botdb > "$HEDEF/botdb_$TARIH.sql"

# Yapılandırma ve kod (node_modules hariç)
tar --exclude='node_modules' --exclude='logs' \
    -czf "$HEDEF/bot_$TARIH.tar.gz" -C /opt/discordbot bot

# 14 günden eski yedekleri sil
find "$HEDEF" -type f -mtime +14 -delete
# Betiği çalıştırılabilir yap ve her gece 04:00'te çalıştır
chmod +x /opt/discordbot/yedek.sh
crontab -e

# Eklenecek satır:
0 4 * * * /opt/discordbot/yedek.sh >> /opt/discordbot/logs/yedek.log 2>&1

Yedekleri sunucu dışında da tutmak gerekir; planlamayı 3-2-1 yedekleme kuralı sayfasında anlattık.

İpucuBotunuz bir Minecraft sunucusuyla konuşuyorsa (oyuncu sayısı gösterme, konsol köprüsü, whitelist yönetimi) ikisini aynı VDS üzerinde çalıştırmak gecikmeyi sıfırlar ve ağ üzerinden kimlik doğrulama derdini ortadan kaldırır. Kaynak planlarken oyun sunucusunun RAM ihtiyacına botun payını da ekleyin.

Güncelleme Akışı#

  1. Yedek alın#

    Güncelleme öncesi veritabanı ve yapılandırma yedeği alın. Geri dönmeniz gerekebilir.

  2. Kodu çekin#

    sudo -u discordbot git -C /opt/discordbot/bot pull

  3. Bağımlılıkları güncelleyin#

    sudo -u discordbot npm ci --omit=devnpm install yerine npm ci kullanmak kilit dosyasına birebir uyar ve sürpriz sürüm değişimini engeller.

  4. Servisi yeniden yükleyin#

    pm2: pm2 reload discord-bot — systemd: sudo systemctl restart discord-bot

  5. Logları kontrol edin#

    İlk iki dakika logları izleyin. Hata yoksa güncelleme tamamdır; hata varsa yedekten dönün.

Özetle#

Discord botunu 7/24 çalıştırmanın özü, onu bir süreç yöneticisine teslim etmektir. Node.js botları için pm2 pratik ve zengin bir çözümdür; farklı diller karışıksa ya da ek bağımlılık istemiyorsanız systemd daha temizdir. İkisinde de üç şey mutlaka yapılandırılmalıdır: çökme sonrası otomatik yeniden başlatma, sunucu açılışında otomatik başlama ve dosyaya yazılan loglar.

Güvenlik tarafında kural basit: bot ayrı bir kullanıcıyla çalışsın, token .env içinde ve 600 izinle dursun, depoya gitmesin. Log döndürmeyi kurun ki disk dolmasın, veritabanını düzenli yedekleyin ve yeniden başlatma sayacını izleyin — sessizce sürekli çöken bir bot, hiç çalışmayan bottan daha zor fark edilir.

Sıkça Sorulan Sorular#

Discord botu 7/24 nasıl çalıştırılır?

Botu kendi sunucunuzda bir süreç yöneticisiyle çalıştırın. Node.js botlar için pm2, dilden bağımsız kurulumlar için systemd kullanılır. İkisi de botu arka planda tutar, çöktüğünde otomatik yeniden başlatır ve sunucu yeniden başladığında kendiliğinden ayağa kaldırır. Botu doğrudan node index.js ile çalıştırmak SSH oturumu kapandığında süreci sonlandırır.

Discord bot için hangi sunucu gerekir?

Küçük ve orta ölçekli botlar çok az kaynak tüketir; 8 GB RAM’li bir VDS birden fazla botu rahatlıkla çalıştırır. Belirleyici olan sunucu gücünden çok kararlılıktır: bot 7/24 açık kalmalı, ağ bağlantısı istikrarlı olmalıdır. Müzik botu, görüntü işleme ya da büyük veritabanı kullanan botlarda CPU ve RAM ihtiyacı belirgin biçimde artar.

pm2 mi systemd mi kullanmalıyım?

Yalnızca Node.js botları çalıştırıyorsanız pm2 daha pratiktir: log yönetimi, izleme ve çoklu süreç kontrolü hazır gelir. Farklı diller karışıksa (Python, Java, Go) systemd daha tutarlıdır çünkü işletim sisteminin kendi servis altyapısıdır ve ek bağımlılık gerektirmez. İkisini aynı bot için birlikte kullanmayın.

Bot token’ım sızarsa ne yapmalıyım?

Discord geliştirici portalından token’ı hemen sıfırlayın (Reset Token); eski token anında geçersiz olur. Ardından yeni token’ı yalnızca .env dosyasına yazın ve dosya iznini 600 yapın. Token bir Git deposuna gönderildiyse geçmişten silmek yetmez, mutlaka sıfırlayın. Botun yetkilerini de gözden geçirip gereksiz izinleri kaldırın.

Bot sürekli çöküyor, sebebi ne olabilir?

En sık üç sebep: yakalanmamış promise hatası (unhandled rejection), bellek sızıntısı ve API hız sınırına takılma. Önce logları inceleyin: pm2 logs ya da journalctl -u bot -n 200. Yakalanmamış hataları global bir işleyiciyle yakalayın, bellek kullanımını izleyin ve istek hızınızı Discord’un sınırlarına göre ayarlayın.

Ücretsiz bot hosting kullanmak mantıklı mı?

Test aşamasında olabilir, üretimde değil. Ücretsiz servislerin çoğu belirli bir süre sonra uyku moduna geçer, kaynak kısıtı uygular ya da botu habersiz durdurur. Bir sunucuda barındırdığınızda kaynağı, log erişimini, veritabanını ve yeniden başlatma politikasını siz belirlersiniz. Bot topluluğunuz için kritik hale geldiyse kendi sunucunuza geçin.

Bot güncellemesini kesintisiz nasıl yaparım?

Kodu çekip bağımlılıkları kurduktan sonra süreç yöneticisine yeniden yükleme yaptırın: pm2’de pm2 reload bot, systemd’de sudo systemctl restart discord-bot. Discord botlarında tam sıfır kesinti mümkün değildir çünkü ağ geçidi bağlantısı yeniden kurulur, ancak bu süre birkaç saniyeyi geçmez. Güncelleme öncesi mutlaka yedek alın.

Altyapı ve Sistem Yönetimi — Tüm Rehberler#

  1. DDoS Saldırısı Nedir ve Nasıl Korunulur?
  2. Veri Merkezi (Data Center) Nedir?
  3. Sunucu Kiralarken Nelere Dikkat Edilmeli?
  4. Discord Bot Hosting ve 7/24 Çalıştırma
  5. Sunucu Yedekleme Stratejileri ve 3-2-1 Kuralı
  6. Sunucu Yönetimi İçin Linux Temel Komutları
  7. Sunucu İzleme ve Monitoring Rehberi

Bu rehber Batihost teknik ekibi tarafından hazırlanmış ve tarihinde güncellenmiştir. Eksik veya hatalı bulduğunuz bir bilgi varsa bize bildirin.

Başa dön