Installation - on-premise
OmniMES installation
The complete OmniMES deployment procedure - from downloading Docker, through license activation, Redash and the Ollama AI server configuration, to changing passwords, updating and uninstalling.
1. Prerequisites
Before installation, make sure the following ports are free on the target computer:
Port | Service |
|---|---|
80 | Web interface (frontend) |
8091 | Backend API |
5000 | Redash (reports) |
1883 | MQTT broker (TCP) |
1884 | MQTT broker (WebSocket) |
8083 | EMQX - broker administration panel |
Docker is also required: https://docs.docker.com/get-docker/
The recommended environment for a production server is Linux (Debian / Ubuntu Server LTS) with Docker Engine. Docker Desktop for Windows is suitable for testing and demonstrations - why we do not recommend Windows Server is explained in the Hardware requirements chapter and in section 10.4.
2. Step-by-step installation
Download and install the Docker version appropriate for your system.
From the installation package, run the script matching your operating system:
Windows:
install_all_windows.batLinux:
install_all_linux.sh
These scripts install the full version of OmniMES together with the components: API, Stream, WWW, Redash and Ollama.
Linux - granting permissions (before the first run):
chmod +x install_linux.sh uninstall.sh updated_api.sh updated_www.sh ./install_all_linux.shWindows - the "Windows protected your PC" message Click More info → Run anyway.
3. First login
3.1. Opening the application in a browser
After the script finishes, open a browser and type one of the following addresses into the address bar:
localhost127.0.0.1the local IP address of the computer where the software was installed
The OmniMES login screen will appear.
3.2. Filling in the login screen
The login form has three fields - fill them in as follows:
Field | What to enter | Notes |
|---|---|---|
API URL | the OmniMES backend address, e.g. | This is not the browser address - it is the address of the API service, which always runs on port 8091. If OmniMES runs on another computer, replace |
Username |
| The default account created after installation. |
Password |
| The default factory password. |
ℹ️ Common mistake: in the API URL field you enter the address of the backend service (port
8091), not the address from which you open the browser (port80). These addresses usually differ by port and may point to different hosts (e.g. the frontend locally, the API on a server).
⚠️ Security: The factory password should be changed immediately after the first login.
4. License activation
After logging in, the system automatically takes you to the activation screen. Enter the license key provided with the package - the product is ready to use.
5. Redash configuration (reports)
Redash is the built-in OmniMES reporting engine, available locally at:
http://localhost:5000/ℹ️ After installation the Redash database is restored automatically - together with a ready-made data source, queries and dashboards. There is no need to manually add a JSON data source or configure the connection. Just follow the three steps below.
5.1. Log in to Redash
Open http://localhost:5000/ and log in with the default credentials:
Field | Default value |
|---|---|
| |
Password |
|
5.2. Change the default login and password
For security reasons change the default email and password immediately: in Redash click Settings (bottom-left corner) → Account and set your own credentials.
5.3. Generate a token and paste it into OmniMES
In Redash go to Settings → Account.
In the API Key section click Regenerate to generate a new token, then copy it.
In OmniMES go to Settings → Redash and fill in:
Redash address:
localhost:5000API Key: the freshly generated token you copied
From now on OmniMES is connected to Redash - you can use the ready-made reports and dashboards.
6. Ollama configuration (AI assistant)
The Ollama server provides local language models for the built-in AI assistant in OmniMES. It is installed automatically together with the full version of the system (the install_all_* scripts).
6.1. Hardware requirements
The default installation uses the CPU, so performance depends on the processor's power:
CPU (minimum): a 24-core desktop processor or stronger.
GPU (recommended): an NVIDIA 3070 series card or higher (one or more, depending on the chosen AI model).
💡 Recommendation: For larger deployments, run Ollama on a separate server (Docker or natively).
6.2. Installation on a separate server
Docker image: https://hub.docker.com/r/ollama/ollama
Linux: https://github.com/ollama/ollama/blob/main/docs/linux.md
Windows: https://github.com/ollama/ollama/blob/main/docs/windows.md
docker-compose.yaml
version: '3.8'
services:
ollama:
image: ollama/ollama
environment:
- OLLAMA_ORIGINS="*"
- OLLAMA_HOST="0.0.0.0:11434"
container_name: ollama
ports:
- "11434:11434"
volumes:
- ollama:/root/.ollama
restart: unless-stopped
volumes:
ollama:For external access: host = 0.0.0.0, port = 11434, CORS = "*" (or narrowed down as needed).
6.3. Downloading an AI model
List of supported models: https://ollama.com/library
Downloading the chosen model:
ollama pull llama36.4. Linking with OmniMES
In OmniMES Settings:
Select the AI type: internal.
Enter the Ollama server address (e.g.
http://192.168.3.100:11434).The AI model version field should show the list of downloaded models.
If the connection fails, an error message appears in the field - check the server address and the open ports.
7. Changing system passwords
The PostgreSQL database or MQTT broker password is changed with the included **set_pass.py** script. The script operates on the running containers (docker compose exec database psql), so the OmniMES stack must be running, and the script itself only requires an installed Python and a working Docker - no extra libraries (no host, port, or old password needed). Run it in the directory containing the OmniMES stack docker-compose.yaml.
7.1. Changing the MQTT broker password (user emqx)
# Windows
py set_pass.py --newpassbroker NEW_BROKER_PASSWORD
# Linux / macOS
python3 set_pass.py --newpassbroker NEW_BROKER_PASSWORDThe script updates the MQTT emqx user password in the database, the stream .env file, and restarts the stream service.
7.2. Changing the PostgreSQL database password (user omni)
# Windows
py set_pass.py --newpassdb NEW_DATABASE_PASSWORD
# Linux / macOS
python3 set_pass.py --newpassdb NEW_DATABASE_PASSWORDThe script changes the omni user password, updates omnimes/.env, the EMQX auth configuration (emqx_auth_pgsql.conf), the API config.json and the stream .env, then restarts the broker, api and stream services - nothing has to be done manually.
8. System update
Each main component can be updated independently using dedicated scripts:
Component | Windows | Linux |
|---|---|---|
API |
|
|
Stream (MQTT / Sparkplug B) |
|
|
Frontend WWW |
|
|
Each script performs the sequence: pull → rebuild → restart the container.
💡 Linux: remember the permissions -
chmod +x updated_*.shbefore the first run.
8.1. Full environment rebuild
In case of problems (a damaged container, configuration inconsistency) you can force a rebuild:
OmniMES:
recreated_omnimes.bat(Windows)Redash:
recreated_redash.bat(Windows)
⚠️ The rebuild does not remove the
postgres_datavolume with the database data, but a backup is recommended before running it.
9. Uninstalling
9.1. Procedure
In the installation folder, run the script:
Windows:
uninstall.batLinux / macOS:
uninstall.sh
On Linux, remember to grant permissions first:
chmod +x uninstall.sh
./uninstall.sh9.2. Warning - data loss
⚠️ Uninstalling removes all containers, including the
**database**container (PostgreSQL + TimescaleDB), which stores the data from the production devices.Before uninstalling, back up the database - via Adminer (
http://localhost:8079) or withdocker compose exec database pg_dump -U omni -Fc -d data > data.dump(similarly for theomnidatabase). Restore:pg_restore.
10. Exposing OmniMES outside the computer
10.1. What to do when port 80 is busy?
By default the OmniMES web interface runs on port 80. If the port is busy:
Option A: free port 80 in the operating system (stop the service that uses it).
Option B: change the port mapping in
docker-compose.yaml- in thewwwsection change the left number from80:80to e.g.8080:80. After this, OmniMES will be available athttp://<address>:8080.
10.2. Exposing outside the local network
The configuration must be done on the router, directing traffic to the IP address of the computer where the system is installed. The required port forwarding:
Port(s) | Service |
|---|---|
80, 443 | Web server |
1883, 1884 | MQTT - external devices sending data to the broker |
8083 | WebSocket Secure (WSS) - the data stream for preview in monitoring |
10.3. Connecting an external device (HMI / gateway)
On the device (HMI panel, communication gateway, etc.) specify:
the OmniMES server address, e.g.
192.168.3.100the MQTT port:
1883(standard)the EMQX broker login data:
Login:
emqxPassword:
Fb7jCkux(factory - change it after deployment, see section 7)
10.4. Windows as a server (not recommended) - automatic Docker startup
We recommend running OmniMES on a Linux server with Docker Engine (see the Hardware requirements chapter). On Windows Server, Docker Desktop is not supported by its vendor, and the Linux containers run inside an additional virtual machine. An installation on Windows Server requires individual arrangements with the OmniMES team.
If the system has to run on Windows anyway, enable the "Start Docker Desktop when you log in" option in Docker Desktop. Keep in mind that Docker Desktop runs in the session of a logged-in user - after a restart (e.g. after Windows updates) OmniMES starts only once a user logs in.
11. Installation files - reference
11.1. Full installation
File | Description |
|---|---|
| The full OmniMES system on Linux (API + Stream + WWW + Redash + Ollama) |
| The full OmniMES system on Windows (API + Stream + WWW + Redash + Ollama) |
| Full installation without Ollama - Windows (faster, without LLM models) |
| Full installation without Ollama - Linux |
11.2. Modular installation
File | Description |
|---|---|
| Only the OmniMES base (API + Stream + WWW) - Windows |
| Only the OmniMES base - Linux / macOS |
| Only the Ollama server - Windows |
| Only the Ollama server - Linux |
11.3. Single-component updates
File | Description |
|---|---|
| Update of the API container (pull → rebuild → restart) |
| Update of the Stream module (MQTT / Sparkplug B) |
| Update of the WWW frontend |
11.4. Environment rebuild
File | Description |
|---|---|
| Rebuild of OmniMES - removes the containers and recreates them (Windows) |
| Rebuild of the Redash environment |
11.5. Uninstalling
File | Description |
|---|---|
| Full removal of OmniMES (together with the data!) |
| Removes only the base OmniMES installation (without Redash, without Ollama) |
| Removes only Ollama |
11.6. Tools
File | Description |
|---|---|
| Python script - changes the PostgreSQL database ( |
12. .env configuration files
The installation package contains two **.env** files that configure the system. Set them before the first run of the installation script.
12.1. omnimes/.env - OmniMES stack
Variable | Meaning |
|---|---|
| database superuser (default |
| database superuser password (change in production) |
| database host as seen from containers - |
| database port - |
| public API address as seen from the browser, e.g. |
| WWW frontend port (default |
12.2. redash/.env - Redash stack
Variable | Meaning |
|---|---|
| session/encryption secrets - change in production |
| Redis connection ( |
| connection to the |
| (optional) public Redash address - used to build links to public dashboards |
| (optional) SMTP mail server configuration - see the note below |
✉️ Redash SMTP mail - set it BEFORE installation (if needed). The
REDASH_MAIL_SERVER/REDASH_MAIL_PORT/REDASH_MAIL_USE_TLS/REDASH_MAIL_USE_SSL/REDASH_MAIL_USERNAME/REDASH_MAIL_PASSWORD/REDASH_MAIL_DEFAULT_SENDERfields are needed only for email alert notifications, user invitations and password reset. Redash works without them.
If you want emails → fill these fields with your own SMTP server before installation.
If you do not use email → these lines must stay commented out. Never leave an empty line like
REDASH_MAIL_PORT=- Redash runsint('')and the container goes into a restart loop.After editing
.env, recreate the container (docker compose up -d), not justrestart- Docker Compose reads.envwhen creating the container, not on restart.
13. Moving data to another server (database dumps)
The system can be moved with its data to another server. On the old server, create dumps from the database container, copy them to omnimes/database/base/ before the build, and the installation script will restore everything on the new server.
docker compose exec database pg_dump -U omni -Fc -d omni > omni.dump # configuration
docker compose exec database pg_dump -U omni -Fc -d omni_queue > omni_queue.dump # Django Q queue
docker compose exec database pg_dump -U omni -Fc -d mqtt > mqtt.dump # EMQX auth
docker compose exec database pg_dump -U omni -Fc -d redash > redash.dump # dashboards/queries/users
docker compose exec database pg_dump -U omni -Fc -d data > data.dump # telemetry (Timescale hypertable)Copy the selected files to instalka3/omnimes/database/base/ and run the installation.
File (optional) | What it restores |
|---|---|
| configuration - in practice the only one needed (admin + menu to log in) |
| queue / broker auth / Redash (transplant) |
| telemetry - must be |
ℹ️ No dumps = a fresh install: the schema is created by
migrate, and thedatadatabase is fed bystream. Details and accepted formats (.dump/.sql/.sql.gz) are described indatabase/base/README.md.