LAN-Kommunikationsplattform der steinwald.soft GmbH
| Feature | Status |
|---|---|
| Anmeldung Username + Passwort | ✅ |
| Direktnachrichten (1:1) | ✅ |
| Gruppenchat | ✅ |
| Dateiübertragung (Dokumente, Bilder) | ✅ |
| IP-Telefonie (Audio, WebRTC) | ✅ |
| Videotelefonie (Video, WebRTC) | ✅ |
| Online-Status / Präsenz | ✅ |
| Tipp-Indikator | ✅ |
| Nachricht löschen | ✅ |
| Gruppen anlegen / verwalten | ✅ |
| MSSQL-Datenbank | ✅ |
| Schicht | Technologie |
|---|---|
| Backend | Python 3.11, 3.12 · FastAPI · SQLAlchemy · WebSockets |
| Frontend | Vue 3 · Vite · Pinia |
| Datenbank | Microsoft SQL Server (MSSQL) via pyodbc |
| Echtzeit | WebSocket (Chat) + WebRTC (Audio/Video) |
| Auth | JWT (Bearer Token) · bcrypt |
- Python 3.11 oder 3.12
- ODBC Driver 17 for SQL Server (kostenlos von Microsoft)
- Windows: https://learn.microsoft.com/en-us/sql/connect/odbc/download-odbc-driver-for-sql-server
- Linux (Ubuntu):
sudo apt install -y unixodbc-dev+ Microsoft-Repo
- Microsoft SQL Server 2019+ (oder SQL Server Express)
- Node.js 18 oder neuer + npm
Öffnen Sie SQL Server Management Studio (SSMS) oder sqlcmd und führen Sie aus:
-- Datei: docs/database_setup.sqlDie Tabellen werden beim ersten Start des Backends automatisch durch SQLAlchemy angelegt (
init_db()). Das SQL-Skript dient als manuelle Referenz und für die Benutzeranlage.
Das Backend erwartet Zertifikat und Schlüssel unter backend/certs/:
backend/
└── certs/
├── server.crt ← Ihr vorhandenes self-signed Zertifikat
└── server.key ← Zugehöriger privater Schlüssel
Option A – Vorhandenes Zertifikat verwenden (empfohlen):
Kopieren Sie Ihre .crt- und .key-Dateien in den Ordner backend/certs/.
Option B – Neues self-signed Zertifikat erstellen:
REM Windows:
backend\create_cert.bat
# Linux/macOS:
chmod +x backend/create_cert.sh && ./backend/create_cert.shClient-PCs: Damit der Browser keine Sicherheitswarnung zeigt, muss
server.crtauf jedem Client-PC als vertrauenswürdige Stammzertifizierungsstelle importiert werden.Windows (PowerShell als Administrator):
Import-Certificate -FilePath \\server\share\server.crt -CertStoreLocation Cert:\LocalMachine\Root
cd backend
copy .env.example .env # Windows
# cp .env.example .env # LinuxPassen Sie .env an:
DB_SERVER=IhrSQLServer # z. B. 192.168.1.10
DB_PORT=1433
DB_NAME=SWS_Chat
DB_USER=sws_chat_user
DB_PASSWORD=IhrSicheresPasswort
SECRET_KEY=min-32-zeichen-zufälliger-string
# HTTPS
PORT=8443
SSL_CERTFILE=./certs/server.crt
SSL_KEYFILE=./certs/server.key
# LAN-IP des Servers (wo Frontend und Backend laufen)
ALLOWED_ORIGINS=https://192.168.1.20:5173Windows:
backend\start_backend.batLinux/macOS:
chmod +x backend/start_backend.sh
./backend/start_backend.shDas Backend läuft auf https://0.0.0.0:8443.
API-Dokumentation: https://localhost:8443/docs
Der Vite-Dev-Server verwendet automatisch dasselbe Zertifikat aus backend/certs/.
Windows:
frontend\start_frontend.batLinux/macOS:
chmod +x frontend/start_frontend.sh
./frontend/start_frontend.shDas Frontend läuft auf https://0.0.0.0:5173.
Im LAN erreichbar unter: https://[Server-IP]:5173
cd frontend
npm run build
# dist/ kann direkt durch FastAPI oder nginx ausgeliefert werdenFür den dauerhaften Betrieb im Firmennetz empfehlen wir:
- Backend als Windows-Dienst (z. B. mit
NSSM) oder systemd-Unit auf Linux - Frontend als statische Dateien hinter nginx oder direkt durch FastAPI
- HTTPS im LAN mit selbst-signiertem Zertifikat (für WebRTC erforderlich!)
server {
listen 443 ssl;
server_name chat.steinwald-soft.intern;
ssl_certificate /etc/ssl/sws-chat.crt;
ssl_certificate_key /etc/ssl/sws-chat.key;
# Frontend (dist/)
root /opt/sws-chat/frontend/dist;
index index.html;
try_files $uri $uri/ /index.html;
# Backend API + WebSocket
location /api/ { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; }
location /uploads/ { proxy_pass http://127.0.0.1:8000; }
location /ws {
proxy_pass http://127.0.0.1:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}sws-chat/
├── backend/
│ ├── app/
│ │ ├── api/ # REST + WebSocket Endpunkte
│ │ │ ├── auth.py – Registrierung / Login
│ │ │ ├── users.py – Benutzerverwaltung
│ │ │ ├── messages.py – Nachrichtenhistorie
│ │ │ ├── groups.py – Gruppenmanagement
│ │ │ ├── files.py – Dateiupload / Download
│ │ │ └── websocket.py – WS-Chat + WebRTC-Signaling
│ │ ├── core/
│ │ │ ├── config.py – Konfiguration (.env)
│ │ │ ├── database.py – SQLAlchemy / MSSQL
│ │ │ └── security.py – JWT / bcrypt
│ │ ├── models/ # SQLAlchemy ORM-Modelle
│ │ ├── schemas/ # Pydantic-Schemas (Validierung)
│ │ ├── services/
│ │ │ └── websocket_manager.py – Verbindungsverwaltung
│ │ └── main.py – FastAPI App-Einstieg
│ ├── migrations/ – Datenbankmigrationen
│ ├── requirements.txt
│ ├── run.py
│ └── .env.example
│
├── frontend/
│ ├── src/
│ │ ├── assets/main.css – Globales Design
│ │ ├── components/
│ │ │ ├── Sidebar.vue – Kontakt-/Gruppenliste
│ │ │ ├── ChatPanel.vue – Nachrichtenbereich
│ │ │ ├── CallOverlay.vue – Audio/Video-Anruf UI
│ │ │ ├── NewGroupModal.vue – Gruppe anlegen
│ │ │ ├── Avatar.vue – Profilbild-Komponente
│ │ │ └── EmptyState.vue – Startbildschirm
│ │ ├── stores/
│ │ │ ├── auth.js – Authentifizierung (Pinia)
│ │ │ └── chat.js – Chat + WebRTC (Pinia)
│ │ ├── views/
│ │ │ ├── LoginView.vue
│ │ │ └── ChatView.vue
│ │ ├── router/index.js
│ │ ├── services/api.js – Axios HTTP-Client
│ │ └── main.js
│ ├── vite.config.js
│ └── package.json
│
└── docs/
├── database_setup.sql – MSSQL-Einrichtungsskript
└── README.md
SECRET_KEYin.envmuss ein langer, zufälliger String sein (mind. 32 Zeichen)DB_PASSWORDsollte ein sicheres Passwort enthalten- Im Produktivbetrieb HTTPS verwenden (WebRTC benötigt sicheren Kontext)
- Die
.env-Datei nicht ins Versionskontrollsystem einchecken
Public Domain – keine Einschränkungen bei Nutzung, Änderung oder Weitergabe.