Einrichtung des Discord-Bots mit systemd & Watchfiles

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 

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen