Skip to content

Uptime Kuma

Self-hosted uptime monitoring tool with support for HTTP, TCP, DNS, Docker, and 90+ notification services including Slack, Discord, and Telegram.

# Run Uptime Kuma with persistent storage
docker run -d \
  --restart=always \
  -p 3001:3001 \
  -v uptime-kuma:/app/data \
  --name uptime-kuma \
  louislam/uptime-kuma:2

# Access at http://localhost:3001
# Bind to localhost only (no external access)
docker run -d \
  --restart=always \
  -p 127.0.0.1:3001:3001 \
  -v uptime-kuma:/app/data \
  --name uptime-kuma \
  louislam/uptime-kuma:2
# Download official compose file
mkdir uptime-kuma && cd uptime-kuma
curl -o compose.yaml \
  https://raw.githubusercontent.com/louislam/uptime-kuma/master/compose.yaml

# Start the service
docker compose up -d

# Access at http://localhost:3001
# Mount Docker socket for container health monitoring
docker run -d \
  --restart=always \
  -p 3001:3001 \
  -v uptime-kuma:/app/data \
  -v /var/run/docker.sock:/var/run/docker.sock:ro \
  --name uptime-kuma \
  louislam/uptime-kuma:2
# Requirements: Node.js 20.4+, Git

# Clone and setup
git clone https://github.com/louislam/uptime-kuma.git
cd uptime-kuma
npm run setup

# Start directly
node server/server.js

# Or use PM2 for background operation
npm install -g pm2
pm2 start server/server.js --name uptime-kuma
CommandDescription
docker run -d -p 3001:3001 louislam/uptime-kuma:2Start Uptime Kuma container
docker compose up -dStart with Docker Compose
docker compose downStop all services
docker compose logs -fFollow container logs
docker restart uptime-kumaRestart the container
docker stop uptime-kumaStop the container
docker start uptime-kumaStart stopped container
node server/server.jsStart without Docker
pm2 start server/server.js --name uptime-kumaStart with PM2
pm2 restart uptime-kumaRestart with PM2
pm2 stop uptime-kumaStop with PM2
pm2 logs uptime-kumaView PM2 logs
# Pull latest image
docker pull louislam/uptime-kuma:2

# Stop and remove current container
docker stop uptime-kuma
docker rm uptime-kuma

# Recreate with new image (data persists in volume)
docker run -d \
  --restart=always \
  -p 3001:3001 \
  -v uptime-kuma:/app/data \
  --name uptime-kuma \
  louislam/uptime-kuma:2
# Pull and recreate
docker compose pull
docker compose up -d
cd uptime-kuma
git fetch --all
git checkout 2.1.3 --force
npm install --production
npm run download-dist
pm2 restart uptime-kuma
TypeDescription
HTTP(S)Monitor website availability and response time
HTTP(S) KeywordCheck for specific text in response body
HTTP(S) JSON QueryValidate JSON response values
TCP PortCheck if a TCP port is open and responding
PingICMP ping for host availability
DNSMonitor DNS record resolution
Docker ContainerMonitor container health status
Steam Game ServerCheck game server availability
MQTTMonitor MQTT broker connectivity
gRPCMonitor gRPC service health
RadiusRADIUS authentication server check
GameDigGame server monitoring (multiple protocols)
PushPassive monitoring via heartbeat endpoint
GroupLogical grouping of monitors
ServiceDescription
SlackChannel webhooks and bot notifications
DiscordWebhook-based channel notifications
TelegramBot API notifications
Microsoft TeamsIncoming webhook notifications
MattermostSelf-hosted chat integration
Rocket.ChatWebhook notifications
Google ChatSpace webhook notifications
MatrixDecentralized chat notifications
ServiceDescription
PushoverMobile push notifications
GotifySelf-hosted push server
ntfyHTTP-based pub/sub notifications
PushbulletCross-device push notifications
SignalSecure messaging notifications
LINELINE Notify integration
ServiceDescription
PagerDutyIncident alerting and on-call
OpsgenieAlert management and escalation
SquadcastIncident management
Splunk On-CallVictorOps alert routing
Better StackUptime and incident management
ServiceDescription
SMTP EmailCustom email notifications
WebhookCustom HTTP endpoint calls
Home AssistantSmart home automation triggers
AppriseUniversal notification gateway
VariableDescriptionDefault
UPTIME_KUMA_PORTServer port3001
UPTIME_KUMA_HOSTBind address::
DATA_DIRData storage directory./data
TZTimezoneUTC
UMASKFile permission mask0000
NODE_EXTRA_CA_CERTSCustom CA certificates path
SSL_CERTSSL certificate path
SSL_KEYSSL private key path
FeatureDescription
Multiple PagesCreate separate status pages for different services
Custom DomainsMap status pages to custom domain names
Custom CSSStyle status pages with custom CSS
Incident PostsCreate incident reports visible on status page
MaintenanceSchedule maintenance windows
Monitor GroupsOrganize monitors into groups on status page
# Install the Python API client
pip install uptime-kuma-api
OperationDescription
Add monitorProgrammatically create monitors
Edit monitorUpdate monitor configuration
Delete monitorRemove monitors
Pause/ResumeToggle monitor state
Get statusRetrieve current monitor status
Add notificationConfigure notification providers
Get uptimeQuery uptime statistics
# compose.yaml
services:
  uptime-kuma:
    image: louislam/uptime-kuma:2
    container_name: uptime-kuma
    restart: always
    ports:
      - "3001:3001"
    volumes:
      - ./data:/app/data
      # Optional: Docker container monitoring
      # - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      - TZ=UTC
FeatureDescription
2FATwo-factor authentication for login
Reverse ProxyDeploy behind Nginx, Caddy, or Traefik
SSL/TLSBuilt-in SSL or reverse proxy termination
Login Rate LimitingBrute-force protection
API KeysToken-based API access
server {
    listen 443 ssl;
    server_name status.example.com;

    location / {
        proxy_pass http://127.0.0.1:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
CommandDescription
docker cp uptime-kuma:/app/data ./backupBackup data directory
docker cp ./backup/. uptime-kuma:/app/dataRestore from backup
docker volume inspect uptime-kumaFind volume mount point
IssueSolution
Cannot access UICheck port binding: docker port uptime-kuma
NFS volume errorsUse local directories, not network file systems
WebSocket errorsConfigure reverse proxy for WebSocket upgrade
Container not startingCheck logs: docker logs uptime-kuma
Data persistence lostEnsure -v uptime-kuma:/app/data volume is used
Docker monitoring failsMount docker.sock: -v /var/run/docker.sock:/var/run/docker.sock:ro
PlatformStatus
Linux (x64, ARM)Supported
Windows 10+ (x64)Supported
macOSSupported
Docker DesktopSupported
KubernetesVia Docker image
FreeBSD/OpenBSDNot supported
Replit/HerokuNot supported
  • Use Docker volumes (not bind mounts to NFS) for data persistence
  • Deploy behind a reverse proxy with SSL termination for production use
  • Enable 2FA for the admin account immediately after first login
  • Set monitoring intervals to 60 seconds or more for external services
  • Use the Push monitor type for services behind firewalls
  • Configure at least 2 notification channels for redundancy
  • Create separate status pages for internal and external audiences
  • Back up the data directory regularly — it contains all configuration
  • Set the timezone via the TZ environment variable to match your operations center