D

Dira360 Deployment Console

Provision subdomains, databases, and deploy tenant instances.

🔒

Change Your Password

For security, you must set a new password before continuing.

At least 10 characters.
DDira360 Deploy Console
✦New Deployment ▤Instances 🔑Licenses 🛠SQL Maintenance
👤Users ⚙Settings
…

New Deployment

Provision a new tenant instance end-to-end.
1. Configure
2. Subdomain
3. Database
4. Company & Admin
5. Deploy

⚙ Provisioning Configuration

These settings come from Settings → Provisioning. Hestia API credentials are managed in Settings → Hestia Connection only.

Which product this deployment runs. Each application owns its own source paths, port range, service unit and proxy template.

The console picks the next free port and verifies nothing on this server is already listening on it — there is nothing to type here.

JWT secrets, CORS origin, and rate limits are generated automatically into the tenant .env.

🌐 Subdomain

Creates a web domain in Hestia (auto-creates the DNS A record under the root domain).

The web root folder /home//web// is created by Hestia and included in its automatic backups.

🗄 Database

Creates the MySQL database and user via Hestia (backed up automatically).

Peak connections this tenant may open. It is a promise against the server ceiling — the capacity guard refuses a deploy that would overcommit it.

Hestia prepends your user name to the DB (e.g. flashbyt_deeva_db). The tenant .env is written with the full prefixed name automatically.

🏢 Company & Admin

📱 M-Pesa (Daraja)

Written into the tenant .env at deploy time — the shop reads M-Pesa credentials only from that file. Leaving everything blank is allowed: the shop then stays on sandbox until credentials are added to .env.

Production and sandbox credentials coexist in .env: the environment decides which pair is preferred and the other one is the fallback. The callback base must be this tenant's public https host — Safaricom rejects internal ports and private hosts.

🚀 Review & Deploy

🗄 SQL Connection Capacity

Entering this step checks whether one more instance fits under the server's max_connections.

🎉 Deployment Complete

Instances

All deployed tenant instances.
TenantDomainPortStatusDeployed

Tenant Dashboard

Loading…

Loading dashboard…

Licenses

Vendor-signed license management across all tenant instances.

🔑 Vendor License Key

Checking…

TenantDomainPackageLicense StatusExpiresActions

SQL Maintenance

Every database job in one place: connections, restore points, table data and schema drift.

🗄 Connection Budget

Checking…

Loading capacity report…

▤ Per-Tenant Capacity

Pool = how many connections the tenant's .env lets it open (its share of the budget). Live/idle come from the server's processlist — the idle column is what "Shed idle" can free without restarting anything.

TenantAppPoolLiveIdleActions

🧯 Reduce the Budget

Lowering a tenant's pool is the durable fix — the value is written into its .env, so it survives restarts and redeploys. Raising the server ceiling buys headroom for the whole fleet instead.

Applies immediately with SET GLOBAL. Requires the privileged DB account below.

Kills only SLEEP connections older than the idle window (max 50 per tenant). No service is restarted and no running query is dropped.

    🕘 Incident History

    Recorded by the background watch and by ceiling changes — one entry per escalation (not one per sample), so a long incident stays readable.

    WhenEventDetail

    ⚙ Monitor & Privileged Access

    The watch samples MySQL in the background, records an incident whenever the fleet enters the red zone and (optionally) sheds idle connections first. A privileged DB account is optional: without it the panel falls back to per-tenant probes and cannot raise max_connections.

    Checking…

    Disabled also turns off the pre-deploy check, so nothing is refused.

    Kept free for the console, backups and bursts.

    A SLEEP connection older than this may be reclaimed.

    Privileged MySQL account (optional)

    Only used for information_schema.PROCESSLIST and SET GLOBAL. Seeded from config.json credentials when left blank — the console never echoes it back.

    💾 Database Backups

    Each dump is a compressed mysqldump written to the console's backup directory, newest first. The data reset and the schema repair both take one of these automatically and abort if it fails — this page is where you see, keep and prune them.

    Reading backups…

    FileSizeCreatedActions
    Loading…

    Deleting a dump only removes the file from disk — the instance's database is untouched. Creating one runs mysqldump --single-transaction, so it does not lock the tenant's tables.

    🧹 Tables & Data Reset

    Read-only inventory of the instance's tables, with the same grouping the reset uses: transactional data is safe to empty, reference data is listed in every transaction, and protected tables (users, licensing, ACL and statutory seeds) can never be wiped.

    Reading tables…

    TableRows (approx.)Group
    Loading…

    Row counts come from information_schema and are approximate for InnoDB. Reset data opens the guarded flow: a full dump first, the tenant ID re-typed, your own console password, then only the tables you tick — protected tables are refused server-side.

    🧬 Schema Health

    Two independent signals: a scan of the instance's app.log for a request that already failed with 1054/1364, and the model-aware drift report that says which columns will fail next. The deep check needs maintenance access, which the card offers to enable — and repair is additive only, after a full dump.

    Pick an instance…

    Console Users

    Manage who can access this deployment console.
    UsernameNameRoleCreated

    Settings

    Runtime sources, provisioning defaults, and the Hestia connection.

    🧩 Applications

    One console, several products. Every application keeps its own source paths, port range, service user and start command. A deployment records the application it belongs to, so changing the wizard default never moves an existing instance.

    📁 Shared Runtime Sources

    Legacy Dira360 sources — these are the same paths as the Dira360 card above (they are mirrored into it on save). Dira School and Dira Hotel have their own paths in Applications.

    🌐 Provisioning

    Defaults used by the deployment wizard.

    Deployment ports are never typed in: the console probes this server and assigns the next free port. Each application owns a separate range — see Settings → Applications (Dira360 56001–56999, Dira School 57001–57999, Dira Hotel 58001–58999).

    🔌 Hestia Connection

    Credentials for the Hestia Control Panel API. Values are masked — leave blank to keep the existing secret.

    🛟 Configuration Safety

    config.json holds the console users, the Hestia connection and every deployed instance. Each write keeps a timestamped copy of the previous version and every deploy leaves a named restore point, so a bad config can be rolled back — and if the instance list is ever lost, it can be rebuilt from what is actually running on this server (systemd units plus the tenants' own .env files, secrets included).

    Loading…

    Backup history — newest first

    Loading…

    📄 Instance Logs — …

    Loading logs…

    Are you sure?

    🔑 Secrets Regenerated

    The JWT/session/encryption secrets for have been rotated.

    Action required: restart the tenant to apply the new secrets.

    + Add Console User

    Issue License - …

    Renew License - …

    Current expiry: —

    The tenant will keep its currently licensed package if you leave this as "Keep current package".

    Import Vendor RSA Key Pair

    ✏️ Edit Admin — …

    Enter your console password to unlock and edit tenant admin credentials.

    🔑 New Admin Password

    A new password was generated for … (…):

    Share this with the tenant admin. They can change it after logging in.

    Delete Instance - …

    DANGER: Database backup first, then Hestia domain + DB + files + systemd removed. Cannot be undone.

    Confirm

    Your own console login password — not a tenant password.

    🧹 Reset Data — …

    DANGER: the tables you tick are emptied with TRUNCATE — the rows are gone and auto-increment counters reset. A full database backup is created automatically before anything is deleted. Protected tables (users, licensing/system settings, routes/roles, chart of accounts, seeded statutory data) can never be selected.

    Your own console login password — not the tenant admin password.

    📱 M-Pesa (Daraja) — …

    Saves straight into the tenant's .env and restarts its service — this is the only in-console way to change M-Pesa settings after a deploy. Leave a credential blank to keep the value already stored there (secrets are never shown).

    Production credentials must all be present before switching Environment to Production — the save is rejected otherwise (every STK push would fail). The callback base must be this tenant's public https host: Safaricom rejects internal ports and private hosts. Sandbox credentials can still be kept alongside as MPESA_SANDBOX_* in the tenant .env — the environment decides which pair is preferred, the other one is the fallback.

    🗃 Pool size — …

    Writes DB_POOL_MAX into this tenant's .env. Lowering it is how you give connections back to the fleet without touching anyone else.