Skip to main content
This document provides a step-by-step guide to installing and configuring the Bruno Licensing Server on your own infrastructure. The server runs as a Docker container and requires a MongoDB instance for data storage and SMTP credentials for sending email notifications.

Prerequisites

  • Docker installed on your server — Install Docker
  • Access to a MongoDB instance (on-premise or cloud-hosted, e.g., MongoDB Atlas)
  • SMTP credentials from any email provider (SendGrid, Gmail, custom SMTP, etc.)

System Requirements

Architecture Diagram

Architecture Diagram

Setup Methods

The licensing server can be deployed in four ways. Choose the approach that fits your infrastructure:
  1. Running the Docker image directly
  2. Ansible
  3. Docker Compose
  4. Kubernetes

1. Setup by Running the Docker Image

Pull the image:
Run the container:

2. Setup Using Ansible


3. Setup Using Docker Compose

docker-compose.yml:
Start the service:

4. Setup Using Kubernetes

Create the secret:
licensing-server.yaml — Deployment and Service:
Apply the manifest:

Network Ports & Firewall Rules


Proxy Settings

Pass the following environment variables to configure proxy settings:

Troubleshooting SSL Issues

The following environment variables disable SSL validation when connecting to the Bruno Global Licensing Server.
Use these settings only to diagnose SSL-related issues. Do not use them in a production environment.

SSL Configuration

The licensing server supports SSL using either a self-signed certificate or a CA-signed certificate. Supported formats:
  • PFX format (.p12)
  • CRT + KEY format (.crt and .key)
SSL_KEY_PASSPHRASE is optional and only required if the certificate is encrypted. Expected file structure:
Run the container with SSL enabled:

Email Configuration

The licensing server supports customizable email templates for license activation, deactivation, and OTP-based login.

Template Format

Templates are written in TOML format with two required fields: Example template:

Available Template Variables

Template File Structure

Mount your custom templates using the following structure:
Mount templates when starting the container:

Template Fallback Behavior

If a custom template is missing or cannot be parsed, the server automatically falls back to the default Bruno template for that notification type. Template usage and fallback events are logged at startup and runtime.

Built-In Template Examples

Troubleshooting Template Issues

Template not being used:
  • Verify the file exists at /opt/license-service/templates/[template-name].toml
  • Check file permissions (must be readable by the container)
  • Confirm the server logs show the template was loaded
Template rendering errors:
  • Verify valid TOML syntax
  • Ensure both subject and body fields are present
  • Use Mustache-style variables ({{variable}}), not ${variable}
Common issues:
  • Missing or misspelled subject/body fields
  • Incorrect variable formatting
  • Invalid HTML or character encoding
  • Missing read permissions on the template file

SSO for License Admins

The licensing server supports Single Sign-On (SSO) via SAML, allowing License Administrators to log in through your organization’s Identity Provider (IdP).

Environment Variables

Domain Discovery

Bruno supports domain discovery, which automatically routes users to your organization’s license server based on their email domain. To enable this, send us the following details:
  • Domain — e.g., company.com (as in john@company.com)
  • Internal License Server URL — e.g., https://bruno.internal

User Workflow for License Activation via SSO

  1. Open the Bruno app, select the SSO option, and enter your work email.
Select SSO and enter work email
  1. You will be redirected to the SSO login page. If SSO_ENABLED=true, a Login with SSO button will appear.
SSO login page with Login with SSO button
  1. After logging in through your IdP, users with the bruno-license-user role will be granted access and see the activation confirmation page.
Successful license activation confirmation

Changelog

Release history for the Bruno Self-Hosted Licensing Server.

1.17.0 (30 March 2026)

  • Display the app version in the admin dashboard

1.16.2 (2 March 2026)

  • Fixed issue where license activation details were not persisted after restarting the app

1.16.1 (19 February 2026)

  • Fixed license activation issue

1.16.0 (6 February 2026)

  • Added user activation logs
  • Added dynamic version logs
  • Fixed issue with Docker image updates for default templates

1.15.2 (16 January 2026)

  • Fixed issue with Docker image updates

1.15.1 (14 January 2026)

  • Fixed session handling for SSO

1.15.0 (9 January 2026)

  • Added refresh option for the license information

1.14.0 (1 January 2026)

  • Added CSV export support for user data

1.13.0 (4 November 2025)

  • Added SCIM support in SSO integration for automated user provisioning and enhanced identity management

1.12.1 (17 October 2025)

  • Fixed duplicate license activation page after successful login

1.12.0 (7 August 2025)

  • Support for customizing License Activation, Deactivation, and OTP emails

1.11.0 (8 July 2025)

  • Support for in-app license activation using SSO
  • Users are now notified via email upon deactivation

1.10.1 (10 June 2025)

  • Parse Group/Role attributes with list of values (SSO)

1.10.0 (29 May 2025)

  • License keys are masked in the UI
  • Seat usage is now displayed in the UI

1.9.3 (22 May 2025)

  • Retrieve role info from Groups attribute and validate accordingly (SAML, SSO)

1.9.2 (9 May 2025)

  • Made Assertion signature non-mandatory (Response signature is required) for SSO

1.9.1 (17 April 2025)

  • Fixed issue related to duplicate user during upload

1.9.0 (4 April 2025)

  • SSO support for License Admins

1.8.0 (28 March 2025)

  • SSL certificate configuration support

1.7.0 (26 November 2024)

  • Status API — /api/v1/status