Discord-Bot vorbereiten und hochladen¶
Dein Discord-Bot-Dienst führt den Code aus, den du hochlädst. Zaroz stellt die Laufzeitumgebung, den persistenten Speicher und die Prozessüberwachung bereit, die deinen Bot online hält; du lieferst die Quelldateien deines Bots. Diese Seite zeigt dir, was bei jedem Start passiert, wohin deine Dateien gehören und was sich zwischen den Laufzeiten Node.js, Python, Bun, Deno, Java und Sonstige unterscheidet.
So läuft ein Start ab¶
Jedes Mal, wenn dein Bot startet (der erste Start, ein Neustart nach einem Absturz oder eine erneute Bereitstellung), macht der Container dieselben drei Dinge, alle im Speicherordner deines Bots:
- In den Speicherordner wechseln. Dort liegen deine hochgeladenen Dateien, und er ist das Arbeitsverzeichnis für alles Weitere.
- Den Installationsschritt deiner Laufzeit ausführen (zum Beispiel
npm installbei Node.js). Manche Laufzeiten haben keinen Installationsschritt; siehe Was bei welcher Laufzeit ausgeführt wird. - Deinen Startbefehl ausführen (zum Beispiel
node index.js). Das ist der Prozess, der weiterläuft und sich mit Discord verbindet.
Wenn der Prozess endet, startet der Container ihn neu und der Zyklus beginnt von vorn. Deshalb zeigt sich eine defekte Abhängigkeit oder ein falscher Startbefehl als Absturzschleife und nicht als einmaliger Fehler.
Wohin deine Dateien gehören¶
Deine Dateien müssen im Stammverzeichnis liegen, nicht in einem Unterordner.
Öffne den Tab Dateien deines Dienstes, um sie über den Browser hochzuladen, oder verbinde dich per SFTP mit den dort angezeigten Zugangsdaten. In beiden Fällen ist das Stammverzeichnis deines Bot-Speichers /, im Dateimanager als / Home dargestellt. Dein Aufbau muss so aussehen:
/ ← das Stammverzeichnis, angezeigt als "/ Home"
├── index.js ← deine Startdatei, direkt im Stammverzeichnis
├── package.json
├── package-lock.json
└── src/
└── ...
Warum du auch /data siehst
Im Container ist derselbe Ordner unter /data eingebunden, daher zeigen Logzeilen und Fehlermeldungen deines Bots oft Pfade wie /data/index.js. Es ist derselbe Ort: Das Stammverzeichnis / im Dateien-Tab ist /data im Container. Lade nach / hoch, und dein Bot liest es als /data.
Verschachtele dein Projekt nicht in einem Unterordner
Der Installationsschritt und der Startbefehl laufen im Stammverzeichnis deines Speichers. Landen deine Dateien eine Ebene tiefer, zum Beispiel /mein-bot/index.js, läuft der Startbefehl node index.js im Stammverzeichnis, findet nichts, und der Bot gerät in eine Absturzschleife.
Das ist eines der häufigsten Probleme, die wir sehen, und es passiert meist, wenn ein .zip in einen Ordner mit dem Projektnamen entpackt wird. Öffne in diesem Fall den entpackten Ordner im Tab Dateien, markiere den gesamten Inhalt und verschiebe ihn eine Ebene nach oben, sodass die Dateien direkt in / liegen.
Ein Zip hochladen
Du kannst ein .zip hochladen und es im Tab Dateien entpacken. Prüfe danach, ob index.js (oder deine Startdatei) im Stammverzeichnis liegt und nicht in einem verschachtelten Ordner. Lade node_modules/ nicht mit hoch: Es wird auf dem Server neu installiert und verlangsamt den Upload nur.
Was bei welcher Laufzeit ausgeführt wird¶
Du hast während der Einrichtung eine Laufzeit gewählt. Sie bestimmt das Basis-Image, den Installationsschritt und den Standard-Startbefehl. Die aktuelle Laufzeit und den Startbefehl kannst du jederzeit im Tab Konfiguration einsehen und ändern.
- Installationsschritt:
npm install --if-present(wird übersprungen, wenn keinepackage.jsonvorhanden ist). - Standard-Startbefehl:
node index.js. - Abhängigkeiten stammen aus deiner
package.json. Lege einepackage-lock.jsonbei, damit Installationen reproduzierbar sind. - Gängige alternative Startbefehle:
npm start,node bot.js,node src/index.js.
- Installationsschritt:
pip install ., wenn einepyproject.tomlvorhanden ist, sonstpip install -r requirements.txt. - Standard-Startbefehl:
python main.py. - Liste alle Abhängigkeiten mit festen Versionen in der
requirements.txtauf. Derpip-Cache liegt auf deinem Volume, sodass unveränderte Abhängigkeiten beim nächsten Start nicht erneut heruntergeladen werden. - Gängige alternative Startbefehle:
python bot.py,python -m bot.
- Installationsschritt:
bun install --production. - Standard-Startbefehl:
bun run index.js. - Abhängigkeiten stammen aus deiner
package.json. - Gängige alternative Startbefehle:
bun start,bun run src/index.ts.
- Installationsschritt: keiner. Deno lädt deine Imports beim ersten Lauf herunter und legt sie im Cache ab.
- Standard-Startbefehl:
deno run --allow-all main.ts. --allow-allist der bequeme Standard. Schränke ihn ein (zum Beispiel--allow-net --allow-env), sobald du weißt, welche Berechtigungen dein Bot wirklich braucht.
- Installationsschritt: keiner. Auf dem Server gibt es keinen Build-Schritt, lade daher eine fertig gebaute
.jarhoch. - Standard-Startbefehl:
java -jar bot.jar. - Benenne deine jar entweder in
bot.jarum oder passe den Startbefehl im Tab Konfiguration an deinen Dateinamen an, zum Beispieljava -jar mein-bot-1.0.jar.
- Installationsschritt: keiner automatisch. Wir machen
start.shausführbar und starten sie. - Standard-Startbefehl:
./start.sh. - Du erhältst eine einfache Shell: Alpine beim leichtgewichtigen Image, Debian beim Standard-Image. Installiere alles Nötige aus deinem Skript heraus, mit
apkunter Alpine oderapt-getunter Debian.
Versionen der Laufzeiten
Die Hauptversionen sind fest vorgegeben: Node 22, Python 3.13, Java 21 sowie die aktuellen Bun-/Deno-Versionen. Die Kompatibilitätswahl (Leichtgewichtig oder Standard) ändert die Betriebssystem-Basis, nicht die Sprachversion. Unter Die richtige Kompatibilität wählen erfährst du, wann Standard sinnvoll ist.
Den Startbefehl wählen¶
Bei der Einrichtung wählst du entweder eine der Vorlagen für deine Laufzeit oder gibst einen eigenen Befehl ein. Wenn du den Standard beibehalten hast und deine Startdatei anders heißt, startet der Bot nicht.
Um ihn später zu ändern, öffne den Tab Konfiguration, passe den Startbefehl an und starte neu. Der neue Befehl greift beim nächsten Start.
Der Startbefehl wird von einer Shell im Stammverzeichnis deines Speichers ausgeführt, gewöhnliche Shell-Syntax funktioniert also. Beschränke ihn auf einen einzelnen Vordergrundprozess, der weiterläuft: Schicke ihn nicht mit & in den Hintergrund, sonst hält der Container den Bot für beendet und startet ihn neu.
Halte dein Bot-Token sicher¶
Dein Bot-Token ist ein Passwort. Wer es besitzt, kann deinen Bot steuern.
- Schreibe das Token niemals fest in eine Datei, die du in Git einchecken oder in einem Support-Ticket teilen könntest.
- Lies es aus einer Umgebungsvariablen oder einer Konfigurationsdatei, die auf dem Server bleibt.
- Wenn ein Token offengelegt wurde, setze es sofort im Discord Developer Portal unter Bot → Reset Token zurück und aktualisiere es auf dem Server.
Füge dein Token nicht in Chats oder Screenshots ein
Der Support wird dich nie nach deinem Bot-Token fragen. Wenn du Hilfe brauchst, beschreibe stattdessen den Fehler aus dem Tab Konsole: Das Token muss dabei nicht enthalten sein.
Was einen Neustart übersteht¶
Alles in deinem Speicherordner ist dauerhaft. Es übersteht Neustarts, Absturzwiederherstellungen und erneute Bereitstellungen. Dazu gehören:
- Deine hochgeladenen Quelldateien.
- Installierte Abhängigkeiten (
node_modules/, derpip-Cache, Denos Modul-Cache). - Alle Dateien, die dein Bot schreibt, etwa eine SQLite-Datenbank oder eine JSON-Konfiguration.
Da installierte Abhängigkeiten erhalten bleiben, kann ein Start, der auf halbem Weg fehlschlägt, ein beschädigtes node_modules/ (oder __pycache__/, eine unvollständige virtuelle Umgebung und Ähnliches) hinterlassen. Wenn ein Bot nach dem Beheben der eigentlichen Ursache weiterhin an der Installation scheitert:
- Öffne den Tab Dateien.
- Lösche
node_modules/(oder das entsprechende beschädigte Verzeichnis). - Starte neu. Der Installationsschritt baut es von Grund auf neu auf.
Beim Start zusehen¶
Öffne den Tab Konsole, um einen Start in Echtzeit zu verfolgen. Du siehst den Installationsschritt, danach deinen Startbefehl und anschließend die Logausgaben deines Bots. Wenn etwas schiefgeht, steht der Fehler hier: ein fehlendes Modul, ein Syntaxfehler, ein ungültiges Token oder ein Startbefehl, der auf eine nicht vorhandene Datei zeigt.
Behebe das Problem in deinen Dateien, starte neu, und der Container übernimmt die Änderung beim nächsten Start.
Nächste Schritte¶
- Die richtige Kompatibilität wählen: wann Leichtgewichtig nicht ausreicht und wie du wechselst.
- Eine Minecraft-Bestellung über Discord überwachen: ein ausgearbeiteter Beispiel-Bot mit der Zaroz-API.