In dieser Dokumentation wird beschrieben, wie man einen Discord-Bot auf einem Linux-Server laufen lässt, ihn gleichzeitig mit Watchfiles überwacht, sodass bei Änderungen am Code der Prozess neu gestartet wird. Die Einrichtung eines Code-Servers für genau diese Zwecke wird auch behandelt.
Beginn der Doku: 24.04.2025
Abschluss der Doku: –
Dokumentation ist: in bearbeitung
Ersteller: Jack-Mike Säring Auszubildender für Fachinformatik
1. Einleitung
Das Projekt entstand aus einer Laune heraus, was auch der Grund dafür ist, dass die Schritte teils chaotisch oder nicht fortlaufend sind.
Der Anfangspunkt beginnt damit, einen Discord-Bot permanent online agieren zu lassen, ohne ihn dafür in der Entwicklungsumgebung per CLI zu starten.
Das führte direkt zu Beginn zu Problemen, denn wenn man es einfach über Systemd als Exec laufen lässt, müsste man ihn manuell installieren, was für den Anwender Schwierigkeiten bringt.
Die Lösung der ganzen Sache war, eine Code-Server aufzusetzen und den Code darüber zu editieren, gleichzeitig scannt „Watch Files“ nach Änderung im Code, um den Discord-Bot Prozess bei Änderungen automatisch neu zu starten.
Alle Schritte und Kniffe werden in der Dokumentation zusammengefasst.
Wichtig zu beachten ist, dass ich einen Webserver Caddy benutzte, da er SSL-Zertifikate direkt selber unterzeichnet und die Domainvergabe deutlich vereinfacht, solltest du einen anderen Dienst nutzen wie z.B Nginx oder Apache ist der Setup des Code-Server ein anderer.
1.1 Voraussetzungen
- Linux Server (Ubuntu) → Root access erforderlich
- GitHub Account
- Basiswissen in Bash
- Internetverbindung
- Discord-Bot
- Caddy installiert
- Gemietet oder eigene Domain
2. Vorbereitung
Zu Beginn stellen wir sicher, dass wir keine Kompromittierungsmöglichkeit für Angreifer bilden. Wir erstellen einen neuen Benutzer für den Discord-bot und einen SSH-Key (login per Passwort wird nicht empfohlen ist aber möglich)
Zuerst erstellen wir den Nutzer der den Bot verwalten soll:
sudo adduser beispielbot |
Der Computer der darauf Zugreifen will erstellt einen neuen SSH-key mit:
ssh-keygen -t ed25519 -C „hierkommst_deineEMAIL_rein“ |
Nach der Erstellung kopieren sie den Inhalt der eben erstellen datei ~/.ssh/id_ed25519.pub
Melden Sie sich auf dem Linux-Server an:
sudo -u discordbot mkdir /home/discordbot/.ssh sudo -u discordbot nano /home/discordbot/.ssh/authorized_keys |
Hier kopieren wir den Inhalt von id_ed25519.pub rein. Speicher danach die Datei ab.
Als letztes setzen wir noch die rechte so, dass nur noch der Root Access drauf kommt.
sudo chmod 700 /home/discordbot/.ssh sudo chmod 600 /home/discordbot/.ssh/authorized_keys |
3. Code-Server Setup
Zuerst laden wir die Anwendung mittels “curl” herunter.
curl -fsSL https://code-server.dev/install.sh | sh |
In der Theorie kann der service jetzt mit dem Befehl:
code-server –auth password |
gestartet werden. Was jedoch nicht zu empfehlen ist, da die Anwendung dann auf dem Benutzer ausgeführt wird. Code-Server hat eine Passwortfunktion, bei dem beim Start automatisch ein zufälliges Passwort erstellt wird. Das finden man unter
/home/beispielbot/.config/code-server/config.yaml. |
3.1 ExecStart für Code-Server
Code-Server muss im Moment noch durch die Commandline gestartet werden, was die Operation dem Nutzer einschränkt, um das zu verhindern, erstellen wir für den Code-Server einen Service.
Logge dich als Root ein und führe folgenden Command aus:
sudo nano /etc/systemd/system/code-server.service |
Füge diesen Code in die Datei ein und Speichere.
[Unit] Description=Code Server (VS Code im Browser) After=network.target [Service] Type=simple User=beispielbot WorkingDirectory=/home/discordbot ExecStart=/usr/bin/code-server –bind-addr 127.0.0.1:8081 Restart=always [Install] WantedBy=multi-user.target |
3.2 Erklärung der Unit-Datei
[Unit] |
Enthält allgemeine Informationen über den Dienst
Description=Code Server (VS Code im Browser) |
Gibt eine Kurze beschreibung des Dienstes an (keine Form)
After=network.target |
Gibt an, auf welche Anwendung gewartet werden soll, bevor der Dienst gestartet wird.
In unserem Fall wartet der Dienst bis eine Netzwerkverbindung steht.
[Service] |
Hier wird dem Dienst erklärt, welche Parameter der Dienst hat und wie er gestartet werden soll.
Type=simple |
Hier wird erklärt, dass die Anwendung ein einfacher Prozess sein solle ohne forks oder mehrere Prozesse
User=beispielbot |
Von Welchem Nutzer die Anwendung ausgeführt werden soll
WorkingDirectory=/home/beispielbot |
Das ist das Arbeitsverzeichnis, in dem der Dienst ausgeführt wird. Es bestimmt, wo der Dienst startet und wo er z. B. Logs oder temporäre Dateien speichern.
ExecStart=/usr/bin/code-server –bind-addr 127.0.0.1:8081 |
Hier steht der Startbefehl für den Dienst. Mit “–bind-addr 127.0.0.1:8081” wird gesagt:
Höre nur lokal (127.0.0.1) auf Port 8081.
Das bedeutet, man kann nur vom selben Rechner aus darauf zugreifen (Wir richten später einen Reverse-Proxy in Caddy ein.).
Restart=always |
Der Service soll sich nach Beendigung oder Absturz selbst neu starten.
[Install] |
Bestimmt, wann und wie der Dienst beim Systemstart aktiviert wird.
WantedBy=multi-user.target |
Der Dienst soll beim Hochfahren automatisch starten, wenn das System im Multi-user ist (Standard Linux server ohne GUI)
3.3 Start des Service
Nach der Speichern der Datei müssen wir den Dienst noch starten.
Das machen wir mit folgenden Commands:
sudo systemctl daemon-reexec sudo systemctl enable –now code-server |
mit dem Command unten checken wir den Status, um sicherzugehen, dass der Dienst nun auch läuft:
sudo systemctl status code-server |
4. Caddy Konfigurieren
Im Zuge der Sicherheit werden wir für den Login auf der Seite ein zusätzliches Login für die Website einrichten, da das Passwort vom Code-Server als Klartext in der Config steht.
Zuerst Hashen wir ein Passwort mit caddy:
caddy hash-password |
Den kopieren wir.
also nächstes rufen wir unsere Caddy-Config auf mit
sudo nano etc/caddy/Caddyfile |
hier fügen wir folgende Zeilen ein
bot.beispieldomain.de { reverse_proxy 127.0.0.1:8081 basicauth / { loginname <hash> } } |
Bedenke dabei, dass der html Port in Caddy schon gesetzt sein muss.
Danach wieder speichern und den Caddy Dienst mit folgendem Command neu starten.
sudo systemctl reload caddy |
Jetzt kann man sich auf der Website https://bot.beispieldomain.de
einloggen. Das tun wir jetzt auch
5. Setup in VSCode
Schließen Sie den Einführungsprozess in VSCode ab und öffnen Sie das Terminal.
Loggen sie sich als beispielbot ein, wenn nötig.
Als erstes erstellen wir eine neue „Working-Directory“, in der wir unsere Bot erstellen.
Am besten ist es, direkt eine Repo zu klonen, was wir in unserem Fall auch tun.
5.1