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-kumauntuk 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:
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