Files
supermq/docker/.env
T
b1ackd0t b3e2f41194 NOISSUE - Add Alarms (#106)
* WIP: alarms service

* fix(alarms): remove rule entity since it is not stored here

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* test(alarms): add tests cases for invalid alarms

* feat(alarms): add authorization

* feat(alarms): add docker deployment files

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* fix: update go mod file

* feat(alarms): support filtering by resolved_by, updated_by and severity

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* style: fix linter errors

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* fix(alarms): provide correct otel naming for create alarm

Fixes https://github.com/absmach/magistrala/pull/106#discussion_r2030151971

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* fix(alarms): group routes appropriately

Resolves https://github.com/absmach/magistrala/pull/106#discussion_r2030160891

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* fix(alarms): extract alarm id from url path rather than query params

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* fix(alarms): add all status to help in decoding

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* style(alarms): maintain consistent import as naming for supermq api package

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* refactor(alarms): update supermq dependecy to the latest

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* fix(alarms): Add domains gRPC service config to alarms service

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* test(alarms): all CRUD operations from the service

Return empty results instead of nil

This standardizes error responses across alarm endpoints to return empty
result structs rather than nil. Also renames entityReq to alarmReq and
adds HTTP status codes for created/deleted alarms.

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* test(alarms): fix failing tests due to introduction of context on sdk

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* fix(alarms): remove channel id

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* fix(alarms): standardize error handling across CRUD operations

Updated error responses to use specific repository errors for consistency

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* feat(alarms): add assignment fields to Alarm model and database

Introduced AssignedAt and AssignedBy fields to the Alarm struct and updated the database schema accordingly. Enhanced the UpdateAlarm function to handle these new fields, ensuring proper assignment tracking in the alarms system.

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* feat(alarms): enhance Alarm model with measurement attributes

Updated the Alarm struct to include Measurement, Value, Unit, and Cause fields. Modified the validation logic to ensure these fields are present. Adjusted logging and tracing middleware to reflect the new attributes. Updated database schema and related functions to accommodate these changes, ensuring comprehensive alarm data management.

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* feat(alarms): consume events from pubsub for creation of alarms

Removed session dependencies from CreateAlarm method and enhanced alarm validation to ensure all required fields are present

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* style(alarms): add newline at the end of docker compose

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* fix(alarms): Add assignee id and metadata fields when consuming messages

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* feat(alarms): add acknowledged field

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* feat(alarms): Add threshold value for the specific measurement

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* feat(alarms): Add channel, thing, and subtopic fields to Alarm model

This change adds required fields for tracking alarm sources and reorganizes
alarm-related fields for better grouping. Alarms now track the channel,
thing, and subtopic that triggered them, along with domain and rule info.

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* test(alarms): add service layer tests

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* fix(alarms): consume created at from message rather than creating it

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* feat(alarms): ready alarm as a gob encoded object

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* fix(alarms): read alarms from alarms queue and remove transformer

g

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* feat(alarms): update version of supermq

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* feat(alarms): add gob transformer

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* fix(alarms): rename thing id to client id

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* fix(alarms): create alarms stream

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* fix(alarms): check on logic to create new alarm

create new alarm if severity, status, subtopic changes
enhance logging with additional details for alarms management

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* remove conusmer and use pubsub

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>

* fix(alarms): use build tags for rabbitmq and nats

* fix(alarms): add health and metrics endpoint

* fix(magistrala): use supermq as build flags to see version and commit

* fix(alarms): use js config

* fix(alarms): remove validation when updating an alarm

fix authorization too

---------

Signed-off-by: Rodney Osodo <socials@rodneyosodo.com>
2025-04-15 19:32:09 +02:00

341 lines
10 KiB
Bash

# Copyright (c) Abstract Machines
# SPDX-License-Identifier: Apache-2.0
# Docker: Environment variables in Compose
## NginX
SMQ_NGINX_HTTP_PORT=80
SMQ_NGINX_SSL_PORT=443
SMQ_NGINX_MQTT_PORT=1883
SMQ_NGINX_MQTTS_PORT=8883
## Nats
SMQ_NATS_PORT=4222
SMQ_NATS_HTTP_PORT=8222
SMQ_NATS_JETSTREAM_KEY=u7wFoAPgXpDueXOFldBnXDh4xjnSOyEJ2Cb8Z5SZvGLzIZ3U4exWhhoIBZHzuNvh
SMQ_NATS_URL=nats://nats:${SMQ_NATS_PORT}
# Configs for nats as MQTT broker
SMQ_NATS_HEALTH_CHECK=http://nats:${SMQ_NATS_HTTP_PORT}/healthz
SMQ_NATS_WS_TARGET_PATH=
SMQ_NATS_MQTT_QOS=1
## Message Broker
SMQ_MESSAGE_BROKER_TYPE=nats
SMQ_MESSAGE_BROKER_URL=${SMQ_NATS_URL}
## Redis
SMQ_REDIS_TCP_PORT=6379
SMQ_REDIS_URL=redis://es-redis:${SMQ_REDIS_TCP_PORT}/0
## Event Store
SMQ_ES_TYPE=${SMQ_MESSAGE_BROKER_TYPE}
SMQ_ES_URL=${SMQ_MESSAGE_BROKER_URL}
## Jaeger
SMQ_JAEGER_COLLECTOR_OTLP_ENABLED=true
SMQ_JAEGER_FRONTEND=16686
SMQ_JAEGER_OLTP_HTTP=4318
SMQ_JAEGER_URL=http://jaeger:4318/v1/traces
SMQ_JAEGER_TRACE_RATIO=1.0
SMQ_JAEGER_MEMORY_MAX_TRACES=5000
## Call home
SMQ_SEND_TELEMETRY=false
## Postgres
SMQ_POSTGRES_MAX_CONNECTIONS=100
## Core Services
#### Auth Client Config
SMQ_AUTH_URL=auth:9001
SMQ_AUTH_GRPC_URL=auth:7001
SMQ_AUTH_GRPC_TIMEOUT=300s
SMQ_AUTH_GRPC_CLIENT_CERT=${GRPC_MTLS:+./ssl/certs/auth-grpc-client.crt}
SMQ_AUTH_GRPC_CLIENT_KEY=${GRPC_MTLS:+./ssl/certs/auth-grpc-client.key}
SMQ_AUTH_GRPC_CLIENT_CA_CERTS=${GRPC_MTLS:+./ssl/certs/ca.crt}
#### Clients Client Config
SMQ_CLIENTS_URL=http://clients:9006
SMQ_CLIENTS_GRPC_URL=clients:7006
SMQ_CLIENTS_GRPC_TIMEOUT=300s
SMQ_CLIENTS_GRPC_CLIENT_CERT=${GRPC_MTLS:+./ssl/certs/clients-grpc-client.crt}
SMQ_CLIENTS_GRPC_CLIENT_KEY=${GRPC_MTLS:+./ssl/certs/clients-grpc-client.key}
SMQ_CLIENTS_GRPC_CLIENT_CA_CERTS=${GRPC_MTLS:+./ssl/certs/ca.crt}
#### Channels Client Config
SMQ_CHANNELS_URL=http://channels:9005
SMQ_CHANNELS_GRPC_URL=channels:7005
SMQ_CHANNELS_GRPC_TIMEOUT=300s
SMQ_CHANNELS_GRPC_CLIENT_CERT=${GRPC_MTLS:+./ssl/certs/channels-grpc-client.crt}
SMQ_CHANNELS_GRPC_CLIENT_KEY=${GRPC_MTLS:+./ssl/certs/channels-grpc-client.key}
SMQ_CHANNELS_GRPC_CLIENT_CA_CERTS=${GRPC_MTLS:+./ssl/certs/ca.crt}
#### Domains Client Config
SMQ_DOMAINS_URL=http://domains:9003
SMQ_DOMAINS_GRPC_URL=domains:7003
SMQ_DOMAINS_GRPC_TIMEOUT=300s
SMQ_DOMAINS_GRPC_CLIENT_CERT=${GRPC_MTLS:+./ssl/certs/domains-grpc-client.crt}
SMQ_DOMAINS_GRPC_CLIENT_KEY=${GRPC_MTLS:+./ssl/certs/domains-grpc-client.key}
SMQ_DOMAINS_GRPC_CLIENT_CA_CERTS=${GRPC_MTLS:+./ssl/certs/ca.crt}
### SpiceDB Datastore config
SMQ_SPICEDB_DB_USER=supermq
SMQ_SPICEDB_DB_PASS=supermq
SMQ_SPICEDB_DB_NAME=spicedb
SMQ_SPICEDB_DB_PORT=5432
### SpiceDB config
SMQ_SPICEDB_PRE_SHARED_KEY="12345678"
SMQ_SPICEDB_SCHEMA_FILE="/schema.zed"
SMQ_SPICEDB_HOST=supermq-spicedb
SMQ_SPICEDB_PORT=50051
SMQ_SPICEDB_DATASTORE_ENGINE=postgres
### UI
SMQ_UI_PATH_PREFIX=/ui
### RE
MG_RE_LOG_LEVEL=debug
MG_RE_HTTP_HOST=re
MG_RE_HTTP_PORT=9008
MG_RE_HTTP_SERVER_CERT=
MG_RE_HTTP_SERVER_KEY=
MG_RE_DB_HOST=re-db
MG_RE_DB_PORT=5432
MG_RE_DB_USER=magistrala
MG_RE_DB_PASS=magistrala
MG_RE_DB_NAME=rules_engine
MG_RE_DB_SSL_MODE=disable
MG_RE_DB_SSL_CERT=
MG_RE_DB_SSL_KEY=
MG_RE_DB_SSL_ROOT_CERT=
MG_RE_INSTANCE_ID=
MG_RE_EMAIL_TEMPLATE=re.tmpl
MG_EMAIL_HOST=smtp.mailtrap.io
MG_EMAIL_PORT=2525
MG_EMAIL_USERNAME=18bf7f70705139
MG_EMAIL_PASSWORD=2b0d302e775b1e
MG_EMAIL_FROM_ADDRESS=from@example.com
MG_EMAIL_FROM_NAME=Example
MG_EMAIL_TEMPLATE=email.tmpl
### Alarms
MG_ALARMS_LOG_LEVEL=debug
MG_ALARMS_HTTP_HOST=alarms
MG_ALARMS_HTTP_PORT=8050
MG_ALARMS_HTTP_SERVER_CERT=
MG_ALARMS_HTTP_SERVER_KEY=
MG_ALARMS_DB_HOST=alarms-db
MG_ALARMS_DB_PORT=5432
MG_ALARMS_DB_USER=magistrala
MG_ALARMS_DB_PASS=magistrala
MG_ALARMS_DB_NAME=alarms
MG_ALARMS_DB_SSL_MODE=disable
MG_ALARMS_DB_SSL_CERT=
MG_ALARMS_DB_SSL_KEY=
MG_ALARMS_DB_SSL_ROOT_CERT=
MG_ALARMS_INSTANCE_ID=
### Certs
SMQ_ADDONS_CERTS_PATH_PREFIX=./
## Addon Services
### Bootstrap
MG_BOOTSTRAP_LOG_LEVEL=debug
MG_BOOTSTRAP_ENCRYPT_KEY=v7aT0HGxJxt2gULzr3RHwf4WIf6DusPp
MG_BOOTSTRAP_EVENT_CONSUMER=bootstrap
MG_BOOTSTRAP_HTTP_HOST=bootstrap
MG_BOOTSTRAP_HTTP_PORT=9013
MG_BOOTSTRAP_HTTP_SERVER_CERT=
MG_BOOTSTRAP_HTTP_SERVER_KEY=
MG_BOOTSTRAP_DB_HOST=bootstrap-db
MG_BOOTSTRAP_DB_PORT=5432
MG_BOOTSTRAP_DB_USER=magistrala
MG_BOOTSTRAP_DB_PASS=magistrala
MG_BOOTSTRAP_DB_NAME=bootstrap
MG_BOOTSTRAP_DB_SSL_MODE=disable
MG_BOOTSTRAP_DB_SSL_CERT=
MG_BOOTSTRAP_DB_SSL_KEY=
MG_BOOTSTRAP_DB_SSL_ROOT_CERT=
MG_BOOTSTRAP_INSTANCE_ID=
### Provision
MG_PROVISION_CONFIG_FILE=/configs/config.toml
MG_PROVISION_LOG_LEVEL=debug
MG_PROVISION_HTTP_PORT=9016
MG_PROVISION_ENV_CLIENTS_TLS=false
MG_PROVISION_SERVER_CERT=
MG_PROVISION_SERVER_KEY=
MG_PROVISION_USERS_LOCATION=http://users:9002
MG_PROVISION_CLIENTS_LOCATION=http://clients:9006
MG_PROVISION_USER=
MG_PROVISION_USERNAME=
MG_PROVISION_PASS=
MG_PROVISION_API_KEY=
MG_PROVISION_CERTS_SVC_URL=http://certs:9019
MG_PROVISION_X509_PROVISIONING=false
MG_PROVISION_BS_SVC_URL=http://bootstrap:9013
MG_PROVISION_BS_CONFIG_PROVISIONING=true
MG_PROVISION_BS_AUTO_WHITELIST=true
MG_PROVISION_BS_CONTENT=
MG_PROVISION_CERTS_HOURS_VALID=2400h
MG_PROVISION_CERTS_RSA_BITS=2048
MG_PROVISION_INSTANCE_ID=
### Postgres
MG_POSTGRES_HOST=postgres
MG_POSTGRES_PORT=5432
MG_POSTGRES_USER=supermq
MG_POSTGRES_PASS=supermq
MG_POSTGRES_NAME=messages
MG_POSTGRES_SSL_MODE=disable
MG_POSTGRES_SSL_CERT=
MG_POSTGRES_SSL_KEY=
MG_POSTGRES_SSL_ROOT_CERT=
### Postgres Writer
MG_POSTGRES_WRITER_LOG_LEVEL=debug
MG_POSTGRES_WRITER_CONFIG_PATH=/config.toml
MG_POSTGRES_WRITER_HTTP_HOST=postgres-writer
MG_POSTGRES_WRITER_HTTP_PORT=9007
MG_POSTGRES_WRITER_HTTP_SERVER_CERT=
MG_POSTGRES_WRITER_HTTP_SERVER_KEY=
MG_POSTGRES_WRITER_INSTANCE_ID=
### Postgres Reader
MG_POSTGRES_READER_LOG_LEVEL=debug
MG_POSTGRES_READER_HTTP_HOST=postgres-reader
MG_POSTGRES_READER_HTTP_PORT=9009
MG_POSTGRES_READER_GRPC_HOST=postgres-reader
MG_POSTGRES_READER_GRPC_PORT=7009
MG_POSTGRES_READER_HTTP_SERVER_CERT=
MG_POSTGRES_READER_HTTP_SERVER_KEY=
MG_POSTGRES_READER_INSTANCE_ID=
MG_POSTGRES_READER_GRPC_URL=postgres-reader:7011
MG_POSTGRES_READER_GRPC_TIMEOUT=300s
MG_POSTGRES_READER_GRPC_CLIENT_CERT=${GRPC_MTLS:+./ssl/certs/readers-grpc-client.crt}
MG_POSTGRES_READER_GRPC_CLIENT_CA_CERTS=${GRPC_MTLS:+./ssl/certs/ca.crt}
MG_POSTGRES_READER_GRPC_CLIENT_KEY=${GRPC_MTLS:+./ssl/certs/readers-grpc-client.key}
MG_POSTGRES_READER_GRPC_SERVER_CERT=${GRPC_MTLS:+./ssl/certs/readers-grpc-server.crt}${GRPC_TLS:+./ssl/certs/readers-grpc-server.crt}
MG_POSTGRES_READER_GRPC_SERVER_KEY=${GRPC_MTLS:+./ssl/certs/readers-grpc-server.key}${GRPC_TLS:+./ssl/certs/readers-grpc-server.key}
MG_POSTGRES_READER_GRPC_SERVER_CA_CERTS=${GRPC_MTLS:+./ssl/certs/ca.crt}${GRPC_TLS:+./ssl/certs/ca.crt}
### Timescale
MG_TIMESCALE_HOST=timescale
MG_TIMESCALE_PORT=5432
MG_TIMESCALE_USER=supermq
MG_TIMESCALE_PASS=supermq
MG_TIMESCALE_NAME=supermq
MG_TIMESCALE_SSL_MODE=disable
MG_TIMESCALE_SSL_CERT=
MG_TIMESCALE_SSL_KEY=
MG_TIMESCALE_SSL_ROOT_CERT=
### Timescale Writer
MG_TIMESCALE_WRITER_LOG_LEVEL=debug
MG_TIMESCALE_WRITER_CONFIG_PATH=/config.toml
MG_TIMESCALE_WRITER_HTTP_HOST=timescale-writer
MG_TIMESCALE_WRITER_HTTP_PORT=9012
MG_TIMESCALE_WRITER_HTTP_SERVER_CERT=
MG_TIMESCALE_WRITER_HTTP_SERVER_KEY=
MG_TIMESCALE_WRITER_INSTANCE_ID=
### Timescale Reader
MG_TIMESCALE_READER_LOG_LEVEL=debug
MG_TIMESCALE_READER_HTTP_HOST=timescale-reader
MG_TIMESCALE_READER_HTTP_PORT=9011
MG_TIMESCALE_READER_GRPC_HOST=timescale-reader
MG_TIMESCALE_READER_GRPC_PORT=7011
MG_TIMESCALE_READER_HTTP_SERVER_CERT=
MG_TIMESCALE_READER_HTTP_SERVER_KEY=
MG_TIMESCALE_READER_INSTANCE_ID=
MG_TIMESCALE_READER_GRPC_URL=timescale-reader:7011
MG_TIMESCALE_READER_GRPC_TIMEOUT=300s
MG_TIMESCALE_READER_GRPC_CLIENT_CERT=${GRPC_MTLS:+./ssl/certs/reader-grpc-client.crt}
MG_TIMESCALE_READER_GRPC_CLIENT_CA_CERTS=${GRPC_MTLS:+./ssl/certs/ca.crt}
MG_TIMESCALE_READER_GRPC_CLIENT_KEY=${GRPC_MTLS:+./ssl/certs/readers-grpc-client.key}
MG_TIMESCALE_READER_GRPC_SERVER_CERT=${GRPC_MTLS:+./ssl/certs/readers-grpc-server.crt}${GRPC_TLS:+./ssl/certs/readers-grpc-server.crt}
MG_TIMESCALE_READER_GRPC_SERVER_KEY=${GRPC_MTLS:+./ssl/certs/readers-grpc-server.key}${GRPC_TLS:+./ssl/certs/readers-grpc-server.key}
MG_TIMESCALE_READER_GRPC_SERVER_CA_CERTS=${GRPC_MTLS:+./ssl/certs/ca.crt}${GRPC_TLS:+./ssl/certs/ca.crt}
### GRAFANA and PROMETHEUS
SMQ_PROMETHEUS_PORT=9090
SMQ_GRAFANA_PORT=3000
SMQ_GRAFANA_ADMIN_USER=supermq
SMQ_GRAFANA_ADMIN_PASSWORD=supermq
# Docker image tag
MG_RELEASE_TAG=latest
# UI components and RE
## Dashboards
MG_UI_BACKEND_LOG_LEVEL=debug
MG_UI_BACKEND_HTTP_HOST=ui-backend
MG_UI_BACKEND_HTTP_PORT=9097
MG_UI_BACKEND_HTTP_SERVER_CERT=
MG_UI_BACKEND_HTTP_SERVER_KEY=
MG_UI_BACKEND_INSTANCE_ID=
MG_UI_VERIFICATION_TLS=false
MG_UI_CONTENT_TYPE=application/senml+json
#### Auth GRPC Client Config
MG_AUTH_GRPC_URL=auth:7001
MG_AUTH_GRPC_TIMEOUT=300s
MG_AUTH_GRPC_CLIENT_CERT=${GRPC_MTLS:+./ssl/certs/auth-grpc-client.crt}
MG_AUTH_GRPC_CLIENT_KEY=${GRPC_MTLS:+./ssl/certs/auth-grpc-client.key}
MG_AUTH_GRPC_CLIENT_CA_CERTS=${GRPC_MTLS:+./ssl/certs/ca.crt}
## Postgres
MG_UI_BACKEND_DB_HOST=ui-backend-db
MG_UI_BACKEND_DB_PORT=5432
MG_UI_BACKEND_DB_USER=supermq
MG_UI_BACKEND_DB_PASS=supermq
MG_UI_BACKEND_DB_NAME=supermq
MG_UI_BACKEND_DB_SSL_MODE=disable
MG_UI_BACKEND_DB_SSL_CERT=
MG_UI_BACKEND_DB_SSL_KEY=
MG_UI_BACKEND_DB_SSL_ROOT_CERT=
## UI
MG_DOMAINS_URL=http://domains:9003
MG_USERS_URL=http://users:9002
MG_CLIENTS_URL=http://clients:9006
MG_CHANNELS_URL=http://channels:9005
MG_GROUPS_URL=http://groups:9004
MG_BOOTSTRAP_URL=http://bootstrap:9013
MG_CERTS_URL=http://certs:9019
MG_HTTP_ADAPTER_URL=http://http-adapter:8008
MG_READER_URL=http://timescale-reader:9011
MG_UI_BACKEND_URL=http://ui-backend:9097
MG_JOURNAL_URL=http://journal:9021
MG_BILLING_URL=http://billing:9022
MG_GOOGLE_CLIENT_ID=
MG_GOOGLE_CLIENT_SECRET=
MG_GOOGLE_REDIRECT_URL=http://localhost:3000/oauth/callback/google
MG_GOOGLE_STATE=pGXVNhEeKfycuBzk5InlSfMlEU9UrhlkTUOSqhsgDzXP2Y4RsN
MG_UI_NAME="Magistrala UI" # Organization name
MG_UI_BASE_PATH=/
NEXT_PUBLIC_MG_UI_BASE_PATH=/
NEXT_PUBLIC_NEXTAUTH_BASE_PATH=/api/auth
NEXT_PUBLIC_BACKEND_URL=http://ui-backend:9097
NEXTAUTH_SECRET=4WdW0Z0tAOyQ/ZAI3YLVV/wNu+yUZXBLDDQ3AGrgfJ4=
NEXTAUTH_URL=http://localhost:3000
NEXT_PUBLIC_HOST_URL=http://localhost:3000
MG_PROFILE_PICTURE_URL=http://ui-backend:9097
MG_RE_URL=http://re:9008
MG_PROTOCOL="http"
MG_HOSTNAME="ui-backend"
MG_PORT="9097"
MG_PATHNAME="/**"
#Customer support email variables
SUPPORT_EMAIL=
SUPPORT_EMAIL_PASS=
# Docker image tag
MG_RELEASE_TAG=latest
# runtime environment
RUNTIME_ENV=production # to be changed to production before production deployment
MG_UI_DOCKER_ACCEPT_EULA=false