Einleitung
In diesem Beitrag erfahren Sie, wie Sie Jekyll als systemd-Dienst auf einem Ubuntu-Server einrichten. Dies ist besonders nützlich, um sicherzustellen, dass Ihre Jekyll-Website immer läuft, selbst nach einem Neustart des Servers.
Voraussetzungen
Bevor Sie beginnen, stellen Sie sicher, dass Sie folgende Voraussetzungen erfüllen:
- Einen Ubuntu-Server, eine VM oder einen LXC-Container
- Ruby und Bundler installiert (siehe Anleitung)
- Ein Jekyll-Projekt, beispielsweise basierend auf dieser Vorlage: jekyll-docs-site @timothystewart6
Konfiguration
Schritt 1: Umgebungsvariable festlegen
Öffnen Sie die .bashrc
oder .bash_profile
Datei in Ihrem Home-Verzeichnis und fügen Sie die folgende Zeile hinzu:
1
export JEKYLL_ENV=production
Schritt 2: Konfiguration laden
Führen Sie den folgenden Befehl aus, um die neue Konfiguration zu laden:
1
source ~/.bashrc
Schritt 3: Gems installieren
Navigieren Sie in Ihr Jekyll-Projektverzeichnis und führen Sie die folgenden Befehle aus, um alle notwendigen Gems mit Bundler zu installieren:
1
2
bundle config set --local path 'vendor/bundle'
bundle install
Dies sorgt dafür, dass alle Gems in einem Unterordner (vendor/bundle
) Ihres Projekts installiert werden.
Schritt 4: systemd-Service-Datei erstellen
Erstellen Sie eine systemd-Service-Datei für Jekyll. Erstellen Sie die Datei /etc/systemd/system/jekyll.service
und fügen Sie den folgenden Inhalt ein:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[Unit]
Description=Jekyll Build
After=network.target
[Service]
Type=simple
User=christian
WorkingDirectory=/home/IHR_BENUTZERNAME/GITHUB_USERNAME.github.io
Environment="BUNDLE_PATH=/home/IHR_BENUTZERNAME/GITHUB_USERNAME.github.io/vendor/bundle"
Environment="GEM_HOME=/home/IHR_BENUTZERNAME/.gem/ruby/3.0.0"
Environment="JEKYLL_ENV=production"
ExecStart=/bin/bash -lc '/home/IHR_BENUTZERNAME/gems/bin/bundle exec /home/IHR_BENUTZERNAME/gems/bin/jekyll build -w'
CPUQuota=20%
[Install]
WantedBy=multi-user.target
Wichtig: Ersetzen Sie IHR_BENUTZERNAME
durch Ihren tatsächlichen Benutzernamen und GITHUB_USERNAME
durch Ihren GitHub-Benutzernamen.
Hinweis: Die Zeile
CPUQuota=20%
sorgt dafür, dass der Dienst maximal 20% der verfügbaren CPU-Zeit verbraucht. Dies ist besonders sinnvoll, wenn Sie den Dienst auf einem Raspberry Pi betreiben, um die Systemressourcen zu schonen.
Schritt 5: Dienst aktivieren und starten
Aktivieren und starten Sie den Dienst mit den folgenden Befehlen:
1
2
sudo systemctl enable jekyll.service
sudo systemctl start jekyll.service
Fehlerbehebung
Falls Sie auf Probleme stoßen, überprüfen Sie bitte:
- Sind alle Pfade korrekt?
- Hat der angegebene Benutzer die notwendigen Berechtigungen?
Bei spezifischen Gem-Problemen kann es hilfreich sein, diese manuell zu installieren oder verschiedene Versionen zu testen. Nutzen Sie außerdem die Logs zur Fehlersuche:
1
sudo journalctl -u jekyll.service -xe
Dienststatus prüfen
Nachdem der Dienst gestartet wurde, kann sein Status mit folgendem Befehl überprüft werden:
1
systemctl status jekyll.service
Beispielausgabe:
1
2
3
4
5
6
7
8
9
10
● jekyll.service - Jekyll Build
Loaded: loaded (/etc/systemd/system/jekyll.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2025-03-17 08:04:20 UTC; 23h ago
Main PID: 116 (bundle)
Tasks: 8 (limit: 76807)
Memory: 153.9M
CPU: 55.466s
CGroup: /system.slice/jekyll.service
├─116 "/home/christian/gems/bin/jekyll build -w"
└─510 /home/christian/Madchristian.github.io/vendor/bundle/ruby/3.0.0/gems/sass-embedded-1.63.6/ext/sas>
Falls der Dienst unerwartet stoppt oder nicht startet, überprüfe die Logs mit:
1
sudo journalctl -u jekyll.service -xe
Zusätzlich sollten etwaige Konflikte beim Generieren der Website behoben werden, wie sie in der Logausgabe erscheinen:
1
2
Conflict: The following destination is shared by multiple files.
The written file may end up with unexpected contents.
Dies kann auftreten, wenn mehrere Dateien denselben Zielpfad haben. Stelle sicher, dass keine doppelten Kategorien oder Tags existieren.
Falls weiterhin Probleme auftreten, könnte ein erneutes Bereinigen und Bauen der Site helfen:
1
2
bundle exec jekyll clean
bundle exec jekyll build
Dieser Abschnitt hilft Nutzern, typische Probleme mit dem systemd-Dienst zu erkennen und zu beheben.
Abschluss
Jetzt sollte Ihre Jekyll-Instanz erfolgreich auf dem Server laufen und nach einem Systemneustart automatisch wieder gestartet werden. Überprüfen Sie den Status des Dienstes jederzeit mit:
1
systemctl status jekyll.service
Mit diesen Schritten haben Sie eine robuste Konfiguration für Ihre Jekyll-Website unter systemd geschaffen.