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
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
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
ark init --app mon-botLaisse "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
ark deploy
ark logs mon-botLe 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 :
{
"app": "mon-bot",
"services": {
"cache": { "type": "redis" }
},
"env": {}
}ark plan --applyPuis, 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.