furt/docs/setup-guide.md
michael 3ed921312f feat(config): implement multi-tenant config system (DAW/furt#89)
- nginx-style furt.conf configuration
- Multi-tenant mail routing per API key
- Custom SMTP support per customer
- Backward compatibility via server.lua adapter

WIP: Ready for testing on werner
2025-08-15 16:18:55 +02:00

3.6 KiB

Multi-Tenant furt Setup-Anleitung

Installation

1. Dateien platzieren

# OpenBSD/FreeBSD
mkdir -p /usr/local/etc/furt
mkdir -p /usr/local/share/furt

# Oder Linux  
mkdir -p /etc/furt
mkdir -p /usr/local/share/furt

# Source code
cp -r src/ /usr/local/share/furt/
cp -r config/ /usr/local/share/furt/

2. Konfiguration erstellen

# Beispiel-Config kopieren und anpassen
# OpenBSD/FreeBSD:
cp furt.conf.example /usr/local/etc/furt/furt.conf

# Linux:
cp furt.conf.example /etc/furt/furt.conf

# Config editieren
vi /usr/local/etc/furt/furt.conf  # oder /etc/furt/furt.conf

3. Start-Script

#!/bin/sh
# /usr/local/bin/furt

cd /usr/local/share/furt
lua src/main.lua

Multi-Tenant Konfiguration

Beispiel für 3 Websites

[server]
host = 127.0.0.1
port = 8080

[smtp_default]
host = mail.dragons-at-work.de
port = 465
user = noreply@dragons-at-work.de
password = your-smtp-password

# Website 1: Dragons@Work
[api_key "daw-key-abc123"]
name = "Dragons@Work Website"
permissions = mail:send
allowed_ips = 1.2.3.4/32, 10.0.0.0/8
mail_to = admin@dragons-at-work.de
mail_from = noreply@dragons-at-work.de
mail_subject_prefix = "[DAW] "

# Website 2: Biocodie (gleiche SMTP, andere Empfänger)
[api_key "bio-key-def456"]
name = "Biocodie Website"
permissions = mail:send
allowed_ips = 5.6.7.8/32
mail_to = contact@biocodie.de
mail_from = noreply@biocodie.de
mail_subject_prefix = "[Biocodie] "

# Website 3: Kunde mit eigenem SMTP
[api_key "kunde-key-ghi789"]
name = "Kunde X Website"
permissions = mail:send
allowed_ips = 9.10.11.12/32
mail_to = info@kunde-x.de
mail_from = noreply@kunde-x.de
mail_smtp_host = mail.kunde-x.de
mail_smtp_user = noreply@kunde-x.de
mail_smtp_pass = kunde-smtp-password

Admin-Workflow

Neue Website hinzufügen

  1. Config editieren:
vi /usr/local/etc/furt/furt.conf
  1. Neuen API-Key-Block hinzufügen:
[api_key "neue-website-key"]
name = "Neue Website"
permissions = mail:send
allowed_ips = 12.34.56.78/32
mail_to = contact@neue-website.de
mail_from = noreply@neue-website.de
  1. furt neu starten:
systemctl restart furt
# oder
pkill -f "lua.*main.lua" && /usr/local/bin/furt &

Website testen

# Test mit curl
curl -X POST http://localhost:8080/v1/mail/send \
  -H "X-API-Key: neue-website-key" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Test User",
    "email": "test@example.com", 
    "subject": "Test Message",
    "message": "This is a test message"
  }'

Vorteile des Multi-Tenant-Systems

Ein Server, viele Websites

  • Alle Websites nutzen eine furt-Instanz
  • Jede Website hat eigenen API-Key
  • Verschiedene Empfänger-Adressen
  • Verschiedene SMTP-Server möglich

Admin-freundlich

  • Nginx-style Config-Format
  • Einfach neue Websites hinzufügen
  • Klare Struktur pro Website
  • Kommentare möglich

Sicher

  • IP-Restrictions pro Website
  • Permissions pro API-Key
  • Separate SMTP-Credentials möglich
  • Rate-Limiting bleibt erhalten

Flexibel

  • Default SMTP + website-spezifische SMTP
  • Subject-Prefix pro Website
  • Verschiedene Mail-Adressen
  • Beliebig viele Websites

Backward Compatibility

Das neue System ist vollständig kompatibel mit der alten config/server.lua API. Bestehende Module (auth.lua, main.lua, etc.) funktionieren ohne Änderungen.

Troubleshooting

Config-Parsing-Fehler

# Config-Syntax prüfen
lua -e "require('src.config_parser').parse_file('/usr/local/etc/furt/furt.conf')"

Mail-Routing testen

# Logs anschauen
tail -f /var/log/furt.log

# Debug-Mode
FURT_DEBUG=true lua src/main.lua