mirror of
https://github.com/owncast/owncast.git
synced 2024-11-22 21:03:19 +03:00
Add WIP backend arch diagram
This commit is contained in:
parent
1b386e1144
commit
e90da6c756
1 changed files with 175 additions and 0 deletions
175
docs/backend.md
Normal file
175
docs/backend.md
Normal file
|
@ -0,0 +1,175 @@
|
||||||
|
# Owncast Backend Architecture
|
||||||
|
|
||||||
|
Work in progress documentation detailing the backend architecture of Owncast.
|
||||||
|
|
||||||
|
## Structure
|
||||||
|
|
||||||
|
WIP
|
||||||
|
|
||||||
|
## Diagram
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
%% Owncast backend architecture.
|
||||||
|
%% See https://jojozhuang.github.io/tutorial/mermaid-cheat-sheet/
|
||||||
|
%% for a cheat sheet on creating this diagram.
|
||||||
|
%% Paste this document in https://mermaid.live as a quick way to edit.
|
||||||
|
|
||||||
|
%% This is a graph style diagram, Top Down.
|
||||||
|
graph TD
|
||||||
|
|
||||||
|
|
||||||
|
%% Define Nodes and Subgraphs
|
||||||
|
|
||||||
|
subgraph VideoPipeline[Video Pipeline]
|
||||||
|
VideoTranscoder(fa:fa-video Video Transcoder)
|
||||||
|
RTMPService[fa:fa-video RTMP Service]
|
||||||
|
FFMpeg[fa:fa-video ffmpeg]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph ChatService[fa:fa-comment Chat Service]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Dependencies
|
||||||
|
subgraph Webhooks[fa:fa-webhook Webhooks]
|
||||||
|
InboundWebhooks[Inbound]
|
||||||
|
OutboundWebhooks[Outbound]
|
||||||
|
end
|
||||||
|
|
||||||
|
App{Application}
|
||||||
|
ChatService--->App
|
||||||
|
Webhooks--->App
|
||||||
|
ConfigRepository(fa:fa-hard-drive Config Repository)--->App
|
||||||
|
UserRepository(fa:fa-hard-drive User Repository)--->App
|
||||||
|
Database(fa:fa-hard-drive Database)--->ConfigRepository
|
||||||
|
Database--->UserRepository
|
||||||
|
ApplicationState(fa:fa-list Application State)--->App
|
||||||
|
GeoIP(fa:fa-globe GeoIP Lookup)--->App
|
||||||
|
Statistics(fa:fa-list Statistics)--->App
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph VideoStorageProviders[Video Storage Providers]
|
||||||
|
LocalStorage((fa:fa-hard-drive Local Storage))
|
||||||
|
S3Storage((fa:fa-hard-drive S3 Storage))
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph ActivityPub
|
||||||
|
ActivityPubInboundHandlers[fa:fa-hashtag Inbound]
|
||||||
|
ActivityPubOutboundHandlers[fa:fa-hashtag Outbound]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Authentication
|
||||||
|
IndieAuth[fa:fa-key IndieAuth]
|
||||||
|
FediAuth[fa:fa-key FediAuth]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Notifications
|
||||||
|
DiscordNotifier[fa:fa-comment Discord]
|
||||||
|
BrowserNotifier[fa:fa-browser Browser]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph WebServer[Web Server]
|
||||||
|
ActivityPubHandlers[fa:fa-file ActivityPub Handlers]
|
||||||
|
StaticFiles((fa:fa-file Static Files))
|
||||||
|
WebSocket[WebSocket]
|
||||||
|
|
||||||
|
subgraph WebAssets[Web Assets]
|
||||||
|
EmbeddedStaticFiles((fa:fa-file Embedded\nStatic Assets))
|
||||||
|
OnDiskStaticFiles((fa:fa-file On Disk\nStatic Assets))
|
||||||
|
WebApplication[fa:fa-file Web\nApplication]
|
||||||
|
PublicFiles[fa:fa-file Public\nDirectory]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph HTTPHandlers[fa:fa-browser HTTP Handlers]
|
||||||
|
subgraph AdminAPIs[Admin APIs]
|
||||||
|
end
|
||||||
|
subgraph ChatAPIs[Chat APIs]
|
||||||
|
ChatUserRegistration[Chat User Registration]
|
||||||
|
Emoji[Emojis]
|
||||||
|
subgraph ChatAuthAPIs[Chat Authentication]
|
||||||
|
FediAuth
|
||||||
|
IndieAuth
|
||||||
|
end
|
||||||
|
end
|
||||||
|
subgraph VideoAPIs[fa:fa-video Video APIs]
|
||||||
|
ViewerPing[Viewer Ping]
|
||||||
|
PlaybackMetrics[Playback health metrics]
|
||||||
|
end
|
||||||
|
ActivityPubHandlers
|
||||||
|
ApplicationConfig[Application Config]
|
||||||
|
ApplicationStatus[Application Status]
|
||||||
|
Directory[Directory API]
|
||||||
|
Followers[Followers]
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Streamer
|
||||||
|
BroadcastingSoftware>fa:fa-video BroadcastingSoftware]
|
||||||
|
end
|
||||||
|
|
||||||
|
subgraph Viewer
|
||||||
|
VideoPlayer[fa:fa-video Video Player]
|
||||||
|
WebBrowser[fa:fa-browser Web Browser]
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
%% All the services and packages require access
|
||||||
|
%% to dependencies through a Application reference.
|
||||||
|
App-.->HTTPHandlers
|
||||||
|
App-.->RTMPService
|
||||||
|
App-.->ActivityPub
|
||||||
|
App-.->Authentication
|
||||||
|
App-.Stream went\nonline.->Notifications
|
||||||
|
App-.->DirectoryNotifier[Directory Notifier]
|
||||||
|
|
||||||
|
LocalStorage--HLS-->OnDiskStaticFiles
|
||||||
|
|
||||||
|
RTMPService>RTMP Ingest]--RTMP-->VideoTranscoder
|
||||||
|
VideoTranscoder--HLS-->VideoStorageProviders
|
||||||
|
VideoTranscoder--RTMP-->FFMpeg
|
||||||
|
FFMpeg--HLS-->VideoTranscoder
|
||||||
|
|
||||||
|
%% Viewers
|
||||||
|
VideoPlayer-->VideoStorageProviders
|
||||||
|
WebBrowser-->WebAssets
|
||||||
|
|
||||||
|
%% Streamers
|
||||||
|
BroadcastingSoftware--RTMP-->RTMPService
|
||||||
|
|
||||||
|
%% Style the nodes
|
||||||
|
|
||||||
|
%% Define reusable styles for node types
|
||||||
|
classDef bigtext font-weight:bold,font-size:20px
|
||||||
|
classDef repository fill:#4F625B,color:#fff
|
||||||
|
classDef webservice fill:#6082B6,color:#fff
|
||||||
|
classDef rtmp fill:#608200, color:#fff
|
||||||
|
classDef inbound fill:#6544e9,stoke:#fff,color:#fff
|
||||||
|
classDef outboundservice fill:#2386e2,stroke:green,color:#fff
|
||||||
|
classDef storage fill:#42bea6,color:#fff
|
||||||
|
|
||||||
|
%% Assign styles to nodes
|
||||||
|
class App bigtext
|
||||||
|
class UserRepository repository
|
||||||
|
class ConfigRepository repository
|
||||||
|
|
||||||
|
class WebSocket inbound
|
||||||
|
class HTTPHandlers inbound
|
||||||
|
class ActivityPubInboundHandlers inbound
|
||||||
|
class InboundWebhooks inbound
|
||||||
|
|
||||||
|
class ActivityPubOutboundHandlers outboundservice
|
||||||
|
class DiscordNotifier outboundservice
|
||||||
|
class BrowserNotifier outboundservice
|
||||||
|
class OutboundWebhooks outboundservice
|
||||||
|
class DirectoryNotifier outboundservice
|
||||||
|
|
||||||
|
class BroadcastingSoftware rtmp
|
||||||
|
class RTMPService rtmp
|
||||||
|
|
||||||
|
class Database storage
|
||||||
|
class LocalStorage storage
|
||||||
|
class S3Storage storage
|
||||||
|
|
||||||
|
%% Customize the theme styles
|
||||||
|
%%{init: {'theme':'base', 'themeVariables': {'darkMode': true, 'lineColor': '#c3dafe', 'tertiaryTextColor': 'white', 'clusterBkg': '#2d3748', 'primaryTextColor': '#39373d', "edgeLabelBackground": "white", "fontFamily": "monospace"}}}%%
|
||||||
|
```
|
Loading…
Reference in a new issue