KeepUp is a self-hosted, agentless dashboard for monitoring Linux servers over SSH. It collects a concise operational snapshot from each server and keeps health, pending updates and resource information in one place.
- Add, edit and delete monitored servers.
- Connect over SSH using a password or private key.
- Reuse an encrypted private key across multiple monitors.
- Scan every monitor on demand or request a scan for one specific monitor.
- Run scheduled scans daily at
08:00in the application's configured timezone. - Automatically refresh the dashboard every five minutes.
- Optionally send Telegram alerts after scans when a monitor is unreachable or reaches an uptime or available-updates threshold.
For each supported server, KeepUp collects:
- Distribution name and full operating-system version.
- Uptime in days.
- Number of available package updates.
- IPv4 addresses reported by the server.
- CPU load averages.
- Disk usage and available space.
- Whether the Docker daemon is running and how many containers are active.
- UFW status and rules when UFW is installed and accessible to the SSH user.
- At-a-glance totals for healthy monitors, unreachable monitors, available updates and all monitors.
- Per-monitor warning thresholds for uptime and available updates.
- Clear indicators when a server reports a public IP and whether UFW appears active.
- Expandable technical details for network addresses, firewall rules and disk usage.
- Alphabetical monitor ordering.
- Multiple labels per monitor, with deterministic label colors and toggleable dashboard filters.
- Last scan time plus successful-check snapshots of uptime, available updates and scan duration.
- SSH passwords are encrypted at rest with Laravel's application encryption key.
- Uploaded private keys are encrypted before being written to private storage.
- A private key is decrypted into a temporary permission-restricted file only while its scan runs, then removed.
- Docker keeps the database and encrypted private-key storage in persistent named volumes.
Back up APP_KEY securely. Losing or changing it makes previously encrypted passwords and private keys unreadable.
Enable the integration and set its bot and destination values:
TELEGRAM_ENABLED=true
TELEGRAM_BOT_TOKEN=your-bot-token
TELEGRAM_CHAT_ID=your-chat-idTELEGRAM_ENABLED is the global switch and defaults to false. TELEGRAM_BOT_TOKEN is the token issued for the bot, and TELEGRAM_CHAT_ID is the user, group or channel that should receive alerts. KeepUp sends one consolidated message after each affected monitor scan when the monitor is down or unreachable, its available updates meet the configured threshold, or its uptime meets the configured threshold. Telegram errors are logged and do not fail the monitor scan.
- Debian
- Ubuntu
- Arch Linux
- Proxmox VE
KeepUp currently targets these Linux distributions and expects SSH on the standard port 22.
The KeepUp host or containers must be able to reach each monitored server over SSH. The configured SSH user must be allowed to run the commands used for the selected distribution, including:
- Standard system tools such as
cat,awk,ip,uptimeanddf. apton Debian, Ubuntu and Proxmox VE, orpacmanon Arch Linux.dockerwhen Docker status should be collected.ufw statuswhen firewall status should be collected.
These optional Docker and UFW values depend on their commands being installed and usable by the configured account.
The included stack runs the web application, MySQL 8.4, a queue worker and the Laravel scheduler. Database migrations run automatically when the application starts.
- Docker Desktop, or Docker Engine with the Compose v2 plugin.
- A clone of this repository.
-
Copy the Docker environment template:
cp .env.docker.example .env.docker
-
Configure
.env.docker:- Set
APP_URLto the URL used to access KeepUp. - Give
DB_PASSWORDandMYSQL_PASSWORDthe same strong value. - Set a different strong value for
MYSQL_ROOT_PASSWORD. - Optionally set
TELEGRAM_ENABLED=true,TELEGRAM_BOT_TOKENandTELEGRAM_CHAT_IDto enable monitor alerts.
- Set
-
Build the image and generate the Laravel application key:
docker compose build docker compose run --rm --no-deps app php artisan key:generate --show
-
Copy the generated value, including its
base64:prefix, intoAPP_KEYin.env.docker. -
Start the stack and wait for its services:
docker compose up -d --wait
-
Create the first login account:
docker compose exec app php artisan app:create-user -
Open http://localhost:8000 and sign in.
KeepUp is published on port 8000 by default. To use another port, update APP_URL and set KEEPUP_PORT when starting the stack:
KEEPUP_PORT=8080 docker compose up -d --wait# Show service status
docker compose ps
# Follow logs from every service
docker compose logs -f
# Rebuild and restart after updating the project
docker compose up -d --build --wait
# Stop without deleting persistent data
docker compose downThe database and encrypted SSH keys survive a normal docker compose down. Running docker compose down --volumes permanently deletes both named volumes and their data.
KeepUp is licensed under the MIT License.
KeepUp is built with the Laravel Framework; Laravel remains the property of its respective copyright holders.

