mo-install Reference / v5.0.0

Amazon Linux 2023

miniOrange On-Premise IDP 5.0.0 installation runbook for Amazon Linux 2023.

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

System Prep

Amazon Linux 2023 is dnf-based and close to RHEL 9. The main differences come from the AWS-tuned defaults: no firewalld by default (relying on EC2 security groups), no subscription-manager, and pre-applied kernel parameters for cloud workloads.

1.1 Update the system

sudo dnf update -y
sudo reboot

1.2 Install required utilities

EPEL is not enabled by default on AL2023 and is not necessary: most utilities the installer needs are in the standard Amazon Linux repos.

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

1.3 Firewall: use Security Groups, not firewalld

AWS recommends managing inbound traffic at the EC2 Security Group level rather than on the host. In your VPC console, open the following inbound ports on the IDP instance’s security group:

PortSourcePurpose
8080Your office / VPN CIDRminiOrange UI
8070localhost onlyEureka (internal)
8071localhost onlyConfigserver (internal)
8072localhost onlyGatekeeper (internal)
6379localhost onlyRedis (bundled)
5672localhost onlyRabbitMQ AMQP
15672Your office CIDRRabbitMQ mgmt UI

If you prefer host-level firewalling on top of Security Groups, you can install firewalld:

sudo dnf install -y firewalld
sudo systemctl enable --now firewalld
sudo firewall-cmd --permanent --add-port={8080,8070,8071,8072,6379,5672,15672}/tcp
sudo firewall-cmd --reload

1.4 SELinux

AL2023 ships SELinux but defaults to permissive mode, so no change is needed.

getenforce

Expected output: Permissive.

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