Architecture
Production environment
A typical production environment consists of a Polis instance with its components (file, API, and statistics processing servers), a PostgreSQL database, and the Particiapi server which provides a cross-domain HTTP API for custom frontends. In addition an OpenID Connect-based identity provider is required for authenticating users and an email sending service for sending out notifications. The actual frontend can be served from a different subdomain which has been granted access to the API via CORS. A frontend may be embedded by third parties using iframes.
architecture-beta
service browser[Browser]
group extidp[External service provider]
service idp(cloud)[Identity provider] in extidp
group extmail[External service provider]
service mail(cloud)[Email sending service] in extmail
group thirdparty[3rd party]
service embedfrontend(cloud)[Embedded Particiapp frontend] in thirdparty
group particiapp[Particiapp]
service particiapi(server)[API server] in particiapp
service frontend(cloud)[Particiapp frontend] in particiapp
group polis[Polis] in particiapp
service postgres(database)[Database] in polis
service polisserver(server)[API server] in polis
service polismath(server)[Statistics processing] in polis
service polisfileserver(disk)[File server] in polis
junction j10
junction j11
junction j12
junction j13
junction j14
junction j15
junction j16
junction j17
junction j20
junction j24 in particiapp
junction j26 in polis
junction j30
junction j34 in particiapp
junction j37
junction j41
junction j42
junction j43 in particiapp
browser:B -- T:j14
j10:R -- L:j11
j11:R -- L:j12
j12:R -- L:j13
j13:R -- L:j14
j14:R -- L:j15
j15:R -- L:j16
j16:R -- L:j17
j10:B -- T:j20
j11:B -- T:embedfrontend
j13:B -- T:frontend
j14:B -- T:j24
j16:B -- T:j26
j17:B -- T:polisfileserver
embedfrontend:R -- L:frontend
polisserver:R -- L:j37
j37:R -- L:mail
j20:B -- T:j30
j24:B -- T:j34
j26:B -- T:polisserver
idp:R -- L:j41
j41:R -- L:j42
j42:R -- L:j43
j43:R -- L:particiapi
particiapi:R -- L:postgres
postgres:R -- L:polismath
j30:B -- T:idp
j34:B -- T:particiapi
polisserver:B -- T:postgres
Development environment
Apart from the Polis instance and Particiapi server the development environment already includes a preconfigured OpenID Connect identity provider (Keycloak), test email server (Maildev) and a database frontend (pgAdmin).
architecture-beta
service browser[Browser]
service proxy(internet)[Proxy]
group dev[Development environment]
service idp(cloud)[Identity provider] in dev
service mail(cloud)[Email sending service] in dev
service pgadmin(internet)[Database frontend] in dev
group particiapp[Particiapp] in dev
service particiapi(server)[API server] in particiapp
service frontend(cloud)[Particiapp frontend] in particiapp
group polis[Polis] in particiapp
service postgres(database)[Database] in polis
service polisserver(server)[API server] in polis
service polismath(server)[Statistics processing] in polis
service polisfileserver(disk)[File server] in polis
junction j10 in dev
junction j11 in dev
junction j12 in dev
junction j13 in dev
junction j14 in dev
junction j15 in dev
junction j16 in dev
junction j20 in dev
junction j21 in particiapp
junction j22 in particiapp
junction j23 in polis
junction j25 in dev
junction j26 in dev
junction j30 in dev
junction j32 in particiapp
junction j34 in polis
junction j35 in dev
junction j36 in dev
junction j41 in particiapp
browser:B -- T:proxy
proxy:B -- T:j13
j10:R -- L:j11
j11:R -- L:j12
j12:R -- L:j13
j13:R -- L:j14
j14:R -- L:j15
j15:R -- L:j16
j10:B -- T:j20
j11:B -- T:frontend
j12:B -- T:j22
j13:B -- T:j23
j14:B -- T:polisfileserver
j15:B -- T:j25
j16:B -- T:j26
polisserver:R -- L:j34
j34:R -- L:mail
j20:B -- T:j30
j22:B -- T:j32
j23:B -- T:polisserver
j25:B -- T:mail
j26:B -- T:j36
idp:R -- L:j41
j41:R -- L:particiapi
particiapi:R -- L:postgres
postgres:R -- L:j35
j35:R -- L:pgadmin
postgres:B -- T:polismath
j30:B -- T:idp
j32:B -- T:particiapi
polisserver:B -- T:postgres
j36:B -- T:pgadmin