📝 gblog — Ein schlankes, selbstgehostetes Blog-System in Go
gblog ist ein minimalistisches, performantes und extrem leichtgewichtiges Blog-System, das vollständig in Go geschrieben ist. Es benötigt keine externen Abhängigkeiten und keine Datenbank-Infrastruktur (wie MySQL oder PostgreSQL), da alle Beiträge direkt als strukturierte JSON-Dateien im Dateisystem abgelegt werden.
Das Projekt unterstützt Out-of-the-Box HTTPS via TLS-Zertifikate (z. B. von Let's Encrypt) oder kann unverschlüsselt betrieben werden.
🚀 Features
- Zero Dependencies: Baut ausschließlich auf der Go-Standardbibliothek auf. Extrem schnelles Kompilieren und minimale Binary-Größe.
- No-DB Datenspeicher: Beiträge werden als JSON-Dateien unter
data/gespeichert — ideal für Backups und einfache Migrationen. - WYSIWYG-Editor: Komfortables Schreiben und Bearbeiten direkt im Browser mit dem integrierten Quill-Editor.
- Bilder-Upload: Lokaler Upload von Titelbildern direkt über die Admin-Oberfläche (gespeichert unter
uploads/). - Sicherer Admin-Bereich: Schutz der administrativen Funktionen (Erstellen, Bearbeiten, Löschen) durch HTTP Basic Authentication.
- Integriertes Web-Admin-Panel: Sichere visuelle Konfiguration aller Blog-Einstellungen (Titel, URL, Port, Theme, Layout, Passwörter, TLS-Zertifikate) im Browser unter
/admin/settings. - Tagging & Suchfunktion: Beliebige Tags für Beiträge definieren. Schnelle Keyword-Suche über Titel, Inhalt und Tags sowie eine dynamische Tag-Cloud in der Sidebar zur einfachen Filterung.
- Integriertes TLS/HTTPS: Direktes Ausliefern über HTTPS unter Verwendung lokaler SSL-Zertifikate.
- Konfigurierbare Themes: Support für 7 verschiedene Design-Themes (Default, Nordic, Dracula, Forest, Sunset, Rainbow, Monochrome) mit automatischem System-Darkmode oder manuellem Switch.
- Flexible Layouts: Wahl zwischen 3 handlichen Layout-Varianten (Sidebar rechts, Sidebar links, Einspaltig/Single-Column).
🛠️ Systemarchitektur
Die Architektur von gblog ist bewusst flach und wartungsarm gehalten. Die Einstellungen werden im laufenden Betrieb über das Admin-Panel geändert und direkt in die config.json zurückgeschrieben:
graph TD
Client[Webbrowser] <-->|HTTPS / HTTP| GoServer[gblog Server Go]
GoServer <-->|Dateisystem| JSONDB[(JSON-Dateien in ./data)]
GoServer <-->|Dateisystem| Uploads[(Bilder in ./uploads)]
GoServer <-->|Dateisystem| Themes[(Themes in ./themes)]
GoServer <-->|Dateisystem| Layouts[(Layouts in ./layouts)]
GoServer <-->|Dateisystem| ConfigJSON[(Konfiguration in config.json)]
📂 Projektstruktur
gblog/
├── data/ # Speicherort für Blog-Beiträge (JSON)
├── uploads/ # Hochgeladene Bilder
├── themes/ # Stylesheets für die Design-Themes (.css)
├── layouts/ # HTML-Strukturen für die Layouts (.html)
├── config.json # Aktive Konfiguration (Laufzeit-beschreibbar)
├── gblog.go # Hauptprogrammcode (Server & Templates)
├── go.mod # Go-Moduldefinition
├── go.sum # Go-Prüfsummen (leer, da keine externen Go-Dependencies)
├── .gitignore # Git-Ausschlussregeln
└── README.md # Diese Dokumentation
⚙️ Konfiguration und Sicherheit
Die Konfiguration erfolgt über eine JSON-Datei namens config.json. Wird diese beim ersten Start nicht gefunden, wird automatisch eine Standarddatei mit folgendem Inhalt generiert:
{
"url": "http://localhost",
"port": ":8899",
"tls_cert_file": "",
"tls_key_file": "",
"username": "admin",
"password": "123qwe",
"title": "gblog",
"theme": "default"
}
🎨 Design-Themes
Über den Parameter "theme" in der config.json kannst du das Blog-Theme anpassen. Folgende handverlesene Themes stehen zur Auswahl:
default: Modernes, helles/dunkles Design mit blauen Akzenten (basiert auf Slate-Farben).nordic: Kaltes, elegantes Arktis-Design (Nord-Palette) mit eisblauen Tönen.dracula: Dunkles Cyberpunk-Theme mit violetten und pinken Neonfarben.forest: Natürliches, erdiges Theme mit Waldgrün und Sandfarben.sunset: Warmes, sonnenuntergangsartiges Theme mit Rose- und Orangetönen.rainbow: Farbenfrohes Theme mit lebendigen violetten, magentafarbenen und cyanfarbenen Verläufen.black and white(odermonochrome): Kontrastreiches, minimalistisches Design im modernen Zeitungs-Stil.
Jedes Theme (außer das standardmäßig rein dunkle dracula) unterstützt vollautomatisch den System-Dark-Mode sowie eine manuelle Umschaltung über das Sonnen-/Mond-Symbol im Header.
📐 Layout-Varianten
Über den Parameter "layout" in der config.json kannst du das Seitenlayout anpassen. Folgende handliche Layouts stehen zur Auswahl:
sidebar-right: Standard-Zweispaltiges Layout mit der Sidebar auf der rechten Seite.sidebar-left: Zweispaltiges Layout mit der Sidebar auf der linken Seite.single-column: Minimalistisches, einspaltiges Layout für fokussiertes Lesen (die Sidebar-Widgets werden als Footer-Bereich am Ende der Seite dargestellt).
Du kannst eine benutzerdefinierte Konfigurationsdatei auch über den CLI-Parameter -c angeben (z. B. go run gblog.go -c /pfad/zu/mein_config.json).
Important
Sicherheitshinweis: Die Datei
config.jsonenthält sensible Anmeldedaten und ist standardmäßig in der.gitignoreeingetragen, um ein unbeabsichtigtes Einchecken in Git zu verhindern. Ändere das Standardpasswortpasswordvor dem ersten Start auf einem öffentlich erreichbaren Server!
📦 Installation und Ausführung eines Releases
Wenn du das Projekt nicht selbst kompilieren möchtest, kannst du ein fertiges Release direkt herunterladen und starten.
1. Release herunterladen
Lade das passende Archiv für dein Betriebssystem von der Releases-Seite herunter:
gblog-v1.1.0-linux-amd64.zip(für standard Linux Server)gblog-v1.1.0-darwin-arm64.zip(für macOS Apple Silicon)- usw.
2. Entpacken und Konfigurieren
Entpacke das ZIP-Archiv auf deinem Server:
unzip gblog-v1.1.0-linux-amd64.zip
cd linux-amd64
Erstelle eine config.json basierend auf der Vorlage config.example.json und passe ggf. den Port, deine Anmeldedaten, das Theme und das Layout an:
cp config.example.json config.json
3. Server starten
Starte das ausführbare Binary direkt:
# Auf Linux/macOS:
chmod +x gblog
./gblog
# Auf Windows:
gblog.exe
Das Blog läuft anschließend standardmäßig auf http://localhost:8899. Du kannst Themes in themes/ und Layouts in layouts/ direkt anpassen — Änderungen werden bei einem Browser-Refresh sofort geladen.
💻 Lokale Entwicklung und Ausführung
Voraussetzungen
Installiere Go (Version 1.26 oder neuer wird empfohlen).
1. Repository klonen und vorbereiten
Falls noch nicht geschehen, klone das Repository und wechsle in das Verzeichnis:
git clone http://git.fhi.mpg.de:3000/mike/gblog.git
cd gblog
2. Anwendung starten
Starte das Blog mit folgendem Befehl:
go run gblog.go
- HTTP-Modus (Lokale Entwicklung): Wenn in der
config.jsondie Zertifikatspfadetls_cert_fileodertls_key_fileleer gelassen werden (z. B.""), startet der Server automatisch im unverschlüsselten HTTP-Modus. - HTTPS-Modus (Produktion): Sind beide Zertifikatspfade ausgefüllt und gültig, startet der Server im sicheren HTTPS-Modus. (Port und URL können direkt in der
config.jsonangepasst werden).
🌐 Deployment (Produktion mit HTTPS)
Für den echten Betrieb unter https://gblog.fhi.mpg.de benötigt der Server Lesezugriff auf die konfigurierten SSL-Zertifikate.
1. Anwendung kompilieren
Du kannst das Projekt manuell kompilieren:
go build -o bin/gblog gblog.go
🔄 Automatisches Kompilieren & Versionierung (Multi-Plattform)
Es wurde ein Skript build.sh bereitgestellt, das bei jedem Aufruf die Patch-Version in der gblog.go automatisch um 0.0.1 erhöht (z. B. 1.0.0 -> 1.0.1) und die ausführbaren Binärdateien für alle gängigen Architekturen (Linux, macOS, Windows) im Ordner bin/ ablegt.
Führe dazu einfach Folgendes aus:
./build.sh
2. Zertifikate hinterlegen
Stelle sicher, dass die TLS-Zertifikate an den in gblog.go definierten Pfaden liegen oder passe die Pfade in der Datei an.
3. HTTPS-Server starten
Starte das kompilierte Binary (standardmäßig auf Port 443 mit HTTPS):
./bin/gblog
🔒 Admin-Funktionen nutzen
Um administrative Aufgaben auszuführen, klicke im Menü auf die entsprechenden Links:
- New Post: Erstellt einen neuen Blog-Beitrag unter Verwendung des Quill-Editors.
- Einstellungen: Öffnet das Web-Admin-Panel unter
/admin/settings. Hier kannst du den Blog-Titel, die URL, das aktive Theme, das Seitenlayout, die Portbindung, die Anmeldedaten sowie TLS-Zertifikate ändern. Hinweis: Änderungen an Port oder TLS-Zertifikaten erfordern einen Server-Neustart, während Themes/Layouts/Titel sofort angewendet werden. - Bearbeiten / Löschen: Direkt unter jedem Beitrag, um Inhalte anzupassen oder zu entfernen.
Der Browser fordert dich bei der ersten administrativen Aktion zur Anmeldung auf (HTTP Basic Auth):
- Standard-Benutzername:
admin - Standard-Passwort:
123qwe(Wir empfehlen dringend, dieses direkt im Einstellungs-Panel zu ändern!)
📄 Lizenz
Dieses Projekt ist lizenziert unter der MIT-Lizenz.