Skip to content

dariusaurich/vigilo

 
 

Repository files navigation

Vigilo

Modern Status Page System

Multi-Tenant | Self-Hosted | Full-Featured

Next.js TypeScript Prisma Docker


Features | Schnellstart | Dokumentation | Screenshots


Highlights

  • 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

Features

Multi-Tenant Architektur

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

Service Monitoring

Typ Beschreibung
Manual Volle Kontrolle - Status manuell setzen
HTTP/HTTPS Automatische Endpoint-Überwachung
Nagios Integration mit Nagios XI
Kategorien Services logisch gruppieren

Incident Management

  • 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

Geplante Wartungen

  • Wartungsfenster mit Start- und Endzeit
  • Automatischer Statuswechsel
  • Betroffene Services anzeigen
  • Countdown auf Status-Seite

Webhooks & Integrationen

Integration Features
Discord Rich Embeds, Farben nach Severity
Slack Formatierte Nachrichten
Matrix Direktnachrichten an Räume
Generic Custom HTTP Webhooks

E-Mail Integration

  • IMAP Inbox für Provider-E-Mails
  • Automatische Kategorisierung
  • E-Mail → Vorfall Konvertierung
  • Monitor-Verknüpfung

Status-Seite

  • Responsive Design
  • Dark/Light Mode
  • RSS Feed
  • WCAG 2.1 Barrierefreiheit
  • Custom Branding (Logo, Farben, Footer)
  • Uptime-Statistiken (30 Tage)

Schnellstart

Docker (Empfohlen)

# 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 -d

Fertig! Erreichbar unter http://localhost:3000

Lokale Entwicklung

# 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

Konfiguration

Pflicht-Variablen

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)

Optionale Variablen

# 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-secret

Dokumentation

Admin-Panel

Nach 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

Multi-Tenant Setup

Neuen Tenant erstellen

  1. Admin → Tenants → Neu
  2. Name, Slug und Domain eingeben
  3. Benutzer zuweisen

Domain-Routing

status.firma-a.de  →  Tenant "Firma A"
status.firma-b.de  →  Tenant "Firma B"

DNS entsprechend konfigurieren und Domain in Tenant-Einstellungen setzen.

Slug-Routing

https://status.example.com/firma-a
https://status.example.com/firma-b

Monitor teilen

  1. Admin → Monitore → Importieren
  2. Quell-Tenant und Monitor wählen
  3. Ziel-Kategorie festlegen
  4. Sync aktivieren:
    • Status synchronisieren
    • Vorfälle/Wartungen synchronisieren

API Endpoints

Public API

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

Admin API (Auth erforderlich)

# 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, /tenants

Deployment

Docker Compose

version: '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:

nginx Reverse Proxy

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;
    }
}

Entwicklung

Projektstruktur

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

Befehle

# 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

Datenbank

# 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

Uploads

# Backup
docker cp vigilo-app:/app/public/uploads ./backup-uploads

# Restore
docker cp ./backup-uploads/. vigilo-app:/app/public/uploads/

Tech Stack

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

Lizenz

MIT License - siehe LICENSE


Built with Next.js, Prisma & TypeScript

Report Bug | Request Feature

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 97.1%
  • CSS 2.3%
  • Other 0.6%