Xema

Welcome!

Xema is a product developed by a startup @TechSudoku based in India. We serve the Call Center operators with customized call flows. We are happy to see you here and ready to support your evaluation. You can write to us at support@xema.in

Prerequisites

Xema runs on Ubuntu, the operating system choice of cloud.

Installation

Version 2

Supports Ubuntu 24, 22

curl -fsSL https://www.xema.in/install-xema.sh | sudo bash

Dev Branch

curl -fsSL https://www.xema.in/install-xema.sh | sudo bash -s -- -d -vvv

Version 1

Supports Ubuntu 18

curl -fsSL https://raw.githubusercontent.com/xema-in/install/master/xema-manager.sh | sudo bash

After installing

This script installs software. It does not decide what the server is for.

That is deliberate. It used to decide three things, all at the one moment nobody yet knew what the machine was for: which components to install, what database password to use, and what every service's settings should be. The last of those was the worst — a copy of a release's defaults in /etc/xema overrides the settings a cluster works out for itself, so servers sat quietly connected to the wrong machine with nothing to show for it.

So when the script finishes, the software is on the machine and only Manager is running. Everything else waits to be asked for.

1. Say what to connect to

sudo xema connect-database --server localhost --user xema --provision

--provision creates the database user with a password nobody has to choose or remember. It logs in to MariaDB as whoever is running the command, over the unix socket — which is how a stock install authenticates root — so sudo is the whole credential and nothing is typed or stored by hand. The generated password goes straight to /etc/xema/common.yaml, where every service reads it.

If your own Linux login has no rights to create a MariaDB user, add --trusted-user to log in as root instead. For a database that already exists, give --user and --pass and leave --provision out.

xema database shows what the server is set to connect to, and never the password.

2. Make it a site, or join one

A single server is the ordinary deployment and is a site of one:

xema cluster init --site <name>

To add a second server, mint a pass on the first and use it on the new one:

xema cluster token                  # on the server that is already a site
xema cluster join --token <pass>    # on the new one

A server joins a site empty. Joining points it at the site's database, so anything in its own would simply stop being read — not merged, not moved. Two working servers are never made into one site. To bring an existing server in, run cluster init on it and let the others join it.

A joining server also arrives with no roles, on purpose. Whatever it happened to be running before is not this site's business.

3. Say what the server runs

xema role add bff
xema role add queue        # bff queue dialer simplecdr metrics
                           # astermq fastagi tracer sipper ava
xema node apply

role add writes the decision down; node apply is what starts and stops things. A server that is out of contact picks up the decision when it returns.

4. Check it

xema site           # the whole site: servers, shared parts, what it holds, what each is running
xema status         # what is running on this machine

More than one server?

A single server is the ordinary deployment and needs nothing further.

Upgrading

Re-run the installer. It replaces the code and never switches anything off, so a server keeps running what it was.

Schema is not applied automatically — several servers sharing one database must not race each other to migrate it, and a deploy should not be the moment the schema changes. Manager says at startup when the database is behind the build:

xema database migrate

What goes where

/opt/techsudoku/xema the code — replaced wholesale on upgrade
/etc/xema settings, and only what somebody decided
/var/lib/xema state the services write

Nothing is seeded into /etc/xema by installing. A release's defaults ship beside its code and are read from there; /etc/xema is for choices — the database from connect-database, the site's own settings from joining, and anything an administrator writes themselves, which beats both.