Installation
Flow can either be hosted in a cloud environment managed by Studo or self-hosted on university infrastructure.
Managed hosting
With Studo-managed hosting, Studo provisions and operates the Flow environment. The university does not need to install or operate the Flow application on its own infrastructure, but can still extend it with additional workflows and integrations.
Self-hosting Flow
Universities can also install and operate Flow on their own infrastructure. The following instructions describe the requirements and provide example configurations for a self-hosted installation.
To pull the Flow image from the GitHub Container Registry, you need to authenticate to our container registry. You can
do this by running docker login studo-echbgrb4a3evh7gg.azurecr.io.
Contact the Studo team to get your credentials.
Requirements
- Docker and Docker Compose installed on your server (swarm mode or kubernetes is recommended for production)
- A domain name for the Flow instance (can be a subdomain)
- A valid SSL certificate for the domain name (can be a self-signed certificate for testing purposes)
- A reverse proxy (e.g. Traefik) to handle SSL termination and routing for said domain
- A MongoDB replica set (3 nodes recommended for production)
- A GitHub account
Example compose file
services:
studo-flow:
image: studo-echbgrb4a3evh7gg.azurecr.io/studo/flow:latest
container_name: flow
environment:
DEBUG_LOG: false
ALLOWED_IMPORTERS: DEMO,API,STUDO_LABS,STUDO_SERVICES
ENABLE_KTOR_METRICS: false
ENABLE_POSTGRES_STATS_DATABASE: false
ENABLE_TASK_SCHEDULER: true
CONTAINER: web-1 # For horizontal scaling increase number for each instance - starting by 1 (there must be a container with "web-1" for proper functionality)
MONGO_URI: mongodb://mongodb1:27017,mongodb2:27017,mongodb3:27017/flow # Use your MongoDB replica set URI here, SSL is recommended
PORT: 8080 # The (internal) port Flow is listening on
MAX_REQUEST_BODY_SIZE_MB: 50 # optional, see "Request body size limit" below
ENABLE_SENTRY_LOG: false
SENTRY_DSN: "https://key@your.sentry.org/projectId" # optional (only when ENABLE_SENTRY_LOG = true)
SENTRY_DSN_FRONTEND: "https://key@your.sentry.org/projectId" # optional (only when ENABLE_SENTRY_LOG = true)
baseUrl: https://demo.studoflow.com/admin
rootUserPassword: s3cure # Initial password for "admin" user
APP: flow-XXXXXX # replace with value provided
flowLicenceKey: XXXXXXXX # replace with key provided
ports:
- 8080:8080 # Expose the Flow webUI port, adjust your reverse proxy configuration accordingly.
Example reverse proxy configuration (Traefik) in swarm mode
services:
studo-flow:
image: studo-echbgrb4a3evh7gg.azurecr.io/studo/flow:latest
environment:
DEBUG_LOG: false
ALLOWED_IMPORTERS: DEMO,API,STUDO_LABS,STUDO_SERVICES
ENABLE_KTOR_METRICS: false
ENABLE_POSTGRES_STATS_DATABASE: false
ENABLE_TASK_SCHEDULER: true
# Swarm substitutes {{.Task.Slot}} with the replica number (1, 2, 3...)
CONTAINER: web-{{.Task.Slot}}
MONGO_URI: mongodb://mongodb1:27017,mongodb2:27017,mongodb3:27017/flow # Use your MongoDB replica set URI here, SSL is recommended
PORT: 8080 # The (internal) port Flow is listening on
MAX_REQUEST_BODY_SIZE_MB: 50 # optional, see "Request body size limit" below
ENABLE_SENTRY_LOG: false
SENTRY_DSN: "https://key@your.sentry.org/projectId" # optional (only when ENABLE_SENTRY_LOG = true)
SENTRY_DSN_FRONTEND: "https://key@your.sentry.org/projectId" # optional (only when ENABLE_SENTRY_LOG = true)
baseUrl: https://demo.studoflow.com/admin
rootUserPassword: s3cure # Initial password for "admin" user
APP: flow-XXXXXX # replace with value provided
flowLicenceKey: XXXXXXXX # replace with key provided
deploy:
mode: replicated
replicas: 2 # For high availability, adjust as needed
update_config:
parallelism: 1
delay: 10s
restart_policy:
condition: any
delay: 2s
labels:
- traefik.enable=true # No need for any auth middleware, configure OIDC or SAML login providers in Flow
- traefik.http.services.flow.loadbalancer.server.port=8080 # The internal port Flow is listening on
- traefik.http.routers.flow.rule=Host(`demo.studoflow.com`) # Needs to match the domain of the baseUrl environment variable
- traefik.http.routers.flow.tls=true
- traefik.http.routers.flow.tls.certresolver=cfresolver # or your own cert resolver
Request body size limit
Flow rejects requests whose body exceeds a configured size and responds with HTTP status 413 Payload Too Large. The
limit protects the server against excessively large requests and is not intended to restrict regular uploads.
The limit defaults to 50 MB and can be changed with the MAX_REQUEST_BODY_SIZE_MB environment variable. The value must
be a whole number of megabytes between 1 and 1024. Flow does not start if the value is not a whole number or lies
outside this range. Keep the limit well above the largest file your users upload to Flow.
If your reverse proxy also limits request body sizes, make sure its limit is not lower than the one configured in Flow.