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 by any third party which has been granted access to the API via CORS.

architecture-beta
    service browser[Browser]

    group extidp[External service provider]
    service idp(cloud)[Identity provider] in extidp

    group extmail[Mailgun or Amazon SES]
    service mail(cloud)[Email service] in extmail

    group extfrontend[3rd party]
    service frontend(cloud)[Particiapp frontend] in extfrontend

    group particiapp[Particiapp]
    service particiapi(server)[API server] 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 j01
    junction j02
    junction j03
    junction j04
    junction j05
    junction j11

    browser:B -- T:j03
    j01:R -- L:j02
    j02:R -- L:j03
    j03:R -- L:j04
    j04:R -- L:j05
    j01:B -- T:j11
    j11:B -- T:frontend
    j02:B -- T:idp
    idp:R -- L:particiapi
    j03:B -- T:particiapi
    particiapi:R -- L:postgres
    postgres:R -- L:polisserver
    j05:B -- T:polisserver
    postgres:B -- T:polismath
    polisserver:B -- T:polisfileserver
    polisserver:R -- L:mail

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(internet)[Identity provider] in dev
    service mail(internet)[Email service] in dev
    service frontend(internet)[Particiapp frontend] in dev
    service pgadmin(internet)[Database frontend] in dev

    group particiapp[Particiapp] in dev
    service particiapi(server)[API server] 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 j01 in dev
    junction j02 in dev
    junction j03 in dev
    junction j04 in dev
    junction j05 in dev
    junction j06 in dev
    junction j11 in dev
    junction j12 in dev
    junction j13 in dev
    junction j14 in dev
    junction j15 in dev

    browser:B -- T:proxy
    proxy:B -- T:j03
    j01:B -- T:j11
    j01:R -- L:j02
    j02:B -- T:j12
    j02:R -- L:j03
    j03:B -- T:j13
    j03:R -- L:j04
    j04:B -- T:pgadmin
    pgadmin:B -- T:postgres
    j04:R -- L:j05
    j05:B -- T:j15
    j05:R -- L:j06
    j06:B -- T:mail
    j11:B -- T:frontend
    j12:B -- T:idp
    idp:R -- L:particiapi
    j13:B -- T:particiapi
    particiapi:R -- L:postgres
    postgres:R -- L:polisserver
    j15:B -- T:polisserver
    postgres:B -- T:polismath
    polisserver:B -- T:polisfileserver
    polisserver:R -- L:mail