Python ve Node.js Discord Botunu VDS’e Kurma ve Otomatik Başlatma (systemd, pm2)
Discord botu VDS kurulumu adım adım: Ubuntu'da discord.py ve discord.js, token güvenliği, systemd ve pm2 ile otomatik başlatma, sık hatalar ve çözümleri.

İçindekiler
- Discord botu VDS kurulumu: Adım adım
- Birinci adım: Sunucuya bağlanın ve güncelleyin
- İkinci adım: Bot için ayrı bir kullanıcı oluşturun
- Üçüncü adım: Güvenlik duvarını açın
- Dördüncü adım (Python): discord.py kurulumu
- Dördüncü adım (Node.js): discord.js kurulumu
- Beşinci adım: Tokeni güvenle saklayın
- Otomatik başlatma: systemd ve pm2
- Python botu: systemd servisi
- Node.js botu: pm2
- Botu güncellemek
- Sık karşılaşılan hatalar
- Kurulum sonrası kontrol
- Sıkça sorulan sorular
- Discord botu VDS’e nasıl kurulur?
- systemd mi pm2 mi kullanmalıyım?
- pip install neden “externally-managed-environment” hatası veriyor?
- Botun loglarını nasıl görürüm?
- Sunucu yeniden başlayınca bot açılmıyor, neden?
- Sonuç: Bir kez kurun, unutun
Botunuz bilgisayarınızda sorunsuz çalışıyor ve artık onu 7/24 açık bir sunucuya taşıma zamanı geldi. Sunucuya ilk kez SSH ile bağlandığınızda karşınızda yalnızca yanıp sönen bir imleç var. Bu yazıdaki adımlar, o imleçten 7/24 çalışan ve çöktüğünde kendiliğinden ayağa kalkan bir bota kadar sizi götürecek. Discord botu VDS kurulumu, doğru sırayla yapıldığında yarım saatten kısa sürer.
Rehber, Ubuntu’nun güncel LTS sürümü için yazıldı ve Debian’da da aynı şekilde çalışır. Python botları için discord.py’ı systemd ile, Node.js botları için discord.js’i pm2 ile kuracağız. Henüz bir sunucunuz yoksa Discord botları için VDS paketlerinden birini Ubuntu seçerek sipariş edebilirsiniz.

Discord botu VDS kurulumu: Adım adım
Aşağıdaki ilk beş adım hem Python hem Node.js botları için geçerlidir. Yalnızca dil kurulumu adımında iki yol ayrışır.
Birinci adım: Sunucuya bağlanın ve güncelleyin
Sunucu bilgileriniz teslim e-postasında yer alır. Windows 10 ve 11’de PowerShell’den, macOS ve Linux’ta terminalden bağlanabilirsiniz. Windows’ta grafik bir araç tercih ediyorsanız PuTTY ile SSH bağlantısı da kurabilirsiniz.
ssh root@SUNUCU_IP
apt update && apt upgrade -y
İkinci adım: Bot için ayrı bir kullanıcı oluşturun
Botu root yetkisiyle çalıştırmak, bottaki bir güvenlik açığının tüm sunucuyu ele geçirmeye dönüşmesi demektir. Bu yüzden bota yalnızca kendi klasörüne erişebilen ayrı bir kullanıcı açın:
adduser --disabled-password --gecos "" bot
Üçüncü adım: Güvenlik duvarını açın
Discord botu, Discord’a giden bağlantıyı kendisi kurar. Bu yüzden dışarıdan gelen hiçbir porta ihtiyaç duymaz. Yalnızca SSH’a izin verip güvenlik duvarını etkinleştirmek yeterlidir:
ufw allow OpenSSH
ufw enable
Sunucu güvenliğini bir adım ileri taşımak için SSH anahtarıyla giriş ve parola girişini kapatma gibi ayarları VDS güvenliği için ilk 5 ayar yazımızda anlattık.
Dördüncü adım (Python): discord.py kurulumu
Ubuntu’nun güncel sürümleri, sistem genelinde pip ile paket kurmanıza izin vermez ve “externally-managed-environment” hatası verir. Doğru yöntem, her bot için ayrı bir sanal ortam (venv) oluşturmaktır:
apt install -y python3 python3-venv git
sudo -iu bot
git clone https://github.com/kullanici/discord-botum.git bot
cd bot
python3 -m venv .venv
.venv/bin/pip install -U discord.py python-dotenv
Botunuz yoksa test için şu kısa örneği bot.py olarak kaydedebilirsiniz. Bot açıldığında /ping slash komutunu kaydeder ve gecikmeyi milisaniye olarak yanıtlar:
import os
import discord
from discord.ext import commands
from dotenv import load_dotenv
load_dotenv()
class Bot(commands.Bot):
async def setup_hook(self):
await self.tree.sync()
bot = Bot(command_prefix="!", intents=discord.Intents.default())
@bot.tree.command(name="ping", description="Botun gecikmesini gösterir")
async def ping(interaction: discord.Interaction):
await interaction.response.send_message(f"Pong! {round(bot.latency * 1000)} ms")
bot.run(os.environ["DISCORD_TOKEN"])
Dördüncü adım (Node.js): discord.js kurulumu
Ubuntu depolarındaki Node.js sürümü genellikle eskidir. Güncel LTS sürümünü NodeSource deposundan kurun. Bu komutları root kullanıcısıyla çalıştırın:
curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
apt install -y nodejs git
npm install -g pm2
Ardından bot kullanıcısına geçip projeyi kurun:
sudo -iu bot
git clone https://github.com/kullanici/discord-botum.git bot
cd bot
npm install discord.js dotenv
Test için en sade discord.js botu şöyledir:
require('dotenv').config();
const { Client, Events, GatewayIntentBits } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds] });
client.once(Events.ClientReady, (c) => {
console.log(`${c.user.tag} olarak giriş yapıldı`);
});
client.login(process.env.DISCORD_TOKEN);
Beşinci adım: Tokeni güvenle saklayın
Bot tokeni, botunuzun şifresidir. Koda yazılırsa ve kod bir Git deposuna gönderilirse token sızar. Tokeni bot klasöründeki .env dosyasına yazın ve dosyanın yalnızca bot kullanıcısı tarafından okunabilmesini sağlayın:
echo 'DISCORD_TOKEN=buraya-tokeninizi-yazin' > .env
chmod 600 .env
echo '.env' >> .gitignore
Botu bir kez elle başlatıp çalıştığını doğrulayın: Python botu için .venv/bin/python bot.py, Node.js botu için node index.js. Konsolda giriş mesajını görüyorsanız Ctrl+C ile durdurup son adıma geçin.
Otomatik başlatma: systemd ve pm2
Python botu: systemd servisi
Root kullanıcısına dönün (exit) ve servis dosyasını oluşturun:
nano /etc/systemd/system/discord-bot.service
[Unit]
Description=Discord botu
After=network-online.target
Wants=network-online.target
[Service]
User=bot
WorkingDirectory=/home/bot/bot
ExecStart=/home/bot/bot/.venv/bin/python bot.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Servisi etkinleştirip başlatın ve loglarını izleyin:
systemctl daemon-reload
systemctl enable --now discord-bot
journalctl -u discord-bot -f
Node.js botu: pm2
pm2, Node.js uygulamaları için geliştirilmiş bir süreç yöneticisidir. Bot kullanıcısıyla botu başlatın ve süreç listesini kaydedin:
pm2 start index.js --name discord-bot
pm2 save
pm2 startup systemd -u bot --hp /home/bot
Son komut, ekrana sudo ile başlayan bir satır yazar. O satırı root olarak çalıştırdığınızda pm2 sunucu açılışında otomatik başlar ve kaydettiğiniz botu ayağa kaldırır. Logları pm2 logs discord-bot, kaynak kullanımını pm2 monit ile izleyebilirsiniz.

| Kriter | systemd | pm2 |
|---|---|---|
| Kurulum | Sistemde yerleşik | npm ile kurulur |
| Dil | Her dil | Öncelikle Node.js |
| Loglar | journalctl | pm2 logs, dosya tabanlı |
| İzleme | systemctl status | pm2 monit (canlı panel) |
| Birden fazla bot | Her bot için ayrı servis dosyası | Tek komutla listeleme ve yönetim |
Botu güncellemek
Kodda değişiklik yaptığınızda güncelleme her seferinde aynı üç adımdır: yeni kodu çekin, bağımlılıkları güncelleyin ve botu yeniden başlatın.
cd /home/bot/bot && git pull
sudo systemctl restart discord-bot # systemd
pm2 restart discord-bot # pm2

Sık karşılaşılan hatalar
| Hata | Neden | Çözüm |
|---|---|---|
| externally-managed-environment | Sistem Python’una pip ile kurulum | Sanal ortam (venv) kullanın |
| PrivilegedIntentsRequired / disallowed intents | Kodda açılan ayrıcalıklı intent portalda kapalı | Developer Portal’da ilgili intent’i açın |
| Improper token / 401 | Token hatalı ya da yenilenmiş | .env dosyasındaki tokeni kontrol edin |
| ModuleNotFoundError (yalnızca serviste) | Servis sistem Python’unu kullanıyor | ExecStart’ta venv yolunu kullanın |
| Bot iki kez yanıt veriyor | Aynı token iki yerde çalışıyor | Bilgisayarınızdaki kopyayı durdurun |
Kurulum sonrası kontrol
Discord botu VDS kurulumunu tamamladıktan sonra aşağıdaki maddeleri tek tek doğrulayın.
Bu adımlarla uğraşmak istemiyorsanız ya da bir yerde takıldıysanız, Önem Bilişim Discord VDS müşterilerine bot kurulumu konusunda destek veriyor. Sunucunuz hazır olduğunda destek talebi oluşturmanız yeterli.
İlginizi çekebilir: Discord botu için Linux mu Windows mu?
Sıkça sorulan sorular
Discord botu VDS’e nasıl kurulur?
Sunucuya SSH ile bağlanın, bot için ayrı bir kullanıcı oluşturun ve botunuzun dilini kurun. Python botlarında sanal ortam içinde discord.py, Node.js botlarında discord.js kurulur. Tokeni .env dosyasına yazdıktan sonra botu systemd servisi ya da pm2 süreciyle otomatik başlayacak şekilde tanımlayın.
systemd mi pm2 mi kullanmalıyım?
Python botları için systemd en sade çözümdür, çünkü her Linux sunucuda yerleşik gelir. Node.js botlarında pm2, canlı izleme paneli ve kolay log yönetimiyle öne çıkar. İkisi de botun çöktüğünde yeniden başlamasını ve sunucu açılışında otomatik çalışmasını sağlar.
pip install neden “externally-managed-environment” hatası veriyor?
Ubuntu ve Debian’ın güncel sürümleri, sistem Python’unun bozulmasını önlemek için sistem genelinde pip ile paket kurulumunu engeller. Çözüm, bot klasöründe python3 -m venv .venv ile sanal ortam oluşturmak ve paketleri .venv/bin/pip ile kurmaktır. Servis dosyasında da sanal ortamdaki Python yolunu kullanın.
Botun loglarını nasıl görürüm?
systemd ile çalışan botlarda journalctl -u discord-bot -f komutu logları canlı gösterir. pm2 ile çalışan botlarda pm2 logs discord-bot komutunu kullanın. Hata ayıklarken önce bu loglara bakın; botun neden durduğu çoğu zaman son satırlarda yazar.
Sunucu yeniden başlayınca bot açılmıyor, neden?
systemd kullanıyorsanız servisin enable komutuyla etkinleştirildiğinden emin olun. pm2 kullanıyorsanız pm2 save komutunu çalıştırmamış ya da pm2 startup komutunun ekrana yazdığı satırı root olarak çalıştırmamış olabilirsiniz. İki adımı tamamlayıp sunucuyu yeniden başlatarak test edin.
Sonuç: Bir kez kurun, unutun
Discord botu VDS kurulumu; ayrı bir kullanıcı, sanal ortam, güvenli bir .env dosyası ve bir süreç yöneticisinden ibarettir. Bu yapı bir kez kurulduğunda bot sunucu açılışında kendiliğinden başlar, çöktüğünde yeniden ayağa kalkar ve güncellemeler tek komutla yapılır.
Kuruluma hazır bir sunucuyla başlamak isterseniz Önem Bilişim Discord VDS paketlerini inceleyebilirsiniz. Sunucu yönetimi üzerine diğer rehberlerimizi Önem Bilişim blogunda bulabilirsiniz.
Discord VDS
Kurulum için hazır sunucu, 5–10 dakikada
Ubuntu, Debian ya da Windows Server seçerek sipariş verin; sunucunuz dakikalar içinde hazır. Bot kurulumu için Önem Bilişim ekibinden destek alabilirsiniz.