📘 Administrator-Handbuch für MeinCMS (Rust Edition)
Willkommen beim offiziellen Administrator-Handbuch für MeinCMS (wissen-ahrensburg.de).
Dieses Handbuch beschreibt die gesamte Architektur, alle Funktionen, Konfigurationsoptionen, Verwaltungswerkzeuge sowie Best Practices für den sicheren Betrieb im Internet.
📋 Inhaltsverzeichnis
- Systemübersicht & Architektur
- Funktionsumfang (Was die Anwendung kann)
- Installation, Deployment & Betrieb
- Konfiguration & Umgebungsvariablen
- Benutzer- & Admin-Verwaltung (meincms_admin)
- Backup, Import & Repair (meincms_backup)
- Sicherheit, Datenschutz & Härtung
- Fehlerbehebung & Wartung
1. Systemübersicht & Architektur
MeinCMS ist als moderner Rust Cargo Workspace aufgebaut. Es besteht aus vier hochperformanten Subsystemen:
flowchart TD
subgraph Cargo Workspace
P["meincms_parser\n(Markdown & MediaWiki Compiler Crate)"]
W["meincms_web\n(Axum 0.7 Async Web Backend)"]
B["meincms_backup\n(YAML/XML Export, Import & Repair CLI)"]
A["meincms_admin\n(Argon2 User & Passwords CLI)"]
end
W --> P
B --> P
A --> P
Die Subsysteme im Detail:
meincms_parser: Compiler-Crate für Markdown und MediaWiki-Syntax mit automatischer Kategorie-Extraktion, XSS-Escaping und C-FFI-Schnittstellen.meincms_web: Async Axum Webserver mit Maud-Templating, Hostname-basiertem Multi-Tenancy (mainvs.doc) und rollenbasierter Authentifizierung.meincms_backup: CLI-Werkzeug für die datensparende Sicherung und Wiederherstellung von Wiki-Inhalten (YAML & XML).meincms_admin: CLI-Werkzeug zur Verwaltung von Administrator-Konten und Argon2id-Passwörtern.
2. Funktionsumfang (Was die Anwendung kann)
✍️ Wiki & Editor
- Duale Syntax-Unterstützung: Artikel können in Markdown oder MediaWiki (WikiText) verfasst werden.
- Dynamische Rhai-Skript-Makros: Admins und Nutzer können eingebettete Rhai-Skripte in Artikeln ausführen, z. B.
{{#rhai: 5 * 10}}oder{{#script: "Hallo " + "Welt"}}. Die Skripte sind durch ein Sandbox-Limit (max. Operations-Tiefe) gegen Endlosschleifen geschützt. - Dynamisches Umschalten: Im Editor lässt sich die Syntax per Dropdown umschalten (
style.display). - Kategorien-System: Automatische Erkennung von
[[kategorie:Name]]im Text oder über Frontmatter-Metadaten. - Versionierung & Historie: Zu jedem Artikel wird bei jeder Änderung eine neue Revisionsversion angelegt. Alte Stände können eingesehen und verglichen werden.
🌐 Multi-Tenancy (Mandantenfähigkeit)
- Automatische Domain-Zuordnung:
wissen-ahrensburg.deoderlocalhost➔ Mandantmain(Haupt-Wiki)doc.wissen-ahrensburg.deoderdoc.localhost➔ Mandantdoc(Technische Dokumentation)
- Strikte Daten-Isolation: Inhalte und Suchen werden in der Datenbank isoliert nach
TenantIdgefiltert.
🔒 Rollenbasierter Schreibschutz (AdminAuth)
- Lesen für alle: Besucher können Artikel, Kategorien und Suchen uneingeschränkt lesen.
- Schreiben nur für Admins: Das Erstellen (
/edit/*slug) und Speichern (POST /save/*slug) von Artikeln erfordert zwingend eine aktive Admin-Sitzung. Bei unangemeldetem Zugriff erfolgt eine automatische Umleitung zum Login-Formular (/login).
3. Installation, Deployment & Betrieb
Voraussetzungen
- Rust Compiler (Version 1.80 oder neuer)
- PostgreSQL (Version 14 oder neuer)
1. Bauen im Release-Modus
cd wissen-ahrensburg.de
cargo build --release
Die fertigen Binärdateien befinden sich anschließend in ./target/release/.
2. Manueller Start
PORT=5000 DATABASE_URL="postgres://postgres:passwort@localhost:5432/meincms" ./target/release/meincms_web
3. Einrichtung als Linux Systemd-Dienst (meincms.service)
Erstelle die Datei /etc/systemd/system/meincms.service:
[Unit]
Description=MeinCMS Rust Web Backend
After=network.target postgresql.service
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/wissen-ahrensburg.de
ExecStart=/var/www/wissen-ahrensburg.de/target/release/meincms_web
Environment="UNIX_SOCKET=/run/meincms/meincms.sock"
Environment="DATABASE_URL=postgres://meincms:SicheresPasswort@/var/run/postgresql/meincms"
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Dienst aktivieren & starten:
sudo systemctl daemon-reload
sudo systemctl enable meincms
sudo systemctl start meincms
4. Reverse Proxy Setup (Caddy oder Nginx mit Let's Encrypt HTTPS)
Option A: Caddy (Empfohlen - automatische SSL-Zertifikate)
/etc/caddy/Caddyfile:
wissen-ahrensburg.de {
reverse_proxy localhost:5000
}
doc.wissen-ahrensburg.de {
reverse_proxy localhost:5000
}
Option B: Nginx
/etc/nginx/sites-available/meincms:
server {
server_name wissen-ahrensburg.de doc.wissen-ahrensburg.de;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
4. Konfiguration & Umgebungsvariablen
Das Verhalten des Webbackends lässt sich über Umgebungsvariablen steuern:
| Variable | Standardwert | Beschreibung |
|---|---|---|
PORT | 5000 | Der HTTP-Port, auf dem der Axum-Webserver lauscht |
DATABASE_URL | (In-Memory Fallback) | PostgreSQL-Verbindungszeichenfolge (postgres://user:pass@host:5432/dbname) |
RUST_LOG | meincms_web=info,tower_http=info | Loglevel für Serverausgaben (debug, info, warn, error) |
5. Benutzer- & Admin-Verwaltung (meincms_admin)
Das Werkzeug meincms_admin dient der Verwaltung aller Administratoren.
Interaktiver Modus
cargo run -p meincms_admin
CLI-Befehle
# 1. Benutzer auflisten
cargo run -p meincms_admin -- list-users
# 2. Neuen Administrator erstellen
cargo run -p meincms_admin -- create-user --username admin@wissen-ahrensburg.de
# 3. Passwort eines Benutzers ändern
cargo run -p meincms_admin -- reset-password --username admin@wissen-ahrensburg.de
🔒 Sicherheitshinweis: Passwörter werden mit Argon2id gehasht und in
config/users.jsonbzw. in der Datenbank abgelegt.
6. Backup, Import & Repair (meincms_backup)
Das Werkzeug meincms_backup übernimmt den gesicherten Im- und Export sowie die Reparatur aller Inhalte.
💾 Backup Exportieren
# Exportiert den aktuellen Mandanten als YAML-Datei
cargo run -p meincms_backup -- export mein_backup.yaml
# Exportiert als XML-Datei
cargo run -p meincms_backup -- export mein_backup.xml
# Globaler Export aller Mandanten
cargo run -p meincms_backup -- export full_backup.yaml --full
📥 Backup Importieren
cargo run -p meincms_backup -- import meine_sicherung.yaml
Hinweis: Das Import-Tool erkennt automatisch, ob es sich um ein einzelnes Backup-Objekt oder ein Array von Artikeln handelt und unterstützt Abwärtskompatibilität für alte PascalCase-Formate.
🔧 Repair (HTML Regenerierung)
Um Speicherplatz zu sparen, speichert MeinCMS kein generiertes HTML in Backup-Dateien. Nach einem Import oder nach Änderungen am Parser muss der Repair-Befehl ausgeführt werden:
cargo run -p meincms_backup -- repair
7. Sicherheit, Datenschutz & Härtung
- Dateisystem-Schutz:
- Zugriffe auf verdeckte Dateien (
/.gitignore,/.env) oder Konfigurationspfade (/config/users.json) werden vom Webserver mit HTTP 403 Forbidden blockiert.
- Zugriffe auf verdeckte Dateien (
- Sicherheits-Header:
Cache-Control: no-store, no-cache, must-revalidate(Verhindert Zwischenspeicherung sensibler Seiten).X-Frame-Options: DENY(Schutz vor Clickjacking).X-Content-Type-Options: nosniff(Schutz vor MIME-Sniffing).
- Passwort-Sicherheit:
- Kein Klartext-Passwort im Quellcode oder in Repositories.
- Argon2id Hashing mit Salt.
8. Fehlerbehebung & Wartung
Problem: Admin-Passwort vergessen
- Führe den Admin-CLI Befehl aus:
cargo run -p meincms_admin -- reset-password --username admin@wissen-ahrensburg.de - Falls
config/users.jsonbeschädigt ist, lösche die Datei:rm -f config/users.json. Beim nächsten Aufruf vonmeincms_adminwird ein neuer Admin angelegt.
Problem: Port bereits belegt (AddrInUse)
Wenn der Port (z. B. 5000) belegt ist, wähle einen anderen Port:
PORT=5005 cargo run -p meincms_web
Problem: HTML-Seiten zeigen leere Abschnitte
Führe den Repair-Befehl aus, um die HTML-Ausgabe aus dem Quelltext neu zu generieren:
cargo run -p meincms_backup -- repair
Stand: Juli 2026 • Lizenz: AGPL-3.0 • MeinCMS Rust Workspace