Skip to main content
  1. Posts/

Install Uptime Kuma sebagai Monitoring

·4 mins·
linux docker linux monitoring nodejs uptime kuma
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

Setting Shell variables Saat Menggunakan Sudo di Linux
·1 min
linux linux
Migrasi CentOS 8 ke Almalinux 8
·2 mins
linux linux
Backup dan Restore Partisi table di Linux
·3 mins
linux linux
PM2 Quick Start
·2 mins
nodejs nodejs pm2
Cek time PID Linux
·1 min
linux
Cara scroll up dan down GNU Screen Linux
·1 min
linux