Portainer Templates logo

Portainer Templates

OpenAMT OpenAMT

Stack

Cloud

OpenAMT Cloud Toolkit

Configuration

Type
Compose
Platform
linux
Env vars
POSTGRES_USER=''POSTGRES_PASSWORD=''MPS_USER=''MPS_PASSWORD=''MPS_COMMON_NAME=''MPS_SECRET=''VAULT_SECRET=''
Source

Template by portainer·Source

Notes

MPS password needs to be 8-32 characters including one uppercase, one lowercase letters, one base-10 digit and one special character.

Services

webui

Configuration

Image
intel/oact-webui:v2.1.0
Env vars
RPS_SERVER=https://${MPS_COMMON_NAME}/rpsMPS_SERVER=https://${MPS_COMMON_NAME}/mpsVAULT_SERVER=https://${MPS_COMMON_NAME}/vault

Image details

Pulls: 103k
User: intelsoftwarerepo
Created: Dec 17, 2021
Updated: 2 days ago
Status: active

rps

Configuration

Image
intel/oact-rps:v2.1.0
Env vars
RPS_WEBSOCKETTLS=trueRPSWEBPORT=8081RPSWEBSOCKETPORT=8080RPS_LOG_LEVEL=sillyRPS_DELAY_TIMER=12RPS_MQTT_ADDRESS=RPS_MPS_SERVER=http://mps:3000RPS_SECRETS_PATH=secret/data/RPS_VAULT_TOKEN=${VAULT_SECRET}RPS_VAULT_ADDRESS=http://vault:8200RPS_CONNECTION_STRING=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/rpsdb?sslmode=no-verify

Image details

Pulls: 140k
User: intelsoftwarerepo
Created: Dec 17, 2021
Updated: 18 days ago
Status: active

mps

Configuration

Image
intel/oact-mps:v2.1.0
Ports
4433:4433
Volumes
/mps-microservice/private : private-volume
Env vars
MPS_GENERATE_CERTS=trueMPS_COMMON_NAME=${MPS_COMMON_NAME}MPSPORT=4433MPSWEBPORT=3000MPS_DEBUG=trueMPS_WEB_ADMIN_USER=${MPS_USER}MPS_WEB_ADMIN_PASSWORD=${MPS_PASSWORD}MPS_HTTPS=trueMPS_TLS_OFFLOAD=falseMPS_LOG_LEVEL=sillyMPS_JWT_EXPIRATION=1440MPS_JWT_SECRET=${MPS_SECRET}MPS_JWT_ISSUER=9EmRJTbIiIb4bIeSsmgcWIjrR6HyETqcMPS_MQTT_ADDRESS=MPS_INSTANCE_NAME={{.Task.Name}}MPS_SECRETS_PATH=secret/data/MPS_VAULT_TOKEN=${VAULT_SECRET}MPS_VAULT_ADDRESS=http://vault:8200MPS_CONNECTION_STRING=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/mpsdb?sslmode=no-verify
Restart
always

Image details

Pulls: 127k
User: intelsoftwarerepo
Created: Dec 17, 2021
Updated: 18 days ago
Status: active

mpsrouter

Configuration

Image
intel/oact-mpsrouter:v2.0.0
Env vars
MPS_CONNECTION_STRING=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/mpsdb?sslmode=disablePORT=8003MPS_PORT=3000

Image details

Pulls: 78.2k
User: intelsoftwarerepo
Created: Dec 17, 2021
Updated: 19 days ago
Status: active

db

Configuration

Image
portainer/open-amt-cloud-toolkit-postgres:v2.1.0
Command
-c ssl=on -c ssl_cert_file=/var/lib/postgresql/server.crt -c ssl_key_file=/var/lib/postgresql/server.key
Ports
5432:5432
Env vars
POSTGRES_DB=rpsdbPOSTGRES_USER=${POSTGRES_USER}POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
Restart
always

Image details

Pulls: 2k
User: yiportainer
Created: Feb 03, 2022
Updated: 4 years ago
Status: active

vault

Configuration

Image
vault:latest
Ports
8200:8200
Env vars
VAULT_DEV_ROOT_TOKEN_ID=${VAULT_SECRET}VAULT_DEV_LISTEN_ADDRESS=0.0.0.0:8200

Image details

Pulls: 553.9M
User: library
Created: Jul 21, 2016
Updated: 2 years ago
Status: active

kong

Configuration

Image
kong:2.6
Command
kong,start,--vv
Ports
443:84438001:8001
Env vars
KONG_DATABASE=offKONG_CASSANDRA_CONTACT_POINTS=kong-databaseKONG_ADMIN_LISTEN=0.0.0.0:8001KONG_ADMIN_LISTEN_SSL=0.0.0.0:8444KONG_NGINX_DAEMON=offKONG_DECLARATIVE_CONFIG_STRING={"_format_version":"2.1","_transform":true,"services":[{"name":"mps-rest","host":"mpsrouter","port":8003,"tags":["mps"],"routes":[{"name":"mps-login-route","strip_path":true,"paths":["/mps/login"]},{"name":"mps-relay-route","strip_path":true,"paths":["/mps/ws"]},{"name":"mps-route","strip_path":true,"paths":["/mps"]}]},{"name":"rps-rest","host":"rps","port":8081,"tags":["rps"],"routes":[{"name":"rps-route","strip_path":true,"paths":["/rps"]}]},{"name":"rps-ws","host":"rps","port":8080,"tags":["rps"],"routes":[{"name":"rps-activate-route","strip_path":true,"paths":["/activate"]}]},{"name":"vault-api","host":"vault","port":8200,"tags":["vault"],"routes":[{"name":"vault-route","strip_path":true,"paths":["/vault"]}]},{"name":"web","host":"webui","port":80,"tags":["web"],"routes":[{"name":"web-route","paths":["/"]}]}],"plugins":[{"name":"cors"},{"name":"jwt","route":"rps-route","config":{"claims_to_verify":["exp"]}},{"name":"jwt","route":"mps-route","config":{"claims_to_verify":["exp"]}}],"consumers":[{"username":"admin"}],"jwt_secrets":[{"consumer":"admin","key":"9EmRJTbIiIb4bIeSsmgcWIjrR6HyETqc","secret":${MPS_SECRET}}]}KONG_PROXY_ERROR_LOG=/dev/stderrKONG_PROXY_ACCESS_LOG=/dev/stdoutKONG_ADMIN_ACCESS_LOG=/dev/stdoutKONG_ADMIN_ERROR_LOG=/dev/stderrKONG_DNS_ORDER=LAST,A,CNAMEKONG_UPSTREAM_KEEPALIVE_POOL_SIZE=0
Restart
always

Image details

Pulls: 358.1M
User: library
Created: Aug 31, 2016
Updated: 12 days ago
Status: active

mosquitto

Configuration

Image
eclipse-mosquitto
Ports
8883:8883

Image details

Pulls: 677.0M
User: library
Created: Dec 13, 2016
Updated: 1 month ago
Status: active

Standalone Install

Select an install method, to see config/commands for deploying OpenAMT

Installation method

Install on Portainer

Import all app templates into your Portainer instance, for easy 1-click deploys

  1. Ensure both Docker and Portainer are installed, and up-to-date
  2. Log into your Portainer web UI
  3. Under Settings → App Templates, paste the below URL
  4. Head to Home → App Templates, and the list of apps will show up
  5. Select OpenAMT, fill in any config options, and hit Deploy

Template Import URL

https://raw.githubusercontent.com/Lissy93/portainer-templates/main/templates.json
Show Me demo
Original stackfile

The compose file this template deploys, straight from its repo:

# version: '3.3'
services:
  webui:
    image: intel/oact-webui:v2.1.0
    networks:
      - openamtnetwork
    environment:
      RPS_SERVER: https://${MPS_COMMON_NAME}/rps
      MPS_SERVER: https://${MPS_COMMON_NAME}/mps
      VAULT_SERVER: https://${MPS_COMMON_NAME}/vault
  rps:
    image: intel/oact-rps:v2.1.0
    networks:
      - openamtnetwork
    healthcheck:
      interval: 12s
      timeout: 12s
      retries: 3
      test: ["CMD", "node", "dist/Healthcheck.js"]
    environment:
      RPS_WEBSOCKETTLS: "true"
      RPSWEBPORT: 8081
      RPSWEBSOCKETPORT: 8080
      RPS_LOG_LEVEL: silly
      RPS_DELAY_TIMER: 12
      RPS_MQTT_ADDRESS:
      RPS_MPS_SERVER: http://mps:3000
      RPS_SECRETS_PATH: secret/data/
      RPS_VAULT_TOKEN: ${VAULT_SECRET}
      RPS_VAULT_ADDRESS: http://vault:8200
      RPS_CONNECTION_STRING: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/rpsdb?sslmode=no-verify
  mps:
    image: intel/oact-mps:v2.1.0
    networks:
      - openamtnetwork
    restart: always
    ports:
      - "4433:4433"
    healthcheck:
      interval: 12s
      timeout: 12s
      retries: 3
      test: ["CMD", "node", "dist/Healthcheck.js"]
    environment:
      MPS_GENERATE_CERTS: "true"
      MPS_COMMON_NAME: ${MPS_COMMON_NAME}
      MPSPORT: 4433
      MPSWEBPORT: 3000
      MPS_DEBUG: "true"
      MPS_WEB_ADMIN_USER: ${MPS_USER}
      MPS_WEB_ADMIN_PASSWORD: ${MPS_PASSWORD}
      MPS_HTTPS: "true"
      MPS_TLS_OFFLOAD: "false"
      MPS_LOG_LEVEL: silly
      MPS_JWT_EXPIRATION: 1440
      MPS_JWT_SECRET: ${MPS_SECRET}
      MPS_JWT_ISSUER: 9EmRJTbIiIb4bIeSsmgcWIjrR6HyETqc
      MPS_MQTT_ADDRESS:
      MPS_INSTANCE_NAME: '{{.Task.Name}}'
      MPS_SECRETS_PATH: secret/data/
      MPS_VAULT_TOKEN: ${VAULT_SECRET}
      MPS_VAULT_ADDRESS: http://vault:8200
      MPS_CONNECTION_STRING: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/mpsdb?sslmode=no-verify
    volumes:
      - private-volume:/mps-microservice/private
  mpsrouter:
    image: intel/oact-mpsrouter:v2.0.0
    environment:
      MPS_CONNECTION_STRING: postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@db:5432/mpsdb?sslmode=disable
      PORT: 8003
      MPS_PORT: 3000
    healthcheck:
      interval: 12s
      timeout: 12s
      retries: 3
      test: ["CMD", "/app","--health"]
    networks:
      - openamtnetwork
  db:
    image: portainer/open-amt-cloud-toolkit-postgres:v2.1.0
    command: -c ssl=on -c ssl_cert_file=/var/lib/postgresql/server.crt -c ssl_key_file=/var/lib/postgresql/server.key
    networks:
      - openamtnetwork
    restart: always
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U rpsdb"]
      interval: 2s
      timeout: 3s
      retries: 30
    environment:
      POSTGRES_DB: rpsdb
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
    ports:
      - "5432:5432"
  vault:
    image: vault:latest
    networks:
      - openamtnetwork
    ports:
      - "8200:8200"
    environment:
      VAULT_DEV_ROOT_TOKEN_ID: ${VAULT_SECRET}
      VAULT_DEV_LISTEN_ADDRESS: 0.0.0.0:8200
    cap_add:
      - IPC_LOCK
  kong:
    image: kong:2.6
    healthcheck:
      test:
        - CMD
        - nc
        - -z
        - localhost
        - "8443"
      retries: 10
    command:
      - "kong"
      - "start"
      - "--vv"
    environment:
      - KONG_DATABASE=off
      - KONG_CASSANDRA_CONTACT_POINTS=kong-database
      - KONG_ADMIN_LISTEN=0.0.0.0:8001
      - KONG_ADMIN_LISTEN_SSL=0.0.0.0:8444
      - KONG_NGINX_DAEMON=off
      - KONG_DECLARATIVE_CONFIG_STRING={"_format_version":"2.1","_transform":true,"services":[{"name":"mps-rest","host":"mpsrouter","port":8003,"tags":["mps"],"routes":[{"name":"mps-login-route","strip_path":true,"paths":["/mps/login"]},{"name":"mps-relay-route","strip_path":true,"paths":["/mps/ws"]},{"name":"mps-route","strip_path":true,"paths":["/mps"]}]},{"name":"rps-rest","host":"rps","port":8081,"tags":["rps"],"routes":[{"name":"rps-route","strip_path":true,"paths":["/rps"]}]},{"name":"rps-ws","host":"rps","port":8080,"tags":["rps"],"routes":[{"name":"rps-activate-route","strip_path":true,"paths":["/activate"]}]},{"name":"vault-api","host":"vault","port":8200,"tags":["vault"],"routes":[{"name":"vault-route","strip_path":true,"paths":["/vault"]}]},{"name":"web","host":"webui","port":80,"tags":["web"],"routes":[{"name":"web-route","paths":["/"]}]}],"plugins":[{"name":"cors"},{"name":"jwt","route":"rps-route","config":{"claims_to_verify":["exp"]}},{"name":"jwt","route":"mps-route","config":{"claims_to_verify":["exp"]}}],"consumers":[{"username":"admin"}],"jwt_secrets":[{"consumer":"admin","key":"9EmRJTbIiIb4bIeSsmgcWIjrR6HyETqc","secret":${MPS_SECRET}}]}
      - KONG_PROXY_ERROR_LOG=/dev/stderr
      - KONG_PROXY_ACCESS_LOG=/dev/stdout
      - KONG_ADMIN_ACCESS_LOG=/dev/stdout
      - KONG_ADMIN_ERROR_LOG=/dev/stderr
      - KONG_DNS_ORDER=LAST,A,CNAME
      - KONG_UPSTREAM_KEEPALIVE_POOL_SIZE=0
    networks:
      - openamtnetwork
    ports:
      - "443:8443"
      - "8001:8001"
    restart: always
  mosquitto:
    image: eclipse-mosquitto
    ports:
      - "8883:8883"
    networks:
      - openamtnetwork
volumes:
  app-volume:
  private-volume:
networks:
  openamtnetwork:
    driver: "bridge"

Or deploy it directly from the source:

git clone https://github.com/portainer/templates
cd templates
docker compose -f stacks/openamt/docker-compose.yml up -d

More install options in our documentation.

Container Documentation

webui Documentation

Open AMT Cloud Toolkit - Sample Web UI

rps Documentation

Open AMT Cloud Toolkit - Remote Provisioning Server

mps Documentation

Open AMT Cloud Toolkit - Management Presence Server

mpsrouter Documentation

Open AMT Cloud Toolkit - Management Presence Server Router

vault Documentation

Vault is a tool for securely accessing secrets via a unified interface and tight access control.

kong Documentation

The Cloud-Native API Gateway for APIs and Microservices

mosquitto Documentation

Eclipse Mosquitto is an open source message broker which implements MQTT version 5, 3.1.1 and 3.1

Serve OpenAMT on your own domain behind Caddy, Nginx or Traefik. Fill in your domain and copy the result. It's a starting point, some apps need their own base URL or extra headers set too.

Proxying openamt.example.com to https://kong:8443

Add this to your Caddyfile

openamt.example.com {
	reverse_proxy https://kong:8443 {
		transport http {
			tls_insecure_skip_verify
		}
	}
}

Check the logs first

Nine times out of ten the logs tell you exactly what went wrong.

  • In Portainer, go to Containers, click the container, then Logs. Or run docker logs <container>
  • Exit codes help too: 137 means killed, usually out of memory. 126 or 127 means the command inside the image is broken.

Port already in use

If deployment fails with "Bind for 0.0.0.0:4433 failed: port is already allocated", something else on your server is using that port.

  • Find what's using it: sudo ss -tlnp | grep :4433
  • Stop the other service, or pick a different host port. In 4433:4433 only the left number is yours to change, the right one belongs to the app.

Running but the page won't load

The container is up but nothing appears in your browser.

  • Use your server's real IP: http://your-server-ip:4433. The 0.0.0.0 link Portainer shows isn't a real address.
  • Give it a minute after first deploy, webui can take a while to initialise.
  • Make sure your firewall allows the port, e.g. sudo ufw allow 4433

Image won't pull

Test the pull directly on the host: docker pull intel/oact-webui:v2.1.0

  • "manifest unknown" means the tag no longer exists.
  • "toomanyrequests" is the Docker Hub rate limit. Log in with docker login to raise it.
  • "no space left on device" means a full disk. Reclaim space with docker system prune

"exec format error"

This means the image was built for a different CPU architecture than your server.

  • Check yours with uname -m: x86_64 is amd64, aarch64 is arm64. Raspberry Pi and other ARM boards are the usual culprits.

Container keeps restarting

The always restart policy relaunches the app after every crash, so the real error can scroll past.

  • Check the logs right after a restart, the last few lines before it died are the useful ones.
  • Get the exit code with docker inspect <container> --format '{{.State.ExitCode}}'
  • Still stuck? Redeploy once with the restart policy set to no so the failure stays visible.

Required settings are blank

RPS_MQTT_ADDRESS, MPS_MQTT_ADDRESS have no default value, and webui may crash or misbehave if left empty.

  • Fill them in on the deploy screen before hitting deploy.

Stack won't deploy

Compose stacks fail fast on small mistakes, and Portainer shows the reason just above the editor.

  • YAML only accepts spaces for indentation, a single tab breaks the whole file.

Raise an issue

Found something which isn't working as it should? Here's how to report it.

A Compose stack

OpenAMT is a Compose stack, a set of containers (8 of them) defined in one file and brought up together by Portainer, then started and stopped as a single app.

The services

This stack is built from 8 containers that run side by side. Here's each one, with the image it runs and anything it waits for first:

  • webui runs intel/oact-webui:v2.1.0
  • rps runs intel/oact-rps:v2.1.0
  • mps runs intel/oact-mps:v2.1.0
  • mpsrouter runs intel/oact-mpsrouter:v2.0.0
  • db runs portainer/open-amt-cloud-toolkit-postgres:v2.1.0
  • vault runs vault:latest
  • kong runs kong:2.6
  • mosquitto runs eclipse-mosquitto

Ports

A port is the door the app answers on. A mapping like 4433:4433 means it's reachable on port 4433 of your server, where the left number is yours to change and the right one belongs to the app. It opens:

  • 4433:4433
  • 5432:5432
  • 8200:8200
  • 443:8443
  • 8001:8001
  • 8883:8883

Volumes

A volume is where OpenAMT keeps its files so they survive an update or a restart. Without one, anything it saves would sit inside the container and vanish the moment it's recreated. This template mounts:

  • /mps-microservice/private kept in the private-volume volume Docker manages

Environment variables

Environment variables are the settings you hand over when you deploy, things like a password or a timezone. OpenAMT takes 52 of them, and 2 need a value before it'll start properly:

  • RPS_SERVER, defaults to https://MPS_COMMON_NAME/rps
  • MPS_SERVER, defaults to https://MPS_COMMON_NAME/mps
  • VAULT_SERVER, defaults to https://MPS_COMMON_NAME/vault
  • RPS_WEBSOCKETTLS, defaults to true
  • RPSWEBPORT, defaults to 8081
  • RPSWEBSOCKETPORT, defaults to 8080
  • RPS_LOG_LEVEL, defaults to silly
  • RPS_DELAY_TIMER, defaults to 12
  • RPS_MQTT_ADDRESS, needs a value
  • RPS_MPS_SERVER, defaults to http://mps:3000
  • RPS_SECRETS_PATH, defaults to secret/data/
  • RPS_VAULT_TOKEN, pulled from your own environment
  • RPS_VAULT_ADDRESS, defaults to http://vault:8200
  • RPS_CONNECTION_STRING, defaults to postgresql://POSTGRES_USER:POSTGRES_PASSWORD@db:5432/rpsdb?sslmode=no-verify
  • MPS_GENERATE_CERTS, defaults to true
  • MPS_COMMON_NAME, pulled from your own environment
  • MPSPORT, defaults to 4433
  • MPSWEBPORT, defaults to 3000
  • MPS_DEBUG, defaults to true
  • MPS_WEB_ADMIN_USER, pulled from your own environment
  • MPS_WEB_ADMIN_PASSWORD, pulled from your own environment
  • MPS_HTTPS, defaults to true
  • MPS_TLS_OFFLOAD, defaults to false
  • MPS_LOG_LEVEL, defaults to silly
  • MPS_JWT_EXPIRATION, defaults to 1440
  • MPS_JWT_SECRET, pulled from your own environment
  • MPS_JWT_ISSUER, defaults to 9EmRJTbIiIb4bIeSsmgcWIjrR6HyETqc
  • MPS_MQTT_ADDRESS, needs a value
  • MPS_INSTANCE_NAME, defaults to {{.Task.Name}}
  • MPS_SECRETS_PATH, defaults to secret/data/
  • MPS_VAULT_TOKEN, pulled from your own environment
  • MPS_VAULT_ADDRESS, defaults to http://vault:8200
  • MPS_CONNECTION_STRING, defaults to postgresql://POSTGRES_USER:POSTGRES_PASSWORD@db:5432/mpsdb?sslmode=disable
  • PORT, defaults to 8003
  • MPS_PORT, defaults to 3000
  • POSTGRES_DB, defaults to rpsdb
  • POSTGRES_USER, pulled from your own environment
  • POSTGRES_PASSWORD, pulled from your own environment
  • VAULT_DEV_ROOT_TOKEN_ID, pulled from your own environment
  • VAULT_DEV_LISTEN_ADDRESS, defaults to 0.0.0.0:8200
  • KONG_DATABASE, defaults to off
  • KONG_CASSANDRA_CONTACT_POINTS, defaults to kong-database
  • KONG_ADMIN_LISTEN, defaults to 0.0.0.0:8001
  • KONG_ADMIN_LISTEN_SSL, defaults to 0.0.0.0:8444
  • KONG_NGINX_DAEMON, defaults to off
  • KONG_DECLARATIVE_CONFIG_STRING, defaults to {"_format_version":"2.1","_transform":true,"services":[{"name":"mps-rest","host":"mpsrouter","port":8003,"tags":["mps"],"routes":[{"name":"mps-login-route","strip_path":true,"paths":["/mps/login"]},{"name":"mps-relay-route","strip_path":true,"paths":["/mps/ws"]},{"name":"mps-route","strip_path":true,"paths":["/mps"]}]},{"name":"rps-rest","host":"rps","port":8081,"tags":["rps"],"routes":[{"name":"rps-route","strip_path":true,"paths":["/rps"]}]},{"name":"rps-ws","host":"rps","port":8080,"tags":["rps"],"routes":[{"name":"rps-activate-route","strip_path":true,"paths":["/activate"]}]},{"name":"vault-api","host":"vault","port":8200,"tags":["vault"],"routes":[{"name":"vault-route","strip_path":true,"paths":["/vault"]}]},{"name":"web","host":"webui","port":80,"tags":["web"],"routes":[{"name":"web-route","paths":["/"]}]}],"plugins":[{"name":"cors"},{"name":"jwt","route":"rps-route","config":{"claims_to_verify":["exp"]}},{"name":"jwt","route":"mps-route","config":{"claims_to_verify":["exp"]}}],"consumers":[{"username":"admin"}],"jwt_secrets":[{"consumer":"admin","key":"9EmRJTbIiIb4bIeSsmgcWIjrR6HyETqc","secret":MPS_SECRET}]}
  • KONG_PROXY_ERROR_LOG, defaults to /dev/stderr
  • KONG_PROXY_ACCESS_LOG, defaults to /dev/stdout
  • KONG_ADMIN_ACCESS_LOG, defaults to /dev/stdout
  • KONG_ADMIN_ERROR_LOG, defaults to /dev/stderr
  • KONG_DNS_ORDER, defaults to LAST,A,CNAME
  • KONG_UPSTREAM_KEEPALIVE_POOL_SIZE, defaults to 0

Restart policy

The restart policy here is always, so Docker brings OpenAMT back up after a crash and again when the server reboots. Good for anything you want running around the clock. You can change this on the deploy screen. The choices are no (never restart), on-failure (only after a crash), unless-stopped (restart unless you stop it), and always (bring it back no matter what).

Networking

Portainer puts these services on one shared private network, so they can find each other by name (like webui) while only the ports above are open to you.

Platform

The platform is linux, the kind of system the container is built to run on. Docker and Portainer handle this on a normal Linux server.

Portainer app templates

Zooming out, this whole page comes from a Portainer app template: a short recipe telling Portainer how to set OpenAMT up. Add the template list to Portainer once, then deploying OpenAMT is a click rather than a wall of config.