Skip to content

steinwaldsoft/sws-chat

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SWS-Chat

LAN-Kommunikationsplattform der steinwald.soft GmbH


Funktionsumfang

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

Technologie-Stack

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

Voraussetzungen

Server (Backend)

Client/Entwicklung (Frontend)

  • Node.js 18 oder neuer + npm

Installation & Start

1. Datenbank einrichten

Öffnen Sie SQL Server Management Studio (SSMS) oder sqlcmd und führen Sie aus:

-- Datei: docs/database_setup.sql

Die 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.

2. TLS-Zertifikat bereitstellen

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.sh

Client-PCs: Damit der Browser keine Sicherheitswarnung zeigt, muss server.crt auf jedem Client-PC als vertrauenswürdige Stammzertifizierungsstelle importiert werden.

Windows (PowerShell als Administrator):

Import-Certificate -FilePath \\server\share\server.crt -CertStoreLocation Cert:\LocalMachine\Root

3. Backend konfigurieren

cd backend
copy .env.example .env        # Windows
# cp .env.example .env        # Linux

Passen 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:5173

4. Backend starten

Windows:

backend\start_backend.bat

Linux/macOS:

chmod +x backend/start_backend.sh
./backend/start_backend.sh

Das Backend läuft auf https://0.0.0.0:8443. API-Dokumentation: https://localhost:8443/docs

5. Frontend starten

Der Vite-Dev-Server verwendet automatisch dasselbe Zertifikat aus backend/certs/.

Windows:

frontend\start_frontend.bat

Linux/macOS:

chmod +x frontend/start_frontend.sh
./frontend/start_frontend.sh

Das Frontend läuft auf https://0.0.0.0:5173.

Im LAN erreichbar unter: https://[Server-IP]:5173

6. Produktiv-Build (optional)

cd frontend
npm run build
# dist/ kann direkt durch FastAPI oder nginx ausgeliefert werden

LAN-Deployment (Produktiv)

Für den dauerhaften Betrieb im Firmennetz empfehlen wir:

  1. Backend als Windows-Dienst (z. B. mit NSSM) oder systemd-Unit auf Linux
  2. Frontend als statische Dateien hinter nginx oder direkt durch FastAPI
  3. HTTPS im LAN mit selbst-signiertem Zertifikat (für WebRTC erforderlich!)

nginx-Beispiel (alle Dienste auf Port 443)

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

Projektstruktur

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

Sicherheitshinweise

  • SECRET_KEY in .env muss ein langer, zufälliger String sein (mind. 32 Zeichen)
  • DB_PASSWORD sollte ein sicheres Passwort enthalten
  • Im Produktivbetrieb HTTPS verwenden (WebRTC benötigt sicheren Kontext)
  • Die .env-Datei nicht ins Versionskontrollsystem einchecken

Lizenz

Public Domain – keine Einschränkungen bei Nutzung, Änderung oder Weitergabe.

About

No description or website provided.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors