managelm/portal

By managelm

Updated 4 days ago

AI-powered Linux & Windows server management — natural language control via Claude AI agents.

Image
Networking
Security
Machine learning & AI
0

10K+

managelm/portal repository overview

ManageLM

AI-powered Linux server management. No SSH. No scripts. No risk.

Tell Claude what you need — ManageLM agents execute it locally using a local LLM, scoped to only the commands you allow. Connect your servers via lightweight agents and manage them through Claude using plain English.

Full documentation · Docker installation guide · managelm.com


Two image variants

ImageIncludesBest for
managelm/portal:latestPortal onlyProduction — bring your own PostgreSQL & Redis
managelm/portal:allinonePortal + PostgreSQL + RedisQuick evaluation, testing

Quick start — All-in-One

Single container, no external dependencies. Best for evaluation and testing.

docker run -d \
  --name managelm \
  -p 3000:3000 \
  -e SERVER_URL=http://YOUR_IP:3000 \
  -e JWT_SECRET=$(openssl rand -hex 32) \
  -e [email protected] \
  -e POSTGRES_PASSWORD=change-me-strong-password \
  -v managelm_pgdata:/data/postgres \
  -v managelm_redisdata:/data/redis \
  --restart unless-stopped \
  managelm/portal:allinone

⚠ Not recommended for production — database and container share the same lifecycle.


Quick start — Portal only (production)

Bring your own PostgreSQL 16+ and Redis 7+.

# 1. PostgreSQL
docker run -d --name managelm-db \
  -e POSTGRES_DB=managelm \
  -e POSTGRES_USER=managelm \
  -e POSTGRES_PASSWORD=your-db-password \
  -v managelm_pgdata:/var/lib/postgresql/data \
  --restart unless-stopped \
  postgres:16-alpine

# 2. Redis
docker run -d --name managelm-redis \
  -v managelm_redisdata:/data \
  --restart unless-stopped \
  redis:7-alpine redis-server --appendonly yes

# 3. Portal
docker run -d --name managelm \
  -p 3000:3000 \
  -e SERVER_URL=https://managelm.example.com \
  -e JWT_SECRET=$(openssl rand -hex 32) \
  -e [email protected] \
  -e DATABASE_URL=postgresql://managelm:your-db-password@managelm-db:5432/managelm \
  -e REDIS_URL=redis://managelm-redis:6379 \
  --link managelm-db --link managelm-redis \
  --restart unless-stopped \
  managelm/portal:latest

Or use the recommended Docker Compose setup:

mkdir managelm && cd managelm
curl -O https://app.managelm.com/doc/docker-compose.yml
# Edit SERVER_URL, JWT_SECRET, SMTP_FROM, POSTGRES_PASSWORD
docker compose up -d

Environment variables

Required
VariableDescription
SERVER_URLPublic URL that browsers and agents use to reach the portal. Must be externally reachable — agents derive their WebSocket URL from this value. E.g. https://managelm.example.com
JWT_SECRETRandom 32+ char secret. Generate with: openssl rand -hex 32
SMTP_FROMSender email address for account verification, password resets, and team invitations
POSTGRES_PASSWORDPostgreSQL password — allinone image only
DATABASE_URLPostgreSQL connection string — portal-only image. E.g. postgresql://user:pass@host:5432/managelm
REDIS_URLRedis connection string — portal-only image. E.g. redis://host:6379
Optional
VariableDefaultDescription
SERVER_PORT3000Portal listen port
LOG_LEVELinfoOne of trace, debug, info, warn, error, fatal, silent
SMTP_HOSTSMTP server hostname. Email is disabled when not set
SMTP_PORT25SMTP port
SMTP_SECUREnonenone, starttls, or tls
SMTP_USER / SMTP_PASSSMTP credentials
DB_SSLnonenone, require, verify, or verify-ca
REDIS_TLSautoauto, on, or off
CLUSTER_WORKERS2Node.js cluster workers. Set to 1 to disable clustering
TASK_TIMEOUT_SECONDS300Max task duration
JWT_ACCESS_EXPIRY1hAccess token lifetime
JWT_REFRESH_EXPIRY7dRefresh token lifetime

Reverse proxy

WebSocket support is required for agent connections.

nginx

location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_http_version 1.1;
    proxy_set_header Upgrade    $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host       $host;
    proxy_read_timeout 86400s;
    proxy_send_timeout 86400s;
}

Apache

ProxyPreserveHost On
ProxyPass        / http://127.0.0.1:3000/
ProxyPassReverse / http://127.0.0.1:3000/

RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://127.0.0.1:3000/$1 [P,L]

ProxyTimeout 86400

After install

  1. Register at your SERVER_URL — the first user becomes account owner
  2. Configure the LLM (local Ollama, cloud, or proxied)
  3. Import skills from the built-in catalog
  4. Install an agent on your first server
  5. Connect Claude via MCP at https://your-host/mcp

Supported platforms

  • linux/amd64 — x86-64 servers and VMs
  • linux/arm64 — AWS Graviton, Raspberry Pi, Apple M-series

Updating

docker compose pull
docker compose up -d

Migrations run automatically on startup.



© 2026 RCDevs S.A.

Tag summary

Content type

Image

Digest

sha256:4169cb131

Size

196.5 MB

Last updated

4 days ago

docker pull managelm/portal:allinone