Docs

Héberger un bot Discord

Mets ton bot discord.js en ligne jour et nuit, son jeton gardé secret, et sa mémoire dans une base Redis ou PostgreSQL.

Un bot Discord est une application comme une autre : une image Docker qui tourne en continu. Il n’a pas besoin d’écouter sur un port, puisqu’il se connecte lui-même à Discord.

1. Le bot

index.js
const { Client, Events, GatewayIntentBits } = require("discord.js");

const client = new Client({ intents: [GatewayIntentBits.Guilds] });

client.once(Events.ClientReady, (ready) => console.log(`Connecté en tant que ${ready.user.tag}`));

for (const signal of ["SIGTERM", "SIGINT"]) {
  process.on(signal, () => client.destroy().then(() => process.exit(0)));
}

client.login(process.env.DISCORD_TOKEN);

Il s’arrête proprement au signal SIGTERM, qu’Arkya envoie avant chaque redémarrage.

2. L’image

Dockerfile
FROM node:22-alpine
WORKDIR /app
ENV NODE_ENV=production
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
USER node
CMD ["node", "index.js"]

3. Créer l’application

Terminal
ark init --app mon-bot

Laisse "env": {} dans arkya.json : le jeton du bot est un secret, il ne va pas dans Git.

4. Poser le jeton

Dans l’espace client, ouvre l’onglet Variables de mon-bot et ajoute DISCORD_TOKEN, avec le jeton du portail développeur de Discord. Marque-la comme secrète.

5. Déployer

Terminal
ark deploy
ark logs mon-bot

Le journal doit afficher « Connecté en tant que… ». Si le bot plante, Arkya le relance tout seul.

Garder une mémoire

Le bot repart de son image à chaque redémarrage. Pour garder des réglages, des niveaux ou des tickets, ajoute une base dans le même projet :

arkya.json
{
  "app": "mon-bot",
  "services": {
    "cache": { "type": "redis" }
  },
  "env": {}
}
Terminal
ark plan --apply

Puis, dans les variables du bot, REDIS_URL=redis://:MOT_DE_PASSE@${mon-bot-cache.URL}. Voir Variables et références.

Ce que ça coûte

Un bot léger tient dans la plus petite taille, 1 vCPU et 1 Go. Il se paie à la minute ; éteint, il ne coûte rien.