Advanced Deployment
Advanced Deployment
This chapter explains the Majora runtime layout and how to tune or customize deployments.
Directory Layout
Majora is written in Java (Spring Boot) with a customized Undertow container. The release package is a compressed directory containing:
bin/: startup scripts that locate the JRE and launch the Spring Boot application.assets/: database schema (ddl.sql) and theproguard.mapfile used to de-obfuscate stack traces when working with support.conf/: editable configuration and runtime assets.lib/: Java dependencies as well as Majora’s compiled classes.logs/: runtime logs, including business logs, archived errors, metrics, and console output.
During runtime, additional files such as licenses and version markers are generated alongside logs.
Configuration Highlights
conf/application.properties: Spring Boot configuration (web port, database connection, etc.).conf/auth/: iinti licensing system (authorization logs, machine ID, license ticket)._build_config.properties: build metadata so you can trace issues back to specific releases.conf/static/*: frontend assets produced by the React build. You can replace them with your own build to customize the UI.conf/static/majora-doccontains the generated documentation site.
Scripts
- Linux:
bin/startup.shdetects existing processes and restarts them safely. - Windows:
bin/MajoraV3Main.batbootstraps the service. Remember that the script itself does not daemonize the process—you need to keep the window open or create a service wrapper.
Distributed Deployment
Majora’s single-node performance is high enough for most workloads, so scaling vertically is usually sufficient. If you need high availability, deploy multiple Majora nodes that share the same MySQL instance:
- Install Majora on each server but point them all to one MySQL database so configuration and state stay consistent.
- Ensure the nodes can reach each other over the web port to propagate configuration changes.
Docker-Based HA
With Docker or Docker Compose, adopt a 1 + N topology (one MySQL container, N Majora containers). Modify the compose file to run a single MySQL service and multiple Majora services. The all-in-one image cannot be used for clustering because MySQL is bundled inside the same container and is not exposed externally.
Client Failover
The client supports multiple server addresses:
- Domain-based: Point the Majora domain to several IPs. The client resolves all addresses and automatically performs failover. Update the DNS records to adjust the server pool.
- Static list: Specify multiple IP addresses directly in the config.
Docker Concepts Recap
We recommend Docker for most deployments, especially if your team is not focused on Java operations.
- Containers bundle the full runtime so you can launch Majora with a single command.
- Port mapping (
-p 80:6879,-p 30000-30200:30000-30200) exposes container ports to the host and the outside world. - Volume mapping persists important data outside the container:
- MySQL data:
~/majora-mysql-data:/var/lib/mysql - License files:
~/majora-iinti-auth:/opt/majora/conf/auth - Logs (optional): map the log directory if you want to inspect logs on the host.
- MySQL data:
