Skip to main content

Deployment

Deployment is fully automated with Ansible and is idempotent — you can re-run it safely at any time.

Docker services

ServicePortDescription
ses-server9000Django (Gunicorn)
proxy9010Nginx reverse proxy (token validation)
postgres5432PostgreSQL 16 (SES data)
keycloak-postgres5432PostgreSQL 16 (Keycloak)
keycloak8080Keycloak OIDC provider
odyssey6432PostgreSQL connection pooler
redis6379Redis 7 (cache/sessions)

Deploying

# On the deployment host
ansible-playbook -i inventory.ini playbook.yml

The playbook:

  1. Installs Docker, Nginx and TLS certificates
  2. Creates the ses service user
  3. Clones the ses repository to /opt/ses
  4. Builds and starts all Docker containers
  5. Runs Django migrations and setup
  6. Seeds the Keycloak IdentityProvider
  7. Publishes the docs site to /var/www/docs

Source availability

The Ansible deployment playbook and the SES source code are published on GitHub. The public project/repository page is on its way; the official URL will be announced at a later date.

Pre-release access

Institutes that would like to evaluate a pre-release version can contact us and we will arrange access.

Tenant management

# List all tenants
python manage.py list_tenants

# Add a tenant (creates schema, route, institute, IdP)
python manage.py add_tenant <slug> "<Name>"

# Delete a tenant (drops schema, removes route)
python manage.py delete_tenant <slug>
No rebuild needed

A new tenant is immediately available at https://your-domain/<slug>/admin/ — no rebuild or restart required.