| node | ||
| php | ||
| .gitignore | ||
| LICENSE | ||
| README.md | ||
Gemeindebrief-Server
Ein Node.js- oder PHP-basierter Webserver zur Verwaltung und Bereitstellung von Gemeindebriefen (Pfarrbriefen) als PDF-Archiv.
Features
- 📄 PDF-Upload und -Verwaltung über Admin-Interface
- 📅 Monatszuordnung – PDFs können mehreren Monaten zugeordnet werden
- 🔒 Sicherer Admin-Bereich mit Login und Session-Management
- 📚 Archiv-Ansicht – chronologische Übersicht nach Jahren
- 🔗 Direkte Links zu aktuellen und vergangenen Ausgaben
- 🛡️ Sicherheitsfeatures – Rate Limiting, Helmet, Compression
Technologie-Stack
- Runtime: Node.js (ES Modules)
- Framework: Express.js
- Template Engine: EJS
- Authentifizierung: bcrypt + express-session
- File Upload: Multer
- Sicherheit: Helmet, Rate Limiting
Installation
Voraussetzungen
- Node.js (Version 16+)
- npm oder yarn
Schritte
-
Repository klonen
git clone <repository-url> cd gemeindebrief-server -
Dependencies installieren
npm install -
Umgebungsvariablen konfigurieren
Erstelle eine
.env-Datei im Hauptverzeichnis (node) oder im darüberliegenden Verzeichnis (php):# Server PORT=3000 # Session SESSION_SECRET=dein-sicheres-geheimnis-hier # Admin-Login ADMIN_USER=admin ADMIN_PASS_HASH=$2b$10$...dein-bcrypt-hash # Branding COMMUNITY_NAME=Kirchengemeinde Musterhausen BRIEF_NAME=Pfarrbrief SLUG=pfarrbrief # iFrame CSP URL IFRAME_URL=https://www.kirchengemeinde-musterhausen.de -
Admin-Passwort-Hash generieren
node: Führe in einer Node.js-Console aus:
import bcrypt from 'bcrypt'; const hash = await bcrypt.hash('dein-passwort', 10); console.log(hash);php: Führe folgenden Befehl aus:
php -r "echo password_hash('IhrPasswort', PASSWORD_DEFAULT);"Den generierten Hash in
.envalsADMIN_PASS_HASHeintragen. -
Server starten (node)
npm start
Der Server läuft nun auf http://localhost:3000
Dateistruktur
gemeindebrief-server/
├── server.js/index.php # Hauptserver-Logik
├── package.json # Dependencies und Scripts (node)
├── .env # Umgebungsvariablen
├── views/
│ ├── admin.ejs/.php # Admin-Interface
│ ├── archiv.ejs/.php # Öffentliche Archiv-Ansicht
│ └── login.ejs/.php # Login-Seite
├── public/
│ ├── admin.css # Styles für Admin
│ ├── archiv.css # Styles für Archiv
│ └── upload.js # Client-seitiges Upload-Handling
└── uploads/ # PDF-Speicher (wird automatisch erstellt)
Verwendung
Admin-Bereich
-
Login:
/admin/login- Zugangsdaten aus
.envverwenden
- Zugangsdaten aus
-
PDF hochladen:
- Drag & Drop oder Klick auf Upload-Bereich
- Monate auswählen (mehrere möglich)
- Speichern
-
PDFs löschen:
- Im Admin-Bereich bei der Dateiliste auf "Löschen" klicken
Öffentliche Routen
/– Archiv-Übersicht aller Gemeindebriefe/pfarrbrief– Aktuelle Ausgabe (automatisch ermittelt)/pfarrbrief/:jahr/:monat– Spezifische Ausgabe (z.B./pfarrbrief/2025/12)
Dateinamen-Konvention
PDFs werden automatisch nach folgendem Schema benannt:
Jahr_Monat_[Jahr_Monat_...]_pfarrbrief.pdf
Beispiele:
2025_12_pfarrbrief.pdf– Einzelmonat Dezember 20252025_12_2026_01_pfarrbrief.pdf– Dezember 2025 und Januar 20262025_11_12_pfarrbrief.pdf– November und Dezember 2025
Sicherheitshinweise
- ✅ Verwende ein starkes SESSION_SECRET (node)
- ✅ HTTPS in Produktionsumgebung aktivieren (z.B. via Reverse Proxy)
- ✅
.env-Datei niemals ins Repository committen - ✅ Rate Limiting für Login ist bereits konfiguriert (5 Versuche/Minute) (node)
- ✅ Helmet.js für Security Headers ist aktiviert (node)
Deployment
Reverse Proxy (nginx)
server {
listen 80;
server_name deine-domain.de;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
Lizenz
Dieses Projekt steht zur freien Verfügung für kirchliche und gemeinnützige Zwecke.
Support
Bei Fragen oder Problemen erstelle bitte ein Issue im Repository.
Entwickelt für Kirchengemeinden 🕊️