Container
C4Container
title Container diagram for Teamerr
Person(flexworker, "Flexworker", "Temporary hired worker")
Person(hiring-user,"Hiring company user","User from hiring company with different roles")
System_Boundary(teamerr-system,"Teamerr system"){
Container_Boundary(teamerr, "Teamerr") {
Container(caddy, "Webserver,reverse proxy","Node,Caddy,Docker container", "Proxying requests, implements SSL, holds minified React SPA/PWA")
Container(be, "Backend API","Python,DRF,Docker Container", "Provide REST API for frontend to consume")
Container(celery, "Celery Worker","Python,Celery,Docker Container", "Worker to perform async tasks")
Rel(flexworker,caddy,"Access PWA")
Rel(hiring-user,caddy,"Access Webapp")
BiRel(caddy,be,"Forwards requests to API")
BiRel(be,postgresql, "Read/Write data")
BiRel(be,mysolution, "Consume REST API")
BiRel(be,s3, "Read write data")
BiRel(be,redis, "Read write data")
}
Container_Boundary(storages, "storages"){
ContainerDb(redis, "Cache, Pub/Sub","Redis,Docker Container", "Cache data for performance, Pub/Sub queue for celery workers")
ContainerDb(postgresql, "Database","Postgresql,Docker Container", "Main data storage")
}
}
System_Boundary(external_system,"External Systems"){
System_Ext(mysolution, "Mysolution", "External ERP system based on salesforce")
System_Ext('google', "Google auth", "Social authorization")
ContainerDb(s3,"Object storage", "Cloudflare R2 to store files")
}
UpdateLayoutConfig($c4ShapeInRow="4", $c4BoundaryInRow="2")