Skip to content

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