Skip to main content
  1. Posts/

Install Uptime Kuma sebagai Monitoring

Table of Contents

Uptime Kuma adalah aplikasi open-source untuk melakukan monitoring server dan layanan dengan berbagai protokol, seperti:

  • HTTP/HTTPS
  • TCP
  • HTTP(S) Keyword
  • Ping
  • DNS Record
  • Push
  • Steam Game Server
  • Docker Containers

Aplikasi ini cocok digunakan untuk memantau kesehatan server, website, ataupun layanan lain secara real-time.

Cara Instalasi
#

Uptime Kuma dapat diinstal menggunakan dua metode: Docker atau Non-Docker. Berikut contoh instalasi menggunakan Docker.

Instalasi dengan Docker
#

docker run -d --restart=always -p 3001:3001 \
 -e UPTIME_KUMA_WS_ORIGIN_CHECK="bypass" \
 -v uptime-kuma:/app/data \
 --name uptime-kuma louislam/uptime-kuma:2-slim

Perintah di atas akan menjalankan container Uptime Kuma dengan:

  • Port 3001
  • Volume uptime-kuma untuk penyimpanan data
  • Restart otomatis

Instalasi dengan Docker Compose
#

Contoh Uptime Kuma dengan SQlite.

services:
  uptime-kuma:
    image: ghcr.io/louislam/uptime-kuma:2-slim
    deploy:
      resources:
        limits:
          cpus: '1.5'
          memory: 512M
    container_name: uptime-kuma
    restart: always
    ports:
      - "3001:3001"
    volumes:
      - ./data:/app/data
    environment:
      - TZ=Asia/Jakarta
    networks:
      - kuma_network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3001"]
      interval: 60s
      timeout: 30s
      retries: 3
      start_period: 10s
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

networks:
  kuma_network:
    driver: bridge

Contoh Uptime Kuma dengan database MariaDB/MySQL

x-db-env: &db-env
  MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-uptimekuma}
  MYSQL_USER: ${MYSQL_USER:-uptimekuma}
  MYSQL_PASSWORD: ${MYSQL_PASSWORD:-uptimekuma}
  MYSQL_DATABASE: ${MYSQL_DATABASE:-kuma}
  TZ: ${TZ:-Asia/Jakarta}

x-kuma-env: &kuma-env
  TZ: ${TZ:-Asia/Jakarta}
  UMASK: ${UMASK:-0022}
  UPTIME_KUMA_DB_TYPE: ${UPTIME_KUMA_DB_TYPE:-mariadb}
  UPTIME_KUMA_DB_HOSTNAME: ${UPTIME_KUMA_DB_HOSTNAME:-mariadb}
  UPTIME_KUMA_DB_PORT: ${UPTIME_KUMA_DB_PORT:-3306}
  UPTIME_KUMA_DB_NAME: ${MYSQL_DATABASE:-kuma}
  UPTIME_KUMA_DB_USERNAME: ${MYSQL_USER:-uptimekuma}
  UPTIME_KUMA_DB_PASSWORD: ${MYSQL_PASSWORD:-uptimekuma}

services:
  uptime-kuma:
    image: ghcr.io/louislam/uptime-kuma:2-slim
    deploy:
      resources:
        limits:
          cpus: '0.5'
          memory: 512M
    container_name: uptime-kuma
    restart: always
    ports:
      - "3001:3001"
    volumes:
      - ./docker/data:/app/data
    environment:
      <<: *kuma-env
    networks:
      - kuma_network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3001"]
      interval: 60s
      timeout: 30s
      retries: 3
      start_period: 10s
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
        labels: "service,environment"

  db:
    image: mariadb:11
    container_name: mariadb
    restart: always
    volumes:
      - ./docker/mysql/datadir:/var/lib/mysql
    environment:
      <<: *db-env
    networks:
      - kuma_network
    healthcheck:
      test: ["CMD", "mariadb-admin", "ping", "-h", "localhost", "-u", "root", "-p$MYSQL_ROOT_PASSWORD"]
      interval: 60s
      timeout: 30s
      retries: 3
      start_period: 10s
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
        labels: "service,environment"

networks:
  kuma_network:
    driver: bridge

Setelah proses deployment selesai, Uptime Kuma dapat diakses melalui:

http://localhost:3001

Instalasi Non-Docker
#

1. Update Server
#

Selalu update OS sebelum instalasi.

sudo apt update
sudo apt upgrade -y

2. Install Node.js LTS
#

curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install -y nodejs

3. Install Git
#

sudo apt install -y git

4. Clone Repository Uptime Kuma
#

git clone https://github.com/louislam/uptime-kuma.git

5. Masuk ke Direktori Uptime Kuma
#

cd uptime-kuma

6. Jalankan Setup dan Install PM2
#

npm run setup
sudo npm install -g pm2

7. Konfigurasi Log Rotation untuk PM2
#

pm2 install pm2-logrotate

8. Menjalankan Uptime Kuma dengan PM2
#

pm2 start server/server.js --name uptime-kuma
pm2 startup
pm2 save

9. Install Nginx
#

sudo apt install nginx -y

10. Konfigurasi Nginx sebagai Reverse Proxy
#

Ganti uptime-kuma.yourdomainname.com dengan domain Anda.

server {
    listen 443 ssl http2;
    server_name uptime-kuma.yourdomainname.com;

    access_log /var/log/nginx/uptime-kuma_access.log;
    error_log  /var/log/nginx/uptime-kuma_error.log;

    # Security Headers
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
    add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;

    # SSL Certificates
    ssl_certificate     /etc/letsencrypt/live/uptime-kuma.yourdomainname.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/uptime-kuma.yourdomainname.com/privkey.pem;

    # SSL Settings
    proxy_set_header Early-Data $ssl_early_data;
    ssl_early_data on;

    ssl_session_timeout 1d;
    ssl_session_cache shared:SSL:50m;
    ssl_session_tickets off;

    ssl_prefer_server_ciphers on;
    ssl_ciphers 'TLS13+AESGCM+AES256:TLS13+AESGCM+AES128:TLS13+CHACHA20:EECDH+AESGCM:EECDH+CHACHA20';
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ecdh_curve X25519:P-521:P-384:P-256;

    location / {
        proxy_pass http://localhost:3001;

        # WebSocket support
        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;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header Sec-WebSocket-Key $http_sec_websocket_key;
        proxy_set_header Sec-WebSocket-Version $http_sec_websocket_version;
        proxy_set_header Sec-WebSocket-Extensions $http_sec_websocket_extensions;

        # Extended timeouts
        proxy_connect_timeout 900;
        proxy_send_timeout 900;
        proxy_read_timeout 900;
        send_timeout 900;

        # Disable buffering for real-time traffic or streaming data
        proxy_buffering off;
    }
}

# Optional: Redirect HTTP to HTTPS
server {
  listen 80;
  server_name uptime-kuma.yourdomainname.com;
  return 301 https://$server_name$request_uri;
}

11. Restart Nginx
#

sudo systemctl restart nginx

12. Akses Dashboard
#

Buka:

https://uptime-kuma.yourdomainname.com

Features
#

Reset Password via CLI
#

docker exec -it <container name> bash
npm run reset-password

How to Monitor Docker Containers
#

Untuk monitor container docker, uptime kuma memerlukan akses ke docker.sock.

Edit docker-compose.yml lalu tambahkan volume pada service uptime-kuma.

volumes:
    - /var/run/docker.sock:/var/run/docker.sock

Remote Browsers
#

Remote Browsers adalah alternatif untuk menjalankan Chromium secara lokal. Anda dapat menggunakan layanan dari browserless.io atau connect ke browserless self-hosted container

Edit docker-compose.yml lalu tambahkan baris berikut.

x-browserless-env: &browserless-env
  TOKEN: ${TOKEN_BROWSERLESS:-some-super-secret-token}
  TZ: ${TZ:-Asia/Jakarta}

services:
  browserless:
    image: browserless/chrome:1-chrome-stable
    deploy:
      resources:
        limits:
          cpus: '4.5'
          memory: 8G
    container_name: browserless
    restart: unless-stopped
    environment:
      <<: *browserless-env
    networks:
      - kuma_network
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/pressure?token=$TOKEN_BROWSERLESS"]
      interval: 60s
      timeout: 30s
      retries: 3
      start_period: 10s
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"
        labels: "service,environment"

Masuk ke menu settings di uptime kuma, lalu tambahkan remote browser menggunakan contoh URL seperti berikut.

ws://browserless:3000/playwright?token=some-super-secret-token

Related