SAP Business One ↔ Plesk Synchronisations-Webapp
Eine Enterprise-Webapp zur automatischen Synchronisation zwischen SAP Business One (Systemhaus One) und Plesk Webservern für die Abrechnung von Verbrauchskosten.
📁 Projektstruktur
sap-sync-app/
├── backend/ # Rust Backend (Axum + Tokio)
│ ├── src/
│ │ ├── main.rs # Entry Point
│ │ ├── config/ # Configuration Management
│ │ ├── db/ # Database Pool & Migrations
│ │ ├── handlers/ # API Endpoints
│ │ ├── models/ # Data Models
│ │ ├── routes/ # API Routes
│ │ ├── services/ # Business Logic
│ │ ├── utils/ # Utilities
│ │ └── state.rs # Application State
│ ├── Cargo.toml # Rust Dependencies
│ └── Dockerfile # Backend Container
├── frontend/ # React Frontend (MUI)
│ ├── src/
│ │ ├── App.tsx # Main Application
│ │ ├── components/ # React Components
│ │ ├── contexts/ # Auth & I18n Contexts
│ │ ├── pages/ # React Pages
│ │ └── main.tsx # Entry Point
│ ├── package.json # Node Dependencies
│ └── Dockerfile # Frontend Container
├── database/
│ ├── init.sql # PostgreSQL Schema
│ └── seeds/ # Seed Data
├── nginx/
│ └── nginx.conf # Reverse Proxy Config
├── docker-compose.yml # Multi-Service Setup
├── .env.example # Environment Template
└── README.md # This File
✅ Features (Phase 1 & 2)
Authentication & Security
- ✅ Session-based Auth: PostgreSQL Session Store
- ✅ Password Policy: Min 8 chars, Groß-/Kleinbuchstaben, Ziffern, Sonderzeichen
- ✅ Brute Force Protection: 5 fehlgeschlagene Versuche → 1 Stunde Lockout
- ✅ CSRF Protection: Token-basiert (24h expiry)
- ✅ MFA: Optional TOTP (Google Authenticator, Authy)
- ✅ Secure Cookies: HTTP-only, Secure, SameSite Strict
SAP Integration
- ✅ Service Layer API Client: REST API Verbindung
- ✅ OAuth2 Authentication: Sichere Authentifizierung
- ✅ Customer Management: Get, Create, Update
- ✅ Item Management: Für Abonnements
- ✅ Contract Management: Vertragsdaten
- ✅ Connection Testing: Health Checks
Plesk Integration
- ✅ REST API Client: Plesk API v2
- ✅ Customer Management: CRUD Operations
- ✅ Subscription Management: Webspaces, Domains
- ✅ Usage Metrics: CPU, RAM, Disk, Bandwidth
- ✅ Connection Testing: Health Checks
Sync Engine
- ✅ Worker Pool: Tokio-basierte Parallelverarbeitung
- ✅ Conflict Resolution: 4 Strategien (SAP First, Plesk First, Manual, Timestamp)
- ✅ Bidirectional Sync: SAP ↔ Plesk
- ✅ Progress Tracking: Echtzeit-Status
- ✅ Error Handling: Retry Logic
- ✅ Job Queue: Asynchrone Verarbeitung
Reports & Analytics
- ✅ Revenue Report: Umsatzübersicht
- ✅ Usage Report: Verbrauchsmetriken
- ✅ Sync History: Synchronisations-Historie
- ✅ Export: CSV, Excel (xlsx), PDF
Notifications
- ✅ Email Notifications: SMTP (Lettre)
- ✅ Webhooks: HTTP Callbacks
- ✅ Dashboard Alerts: Real-time Status
- ✅ Error Notifications: Bei Fehlern
Frontend
- ✅ Dashboard: Übersicht, Status, Stats
- ✅ Sync Control: Start, Stop, Monitor
- ✅ Reports: Charts, Export
- ✅ Settings: Profile, Security, Sync Config
- ✅ Multi-Language: DE, FR, EN, SPA
Infrastructure
- ✅ Docker Compose: Multi-Container Setup
- ✅ Nginx: Reverse Proxy, SSL, Rate Limiting
- ✅ PostgreSQL: Database
- ✅ Redis: Caching
- ✅ pgAdmin: Database Management UI
- ✅ MailHog: SMTP Test Server
🛠 Tech Stack
Backend
- Language: Rust 1.75+
- Framework: Axum 0.7
- Async Runtime: Tokio 1.35
- Database: PostgreSQL 15 + sqlx 0.7
- HTTP Client: reqwest 0.11
- Auth: tower-session + PostgreSQL Store
- Security: Argon2, CSRF, TOTP
Frontend
- Framework: React 18
- Build Tool: Vite 5
- UI Library: Material UI 5.14
- Routing: React Router 6
- HTTP Client: Axios 1.6
- Charts: Recharts 2.10
- i18n: i18next 23
Infrastructure
- Container: Docker 24+
- Orchestration: Docker Compose
- Proxy: Nginx Alpine
- Database: PostgreSQL 15 Alpine
- Cache: Redis 7 Alpine
- Management: pgAdmin 4
🚀 Quick Start
1. Voraussetzungen
- Docker 24.0+ installiert
- Docker Compose 2.20+ installiert
- Git installiert
- Min. 4 GB RAM, 20 GB Speicher
2. Installation
# Repository klonen
git clone <repository-url>
cd sap-sync-app
# Umgebungsvariablen konfigurieren
cp .env.example .env
# .env mit echten Werten bearbeiten
# Alle Services starten
docker-compose up -d
# Logs überprüfen
docker-compose logs -f
3. Erste Schritte
# Admin-User erstellen (wird beim ersten Start automatisch erstellt)
# Default: username: admin, password: <generiert>
# Zugriff:
# Frontend: http://localhost:3000
# Backend API: http://localhost:3001/api
# pgAdmin: http://localhost:8080
# MailHog: http://localhost:8025
4. SAP & Plesk konfigurieren
-
SAP Service Layer:
- URL und Credentials in
.enveintragen APP__SAP__URLundAPP__SAP__CREDENTIALS
- URL und Credentials in
-
Plesk API:
- API Key generieren in Plesk
- In
.enveintragen:APP__PLESK__API_KEY
-
Sync konfigurieren:
- Frontend öffnen → Settings → Sync Settings
- Default Direction wählen
- Conflict Resolution festlegen
📊 API Endpoints
Authentication
POST /api/auth/login # Login
POST /api/auth/logout # Logout
GET /api/auth/me # Current User
POST /api/auth/change-password # Change Password
GET /api/auth/csrf-token # Get CSRF Token
Sync Management
GET /api/sync/status # Sync Status
POST /api/sync/start # Start Sync
POST /api/sync/stop # Stop Sync
GET /api/sync/jobs # List Jobs
GET /api/sync/jobs/:id # Job Details
Configuration
GET /api/config # Get Config
PUT /api/config # Update Config
Reports
GET /api/reports/revenue # Revenue Report
GET /api/reports/usage # Usage Report
GET /api/reports/sync-history # Sync History
GET /api/reports/export/:format # Export (csv/xlsx/pdf)
Health & Monitoring
GET /api/health # Overall Health
GET /api/health/sap # SAP Connection
GET /api/health/plesk # Plesk Connection
Notifications
GET /api/notifications # List Notifications
PUT /api/notifications/:id/read # Mark as Read
POST /api/webhooks # Create Webhook
GET /api/webhooks # List Webhooks
🔧 Konfiguration
.env Beispiel
# Database
DB_PASSWORD=your_secure_password
DATABASE_URL=postgresql://sap_user:${DB_PASSWORD}@pgsql:5432/sap_sync
# Backend
APP__SERVER__HOST=0.0.0.0
APP__SERVER__PORT=3001
APP__SESSION__SECURE=false
APP__MFA__ENABLED=true
# SAP Connection
APP__SAP__URL=https://sap-server:50000/b1s/v1
APP__SAP__COMPANY_DB=SBODemoDE
APP__SAP__USERNAME=manager
APP__SAP__PASSWORD=manager
# Plesk Connection
APP__PLESK__URL=https://plesk-server:8443/api/v2
APP__PLESK__API_KEY=your-api-key
# Email (SMTP)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USERNAME=your_email@gmail.com
SMTP_PASSWORD=your_app_password
SMTP_FROM=noreply@sap-sync.local
# Frontend
VITE_API_URL=http://localhost:3001/api
🗄️ Datenbank-Schema
Haupttabellen
- users: Admin-Benutzer
- sessions: Session Management
- customers: SAP ↔ Plesk Customer Mapping
- subscriptions: Abonnements/Verträge
- usage_metrics: Verbrauchsdaten
- sync_jobs: Sync-Jobs Queue
- sync_logs: Synchronisations-Logs
- notifications: Benachrichtigungen
- webhooks: Webhook-Konfiguration
- config: System-Konfiguration
Erweiterte Features
- JSONB Columns: Flexible Datenspeicherung
- GIN/GIST Indexes: Schnelle JSON-Suche
- Materialized Views: Dashboard Performance
- Triggers: Automatische Timestamps
- Full-text Search: Kunden-Suche
🔒 Sicherheit
Password Policy
- Min 8 Zeichen
- Min 1 Großbuchstabe (A-Z)
- Min 1 Kleinbuchstabe (a-z)
- Min 1 Ziffer (0-9)
- Min 1 Sonderzeichen (!@#$%&*)
Session Security
- HTTP-only Cookies
- Secure Flag (HTTPS)
- SameSite Strict
- 30 Minuten Expiry
- Remember Me (7 Tage)
Rate Limiting
- General API: 10 req/s
- Auth Endpoints: 5 req/min
- Nginx Built-in
📈 Performance
Backend
- Async Rust (Tokio)
- Connection Pooling (sqlx)
- Worker Pool (Sync Engine)
- JSONB Queries (PostgreSQL)
Frontend
- React 18 (Concurrent Rendering)
- Vite (Fast Build)
- Code Splitting
- Lazy Loading
🧪 Testing
# Backend Tests
cd backend
cargo test
# Frontend Tests
cd frontend
npm test
# Integration Tests
docker-compose -f docker-compose.test.yml up
📦 Production Deployment
Plesk Deployment
-
Docker auf Plesk Server:
# Docker installieren curl -fsSL https://get.docker.com | bash # Repository klonen git clone <repo> /opt/sap-sync cd /opt/sap-sync -
SSL Zertifikate:
# Certbot für Let's Encrypt certbot certonly --standalone -d your-domain.com # Zertifikate kopieren cp /etc/letsencrypt/live/your-domain.com/fullchain.pem nginx/ssl/cert.pem cp /etc/letsencrypt/live/your-domain.com/privkey.pem nginx/ssl/key.pem -
Environment konfigurieren:
cp .env.example .env # .env bearbeiten mit Production-Werten -
Services starten:
docker-compose up -d -
Plesk Proxy:
- Nginx Proxy in Plesk konfigurieren
- Domain → Apache & nginx Settings → Additional nginx directives
location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; }
🐛 Troubleshooting
Backend startet nicht
# Logs prüfen
docker-compose logs backend
# Database Connection testen
docker-compose exec backend psql $DATABASE_URL -c "SELECT 1"
Frontend Build Fehler
# Dependencies neu installieren
cd frontend
rm -rf node_modules package-lock.json
npm install
npm run build
SAP/Plesk Connection Failed
# Connection testen
curl -X GET http://localhost:3001/api/health/sap
curl -X GET http://localhost:3001/api/health/plesk
# Credentials prüfen
docker-compose exec backend env | grep SAP
docker-compose exec backend env | grep PLESK
📝 Development
Backend Development
cd backend
# Rust installieren (falls nicht vorhanden)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Cargo Watch für Hot Reload
cargo install cargo-watch
cargo watch -x run
# Tests
cargo test
Frontend Development
cd frontend
# Dependencies
npm install
# Dev Server
npm run dev
# Build
npm run build
📄 License
MIT License - siehe LICENSE Datei
🤝 Contributing
- Fork erstellen
- Feature Branch (
git checkout -b feature/AmazingFeature) - Committen (
git commit -m 'Add some AmazingFeature') - Push (
git push origin feature/AmazingFeature) - Pull Request öffnen
📞 Support
- Issues: GitHub Issues
- Documentation:
/docsOrdner - Email: support@sap-sync.local
Erstellt mit ❤️ für Enterprise SAP ↔ Plesk Synchronisation
Description
Languages
TypeScript
55.4%
Rust
38.3%
PLpgSQL
5.8%
Dockerfile
0.3%
HTML
0.1%