OffshoreVps
Инструкции7 окт. 20265 мин чтенияАвтор: команда OffshoreVps

Как разместить Discord-бота на VPS

Создайте Discord-бота, разверните бота на discord.js на Linux VPS и поддерживайте его работу через systemd, с советами по токену и intents.

Discord-бот подключается к шлюзу Discord и остаётся на связи, поэтому ему нужна всегда включённая машина. Небольшой VPS недорог, всегда в сети и не зависит от вашего домашнего интернета. В этом руководстве разворачивается бот на Node.js с discord.js, а его работа поддерживается через systemd.

Окно терминала на VPS с командами для размещения Discord-бота, начиная с «curl -fsSL https://deb.nodesource.com/setup_22.x»
Примерно такие команды вы будете выполнять на своём сервере в этом руководстве.

Какой размер VPS?

1 vCPU и 1–2 ГБ RAM достаточно для большинства ботов. Более крупным ботам, которые кешируют много серверов или обрабатывают аудио, нужно больше. Тарифы смотрите на странице хостинга для Discord-ботов.

Шаг 1: создайте бота в Discord

  1. Откройте Discord Developer Portal и создайте новое приложение.
  2. Добавьте Bot, скопируйте его токен и держите его в секрете.
  3. В разделе OAuth2 создайте ссылку-приглашение с областями bot и applications.commands и добавьте бота на свой сервер.

Шаг 2: установите Node.js

curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt install -y nodejs
node -v
sudo adduser --disabled-password --gecos "" discord
Шаги этого руководства по порядку: 1. Какой размер VPS нужен?; 2. создайте бота в Discord; 3. установите Node.js; 4. не храните токен в коде; 5. запустите через systemd; 6. Хорошие привычки
Шаги этого руководства по порядку.

Шаг 3: напишите бота

sudo -iu discord
mkdir ~/bot && cd ~/bot
npm init -y
npm install discord.js
// index.js
const { Client, GatewayIntentBits } = require('discord.js');
const client = new Client({ intents: [GatewayIntentBits.Guilds] });

client.once('ready', () => console.log('Logged in as ' + client.user.tag));
client.on('interactionCreate', async (i) => {
  if (i.isChatInputCommand() && i.commandName === 'ping') await i.reply('Pong!');
});

client.login(process.env.DISCORD_TOKEN);

Один раз зарегистрируйте слеш-команду /ping способом, описанным в руководстве по discord.js.

Шаг 4: не храните токен в коде

echo "DISCORD_TOKEN=your-token-here" > ~/bot/.env
chmod 600 ~/bot/.env

Шаг 5: запустите через systemd

[Unit]
Description=Discord bot
After=network-online.target

[Service]
User=discord
WorkingDirectory=/home/discord/bot
EnvironmentFile=/home/discord/bot/.env
ExecStart=/usr/bin/node index.js
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now discordbot
journalctl -u discordbot -f

Назовите файл /etc/systemd/system/discordbot.service.

Хорошие привычки

  • Используйте только нужные вам intents. Привилегированные intents нужно включать в портале.
  • Если токен когда-либо утечёт, немедленно сбросьте его в портале.
  • Перезапуск при сбое настроен выше. Добавьте мониторинг, если бот важен для сообщества.