System-Architektur

Überblick

Internet
    β”‚
    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚         Caddy (TLS + Proxy)         β”‚  stoat-caddy-1
β”‚  chat.dreylo.com / dreylo.com       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
    β–Ό          β–Ό          β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Web   β”‚ β”‚ API  β”‚ β”‚  Profile API     β”‚
β”‚ (SolidJSβ”‚ β”‚(Rust)β”‚ β”‚  (Express/Node)  β”‚
β”‚  :80   β”‚ β”‚:14702β”‚ β”‚  :3010           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”¬β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
              β”‚              β”‚
    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
    β–Ό         β–Ό         β–Ό    β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚MongoDBβ”‚ β”‚Redis β”‚ β”‚  MongoDB      β”‚
β”‚:27017 β”‚ β”‚:6379 β”‚ β”‚  dreylo-      β”‚
β”‚(Stoat)β”‚ β”‚      β”‚ β”‚  profiles DB  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Container-Details

stoat-api-1 (Backend)

  • Sprache: Rust mit Rocket Framework
  • Image: ghcr.io/stoatchat/api:v0.11.1 (pre-built, nicht Γ€nderbar)
  • Funktion: REST API fΓΌr alle Chat-Operationen (Messages, Users, Server, etc.)
  • Auth: Session Tokens (X-Session-Token Header)

stoat-web-1 (Frontend)

  • Sprache: TypeScript / SolidJS
  • Image: dreylo-web (lokal gebaut aus /home/dreylo-web/)
  • Build: pnpm monorepo, Vite bundle
  • Besonderheit: Fork des Stoat-Frontends mit Dreylo-Anpassungen

dreylo-profile-api (Custom Microservice)

  • Sprache: TypeScript / Express.js
  • Image: Lokal gebaut aus /home/revolt/dreylo-profile-api/
  • Funktion: Speichert Avatar-Ringe, Banner-Farben, Server-Folder
  • Auth: Delegiert an stoat-api-1 (/users/@me check)
  • DB: Eigene MongoDB Collection dreylo-profiles

stoat-database-1 (MongoDB)

  • Version: MongoDB (aktuell)
  • Daten: Alle Stoat-Daten + dreylo-profiles Collection
  • Zugriff intern: mongodb://database:27017

stoat-caddy-1 (Reverse Proxy)

  • Konfiguration: /home/revolt/Caddyfile
  • Funktion: TLS-Terminierung, Routing zu den Services
  • Automatisches TLS: Let's Encrypt / ZeroSSL

Netzwerk-Kommunikation

Alle Container sind im selben Docker-Netzwerk stoat_default und kommunizieren ΓΌber ihre Service-Namen:

# Von dreylo-profile-api zu stoat-api:
http://api:14702/users/@me

Von Frontend zu Backend (ΓΌber Caddy):

https://chat.dreylo.com/api/...

Profile API intern:

http://dreylo-profile-api:3010

Authentication Flow

User β†’ Frontend β†’ /auth/session/login β†’ stoat-api-1
                                              β”‚
                              Session Token β—„β”€β”˜

User β†’ Frontend β†’ /profile-api/api/profile/me
β”‚
X-Session-Token Header
β”‚
dreylo-profile-api
β”‚
GET http://api:14702/users/@me
mit X-Session-Token
β”‚
User-ID β—„β”€β”˜
β”‚
MongoDB Write/Read