mo-install Reference / v5.0.0

AlmaLinux 9

miniOrange On-Premise IDP 5.0.0 installation runbook for AlmaLinux 9.

Package mgr
dnf
Init
systemd
Release
2022
Choose your database backend
Section 1

System Prep

Before installing any service, update the package repositories and install the tools the mo-installer and moctl depend on. AlmaLinux 9 is binary-compatible with RHEL 9, so most commands match the RHEL 9 path.

1.1 Update the system

sudo dnf update -y
sudo reboot

1.2 Enable the EPEL repository

AlmaLinux ships epel-release in its standard repositories.

sudo dnf install -y epel-release
sudo dnf update -y

1.3 Enable the CodeReady Linux Builder (CRB)

sudo dnf config-manager --set-enabled crb

1.4 Install required utilities

sudo dnf install -y unzip wget curl jq net-tools vim bash-completion tar lsof telnet firewalld

1.5 Configure the firewall

sudo systemctl enable --now firewalld

sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --permanent --add-port=8070/tcp
sudo firewall-cmd --permanent --add-port=8071/tcp
sudo firewall-cmd --permanent --add-port=8072/tcp
sudo firewall-cmd --permanent --add-port=6379/tcp
sudo firewall-cmd --permanent --add-port=5672/tcp
sudo firewall-cmd --permanent --add-port=15672/tcp

sudo firewall-cmd --reload

1.6 Set SELinux to permissive

sudo setenforce 0
sudo sed -i 's/^SELINUX=enforcing/SELINUX=permissive/' /etc/selinux/config
Section 2

Database

Section 3

Erlang + RabbitMQ

RabbitMQ is used by the IDP for internal messaging between microservices. It requires Erlang. Both are installed directly from the official RabbitMQ RPM releases on GitHub.

3.1 Install Erlang 26

sudo dnf install -y \
  https://github.com/rabbitmq/erlang-rpm/releases/download/v26.2.5.2/erlang-26.2.5.2-1.el8.x86_64.rpm \
  --nogpgcheck

Note. The published Erlang RPM is built for el8, but installs cleanly on RHEL 9 because of compatible runtime dependencies. There is no current el9-tagged build from upstream.

3.2 Install RabbitMQ 3.13.7

sudo dnf install -y \
  https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.13.7/rabbitmq-server-3.13.7-1.el8.noarch.rpm \
  --nogpgcheck

3.3 Enable and start the service

sudo systemctl enable --now rabbitmq-server
sudo systemctl status rabbitmq-server

3.4 Enable the management plugin

sudo rabbitmq-plugins enable rabbitmq_management
sudo systemctl restart rabbitmq-server

3.5 Verify

sudo rabbitmqctl status
sudo ss -tulnp | grep 5672

You should see a listener on :5672 (AMQP) and :15672 (management UI).

Values for the /initialize wizard

FieldValue
RabbitMQ Host127.0.0.1
AMQP Port5672
Mgmt UI Port15672
Default Loginguest / guest
Section 4

mo-installer

The miniOrange installer bundles Java 17 and Redis. You don’t install either manually. The installer auto-detects the OS and deploys the IDP services into /opt/tomcat/.

4.1 Download the installer

cd /opt
sudo wget https://miniorange.s3.us-east-1.amazonaws.com/public/installers/mo-installer-5.0.0.zip
sudo unzip mo-installer-5.0.0.zip -d mo-installer-5.0.0
cd /opt/mo-installer-5.0.0
ls -la

You should see:

.env.sh          Environment configuration (review before sourcing)
mo-installer.sh  Main installer script
moctl/           moctl CLI and bash completion

4.2 Review and source the environment file

less .env.sh
source .env.sh

Note. In v5.0.0, .env.sh does not contain database connection details. The DB connection is configured later through the browser UI at /initialize. Source the file as-is.

4.3 Set execute permissions

sudo chmod +x mo-installer.sh moctl/*.sh

4.4 Run the installer

sudo bash mo-installer.sh

Watch the output for failures. The installer covers:

  • Java 17 — installed automatically
  • Redis — installed and configured automatically
  • moctl — installed to /usr/bin/moctl with tab completion
  • IDP services — deployed to /opt/tomcat/

At the end of the run, the installer will print:

Next step: moctl service start

4.5 Start the four core services

moctl service start

The core services start in this order:

ServicePortPurpose
configserver8071Configuration
eurekaserver8070Service registry
gatekeeper8072API gateway
miniorange8080Main IDP service

4.6 Check service status

moctl service status

Only the four core services should be active at this point. Secondary services start after initialisation.

SymbolMeaning
● runningActive and registered in Eureka
△ registeringActive but not yet registered; wait and recheck
△ stoppedInactive
✗ failedFailed; check moctl log <service>

4.7 Open /initialize in a browser

https://<SERVER_IP>/initialize

You will see a self-signed certificate warning. Proceed past it.

Enter the values from the Database section above, plus the Redis and RabbitMQ values from Section 3 (Redis: 127.0.0.1:6379, no password by default).

After the wizard completes, the dashboard loads. Navigate to Settings → Base URL and set it to your final domain:

https://<your-domain>

4.8 Restart all services

This step starts the secondary services that depend on the completed schema.

moctl service restart

Wait 1–2 minutes for everything to register, then verify in the next section.

Section 5

Verify & Service Enablement

Confirm everything is running and registered. All commands here come from the source v5.0.0 guide.

5.1 Full service status

moctl service status

Every service should show ● running or ● reachable. If anything shows △ registering, wait 30 seconds and re-run.

5.2 Full diagnostics

moctl diagnose

Expected output includes:

Database connectivity reachable
Redis reachable
RabbitMQ reachable

5.3 Individual service status

systemctl status mo-idp-miniorange.service
systemctl status redis
systemctl status rabbitmq-server

5.4 Check all bound ports

sudo ss -tulnp | egrep '8080|8070|8071|8072|6379|5672'

For your DB:

DBPort
PostgreSQL5432
MySQL3306
MSSQL1433
Oracle1521

5.5 Preflight

moctl pre checks Java, the DB, Redis, and RabbitMQ reachability in one go.

moctl pre

Quick moctl reference

CommandPurpose
moctl service startStart all services in order
moctl service stopStop all services in reverse order
moctl service restartFull ordered restart
moctl service restart miniorangeRestart one named service
moctl log <service> -fLive tail logs
moctl log <service> --since 1hLogs from the past hour
moctl system memoryPer-service RSS memory
moctl jvm <service>Heap, threads, open file descriptors
moctl diagnose portsCheck that core ports are bound

Common issues

Issue: △ registering after a minute.

The service started but hasn’t completed its handshake with Eureka. Check the gatekeeper log:

moctl log gatekeeper --since 5min

Issue: PostgreSQL peer authentication failed.

You modified pg_hba.conf but didn’t restart. Run sudo systemctl restart postgresql-16.

Issue: SELinux denials in audit.log.

You skipped section 1.5. Set setenforce 0 and re-check getenforce.

Issue: Tomcat stale PID after a crash.

sudo rm -f /opt/tomcat/latest/temp/*.pid
moctl service restart miniorange