Multi-Tenant | Self-Hosted | Full-Featured
- Multi-Tenant - Unbegrenzte Status-Seiten unter einer Installation
- Custom Domains - Jeder Tenant mit eigener Domain
- Monitor-Sharing - Services zwischen Tenants teilen
- Automatisches Monitoring - HTTP, Nagios Integration
- Webhooks - Discord, Slack, Matrix, Custom
- Dark Mode - Automatisch oder manuell
- Docker Ready - Ein Befehl zum Starten
| Feature | Beschreibung |
|---|---|
| Unbegrenzte Tenants | Beliebig viele Status-Seiten erstellen |
| Custom Domains | status.firma-a.de, status.firma-b.de |
| Slug-Routing | Zugriff via /tenant-slug |
| Tenant-Switcher | Schneller Wechsel im Admin |
| Monitor-Import | Services zwischen Tenants teilen |
| Sync-Optionen | Status, Vorfälle & Wartungen synchronisieren |
| Typ | Beschreibung |
|---|---|
| Manual | Volle Kontrolle - Status manuell setzen |
| HTTP/HTTPS | Automatische Endpoint-Überwachung |
| Nagios | Integration mit Nagios XI |
| Kategorien | Services logisch gruppieren |
- Vorfälle mit Severity-Stufen (Minor, Major, Critical)
- Status-Workflow: Investigating → Identified → Monitoring → Resolved
- Status-Updates mit Timeline
- Betroffene Services verknüpfen
- Öffentliche & interne Updates
- Wartungsfenster mit Start- und Endzeit
- Automatischer Statuswechsel
- Betroffene Services anzeigen
- Countdown auf Status-Seite
| Integration | Features |
|---|---|
| Discord | Rich Embeds, Farben nach Severity |
| Slack | Formatierte Nachrichten |
| Matrix | Direktnachrichten an Räume |
| Generic | Custom HTTP Webhooks |
- IMAP Inbox für Provider-E-Mails
- Automatische Kategorisierung
- E-Mail → Vorfall Konvertierung
- Monitor-Verknüpfung
- Responsive Design
- Dark/Light Mode
- RSS Feed
- WCAG 2.1 Barrierefreiheit
- Custom Branding (Logo, Farben, Footer)
- Uptime-Statistiken (30 Tage)
# 1. Repository klonen
git clone https://github.com/your-org/vigilo.git
cd vigilo
# 2. Konfiguration erstellen
cp .env.docker .env
# 3. .env anpassen - WICHTIG!
nano .env
# ADMIN_EMAIL=admin@example.com
# ADMIN_PASSWORD=MeinSicheresPasswort123!
# 4. Starten
docker-compose up -dFertig! Erreichbar unter http://localhost:3000
# Dependencies
npm install
# Umgebungsvariablen
cp .env.example .env.local
# DATABASE_URL="mysql://user:pass@localhost:3306/vigilo"
# NEXTAUTH_SECRET="min-32-zeichen-secret"
# Datenbank Setup
npx prisma migrate dev
npx prisma db seed
# Starten
npm run dev| Variable | Beschreibung |
|---|---|
DATABASE_URL |
MariaDB Verbindungs-URL |
NEXTAUTH_SECRET |
Session-Verschlüsselung (min. 32 Zeichen) |
NEXTAUTH_URL |
Öffentliche App-URL |
ADMIN_EMAIL |
Admin E-Mail (nur beim ersten Start) |
ADMIN_PASSWORD |
Admin Passwort (min. 8 Zeichen, nur beim ersten Start) |
# Tenant-Einstellungen (nur beim ersten Start)
TENANT_NAME=Status
TENANT_DOMAIN=localhost:3000
# Keycloak SSO
KEYCLOAK_CLIENT_ID=vigilo
KEYCLOAK_CLIENT_SECRET=your-secret
KEYCLOAK_ISSUER=https://keycloak.example.com/realms/your-realm
# Cron-Jobs
CRON_SECRET=your-cron-secretNach Login erreichbar unter /admin.
| Bereich | Pfad | Funktion |
|---|---|---|
| Dashboard | /admin |
Übersicht, Statistiken, Schnellaktionen |
| Monitore | /admin/monitors |
Services verwalten |
| Kategorien | /admin/categories |
Service-Gruppen |
| Vorfälle | /admin/incidents |
Incident Management |
| Wartungen | /admin/maintenance |
Geplante Wartungen |
| News | /admin/news |
Ankündigungen |
| Webhooks | /admin/webhooks |
Benachrichtigungen |
| E-Mail Inbox | /admin/inbox |
Provider-Mails |
| Benutzer | /admin/users |
User Management |
| Tenants | /admin/tenants |
Multi-Tenant Verwaltung |
| Einstellungen | /admin/settings |
Branding, SEO, Footer |
- Admin → Tenants → Neu
- Name, Slug und Domain eingeben
- Benutzer zuweisen
status.firma-a.de → Tenant "Firma A"
status.firma-b.de → Tenant "Firma B"
DNS entsprechend konfigurieren und Domain in Tenant-Einstellungen setzen.
https://status.example.com/firma-a
https://status.example.com/firma-b
- Admin → Monitore → Importieren
- Quell-Tenant und Monitor wählen
- Ziel-Kategorie festlegen
- Sync aktivieren:
- Status synchronisieren
- Vorfälle/Wartungen synchronisieren
GET /api/public/status # Alle Services
GET /api/public/status?slug=xyz # Services für Tenant "xyz"
GET /api/public/settings # Öffentliche Einstellungen
GET /api/feed/rss # RSS Feed# Monitore
GET /api/admin/monitors
POST /api/admin/monitors
PUT /api/admin/monitors/:id
DELETE /api/admin/monitors/:id
# Vorfälle
GET /api/admin/incidents
POST /api/admin/incidents
PUT /api/admin/incidents/:id
DELETE /api/admin/incidents/:id
POST /api/admin/incidents/:id/updates
# Wartungen
GET /api/admin/maintenance
POST /api/admin/maintenance
PUT /api/admin/maintenance/:id
DELETE /api/admin/maintenance/:id
# Weitere: /categories, /news, /webhooks, /users, /tenantsversion: '3.8'
services:
app:
build: .
ports:
- "${APP_PORT:-3000}:3000"
environment:
- DATABASE_URL=mysql://vigilo:password@db:3306/vigilo
- NEXTAUTH_URL=https://status.example.com
- NEXTAUTH_SECRET=your-32-character-secret
- ADMIN_EMAIL=${ADMIN_EMAIL}
- ADMIN_PASSWORD=${ADMIN_PASSWORD}
depends_on:
db:
condition: service_healthy
volumes:
- uploads:/app/public/uploads
db:
image: mariadb:11
environment:
- MARIADB_ROOT_PASSWORD=root_secret
- MARIADB_DATABASE=vigilo
- MARIADB_USER=vigilo
- MARIADB_PASSWORD=password
volumes:
- mariadb_data:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 5
volumes:
mariadb_data:
uploads:server {
listen 443 ssl http2;
server_name status.example.com;
ssl_certificate /path/to/cert.pem;
ssl_certificate_key /path/to/key.pem;
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_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;
}
}src/
├── app/
│ ├── admin/ # Admin-Panel
│ ├── api/ # API Routes
│ │ ├── admin/ # Admin APIs
│ │ ├── public/ # Public APIs
│ │ └── feed/ # RSS Feed
│ ├── auth/ # Authentifizierung
│ ├── [slug]/ # Tenant Slug-Routing
│ └── page.tsx # Status-Seite
├── components/
│ ├── admin/ # Admin Komponenten
│ ├── status/ # Status-Seite Komponenten
│ ├── ui/ # Basis UI
│ └── providers/ # React Context
├── lib/
│ ├── services/ # Business Logic
│ └── utils.ts # Hilfsfunktionen
└── prisma/
├── schema.prisma # DB Schema
└── seed.ts # Seed-Daten
# Development
npm run dev
# Build
npm run build
# Production
npm start
# Prisma
npx prisma migrate dev # Migration erstellen
npx prisma db push # Schema pushen
npx prisma studio # Datenbank UI
npx prisma db seed # Seed-Daten
# Linting
npm run lint# Backup
docker exec vigilo-db mariadb-dump -u vigilo -p vigilo > backup.sql
# Restore
docker exec -i vigilo-db mariadb -u vigilo -p vigilo < backup.sql# Backup
docker cp vigilo-app:/app/public/uploads ./backup-uploads
# Restore
docker cp ./backup-uploads/. vigilo-app:/app/public/uploads/| Technologie | Version | Verwendung |
|---|---|---|
| Next.js | 15 | Framework |
| TypeScript | 5.x | Typsicherheit |
| Prisma | Latest | ORM |
| MariaDB | 11 | Datenbank |
| Tailwind CSS | 4.x | Styling |
| NextAuth.js | Latest | Authentifizierung |
| Docker | - | Deployment |
MIT License - siehe LICENSE
Built with Next.js, Prisma & TypeScript