tacticalrmm Documentation

A remote monitoring & management tool, built with Django, Vue and Go.

RAW Doc

Docker & Self-Hosted Deployment Verified OCI

Deploy tacticalrmm on any server, homelab, or cloud container platform.

1-Click Terminal Command
bash (docker run)
docker run -d --name tacticalrmm -p 80:80 --restart always postgres:13-alpine
Configured Services & Ports
โš™๏ธ tactical-postgres
image: postgres:13-alpine
โš™๏ธ tactical-redis
image: redis:6.0-alpine
โš™๏ธ tactical-init
image: ${IMAGE_REPO}tactical:${VERSION}
โš™๏ธ tactical-nats
image: ${IMAGE_REPO}tactical-nats:${VERSION}
โš™๏ธ tactical-meshcentral
image: ${IMAGE_REPO}tactical-meshcentral:${VERSION}
โš™๏ธ tactical-mongodb
image: mongo:4.4
โš™๏ธ tactical-frontend
image: ${IMAGE_REPO}tactical-frontend:${VERSION}
โš™๏ธ tactical-backend
image: ${IMAGE_REPO}tactical:${VERSION}
โš™๏ธ tactical-websockets
image: ${IMAGE_REPO}tactical:${VERSION}
โš™๏ธ tactical-nginx
image: ${IMAGE_REPO}tactical-nginx:${VERSION}
๐Ÿ”Œ Ports: ${TRMM_HTTP_PORT-80}:8080, ${TRMM_HTTPS_PORT-443}:4443
โš™๏ธ tactical-celery
image: ${IMAGE_REPO}tactical:${VERSION}
โš™๏ธ tactical-celerybeat
image: ${IMAGE_REPO}tactical:${VERSION}
docker-compose.yml
yaml (docker-compose.yml)
version: "3.7"

# networks
networks:
  proxy:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.20.0.0/24
  api-db: null
  redis: null
  mesh-db: null

# docker managed persistent volumes
volumes:
  tactical_data: null
  postgres_data: null
  mongo_data: null
  mesh_data: null
  redis_data: null

services:
  # postgres database for api service
  tactical-postgres:
    container_name: trmm-postgres
    image: postgres:13-alpine
    restart: always
    environment:
      POSTGRES_DB: tacticalrmm
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASS}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    networks:
      - api-db

  # redis container for celery tasks
  tactical-redis:
    container_name: trmm-redis
    image: redis:6.0-alpine
    user: 1000:1000
    command: redis-server
    restart: always
    volumes:
      - redis_data:/data
    networks:
      - redis

  # used to initialize the docker environment
  tactical-init:
    container_name: trmm-init
    image: ${IMAGE_REPO}tactical:${VERSION}
    restart: on-failure
    command: ["tactical-init"]
    environment:
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASS: ${POSTGRES_PASS}
      APP_HOST: ${APP_HOST}
      API_HOST: ${API_HOST}
      CSRF_COOKIE_DOMAIN: ${CSRF_COOKIE_DOMAIN}
      SESSION_COOKIE_DOMAIN: ${SESSION_COOKIE_DOMAIN}
      MESH_USER: ${MESH_USER}
      MESH_HOST: ${MESH_HOST}
      TRMM_USER: ${TRMM_USER}
      TRMM_PASS: ${TRMM_PASS}
      TRMM_DISABLE_WEB_TERMINAL: ${TRMM_DISABLE_WEB_TERMINAL}
      TRMM_DISABLE_SERVER_SCRIPTS: ${TRMM_DISABLE_SERVER_SCRIPTS}
      TRMM_DISABLE_SSO: ${TRMM_DISABLE_SSO}
    depends_on:
      - tactical-postgres
      - tactical-meshcentral
      - tactical-redis
    networks:
      - api-db
      - proxy
      - redis
    volumes:
      - tactical_data:/opt/tactical
      - mesh_data:/meshcentral-data
      - mongo_data:/mongo/data/db
      - redis_data:/redis/data

  # nats
  tactical-nats:
    container_name: trmm-nats
    image: ${IMAGE_REPO}tactical-nats:${VERSION}
    user: 1000:1000
    restart: always
    environment:
      API_HOST: ${API_HOST}
    volumes:
      - tactical_data:/opt/tactical
    networks:
      api-db: null
      proxy:
        aliases:
          - ${API_HOST}

  # meshcentral container
  tactical-meshcentral:
    container_name: trmm-meshcentral
    image: ${IMAGE_REPO}tactical-meshcentral:${VERSION}
    user: 1000:1000
    restart: always
    environment:
      MESH_HOST: ${MESH_HOST}
      MESH_USER: ${MESH_USER}
      MESH_PASS: ${MESH_PASS}
      MONGODB_USER: ${MONGODB_USER}
      MONGODB_PASSWORD: ${MONGODB_PASSWORD}
      MESH_PERSISTENT_CONFIG: ${MESH_PERSISTENT_CONFIG}
    networks:
      proxy:
        aliases:
          - ${MESH_HOST}
      mesh-db: null
    volumes:
      - tactical_data:/opt/tactical
      - mesh_data:/home/node/app/meshcentral-data
    depends_on:
      - tactical-mongodb

  # mongodb container for meshcentral
  tactical-mongodb:
    container_name: trmm-mongodb
    image: mongo:4.4
    user: 1000:1000
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: ${MONGODB_USER}
      MONGO_INITDB_ROOT_PASSWORD: ${MONGODB_PASSWORD}
      MONGO_INITDB_DATABASE: meshcentral
    networks:
      - mesh-db
    volumes:
      - mongo_data:/data/db

  # container that hosts vue frontend
  tactical-frontend:
    container_name: trmm-frontend
    image: ${IMAGE_REPO}tactical-frontend:${VERSION}
    user: 1000:1000
    restart: always
    networks:
      - proxy
    volumes:
      - tactical_data:/opt/tactical
    environment:
      API_HOST: ${API_HOST}

  # container for django backend
  tactical-backend:
    container_name: trmm-backend
    image: ${IMAGE_REPO}tactical:${VERSION}
    user: 1000:1000
    command: ["tactical-backend"]
    restart: always
    networks:
      - proxy
      - api-db
      - redis
    volumes:
      - tactical_data:/opt/tactical
    depends_on:
      - tactical-postgres

  # container for django websockets connections
  tactical-websockets:
    container_name: trmm-websockets
    image: ${IMAGE_REPO}tactical:${VERSION}
    user: 1000:1000
    command: ["tactical-websockets"]
    restart: always
    networks:
      - proxy
      - api-db
      - redis
    volumes:
      - tactical_data:/opt/tactical
    depends_on:
      - tactical-postgres
      - tactical-backend

  # container for tactical reverse proxy
  tactical-nginx:
    container_name: trmm-nginx
    image: ${IMAGE_REPO}tactical-nginx:${VERSION}
    user: 1000:1000
    restart: always
    environment:
      APP_HOST: ${APP_HOST}
      API_HOST: ${API_HOST}
      MESH_HOST: ${MESH_HOST}
      CERT_PUB_KEY: ${CERT_PUB_KEY}
      CERT_PRIV_KEY: ${CERT_PRIV_KEY}
    networks:
      proxy:
        ipv4_address: 172.20.0.20
    ports:
      - "${TRMM_HTTP_PORT-80}:8080"
      - "${TRMM_HTTPS_PORT-443}:4443"
    volumes:
      - tactical_data:/opt/tactical

  # container for celery worker service
  tactical-celery:
    container_name: trmm-celery
    image: ${IMAGE_REPO}tactical:${VERSION}
    user: 1000:1000
    command: ["tactical-celery"]
    restart: always
    networks:
      - redis
      - proxy
      - api-db
    volumes:
      - tactical_data:/opt/tactical
    depends_on:
      - tactical-postgres
      - tactical-redis

  # container for celery beat service
  tactical-celerybeat:
    container_name: trmm-celerybeat
    image: ${IMAGE_REPO}tactical:${VERSION}
    user: 1000:1000
    command: ["tactical-celerybeat"]
    restart: always
    networks:
      - proxy
      - redis
      - api-db
    volumes:
      - tactical_data:/opt/tactical
    depends_on:
      - tactical-postgres
      - tactical-redis

Technical Documentation: amidaware/tacticalrmm

โ„น๏ธ Provenance: Multi-Tier Ingestion ยท CodeWiki Reference

Overview (`README.md`)

Tactical RMM


Tactical RMM is a remote monitoring & management tool, built with Django and Vue.
It uses an agent written in golang and integrates with MeshCentral

[LIVE DEMO](https://demo.tacticalrmm.com/)

Demo database resets every hour. A lot of features are disabled for obvious reasons due to the nature of this app.

[Discord Chat](https://discord.gg/upGTkWp)

[Documentation](https://docs.tacticalrmm.com)

Features

  • Teamviewer-like remote desktop control
  • Real-time remote shell
  • Remote file browser (download and upload files)
  • Windows Registry Editor
  • Remote command and script execution (batch, powershell, python, nushell and deno scripts)
  • Event log viewer
  • Services management
  • Windows patch management
  • Automated checks with email/SMS/Webhook alerting (cpu, disk, memory, services, scripts, event logs)
  • Automated task runner (run scripts on a schedule)
  • Remote software installation via chocolatey
  • Software and hardware inventory

Windows agent versions supported

  • Windows 7, 8.1, 10, 11,
  • Server 2008R2, 2012R2, 2016, 2019, 2022, 2025

Linux agent versions supported

  • Any distro with systemd which includes but is not limited to: Debian (10, 11), Ubuntu x86_64 (18.04, 20.04, 22.04), Synology 7, centos, freepbx and more!

Mac agent versions supported

  • 64 bit Intel and Apple Silicon (M-Series)

Sponsorship Features

Installation / Backup / Restore / Usage

Refer to the [documentation](https://docs.tacticalrmm.com)


Overview (`ansible/README.md`)

tacticalrmm ansible WIP

ansible role to setup a Debian 12 VM for tacticalrmm local development


--- METRICS ---