Adminer (formerly phpMinAdmin) packs a complete database administration interface into a single PHP file of around 500 KB. It supports MySQL, PostgreSQL, SQLite, MS SQL Server, Oracle, MongoDB, Elasticsearch, and more — making it the go-to lightweight database UI for developers who need fast, portable database access on shared hosting, Docker containers, and VPS environments without the overhead of phpMyAdmin. Because Adminer is so easy to drop onto any server, it often ends up in production without formal monitoring. Vigilmon fixes that by watching the Adminer page, the underlying database port, and the web server that serves the PHP file.
What You'll Set Up
- HTTP monitor for the Adminer login page (
/adminer.phpor/adminer/) - TCP port monitor for the database backend (MySQL 3306, PostgreSQL 5432, or other)
- HTTP monitor for the web server serving Adminer
- SSL certificate expiry alert for HTTPS deployments
- Heartbeat monitor for database maintenance scripts triggered from Adminer sessions
Prerequisites
- Adminer deployed and accessible over HTTP or HTTPS
- MySQL, PostgreSQL, or another supported database running and accessible
- A free Vigilmon account
Step 1: Monitor the Adminer Login Page
Adminer's login page is the top-level availability check. A failure here indicates the web server is down, PHP is not processing, or Adminer's single file is missing or inaccessible.
- Log in to vigilmon.online and click Add Monitor.
- Set Type to
HTTP / HTTPS. - Enter your Adminer URL. Common paths:
https://yourdomain.com/adminer.phphttps://yourdomain.com/adminer/https://db.yourdomain.com/
- Set Check interval to
1 minute. - Under Keyword check, enter
AdminerorLoginto verify the page is serving the actual Adminer interface rather than a directory listing or PHP error. - Set Expected HTTP status to
200. - Click Save.
The keyword check is important for Adminer because a misconfigured PHP setup may return a 200 with a download prompt for the .php file instead of executing it — a keyword check will catch this.
Step 2: Monitor the Database Backend TCP Port
Adminer connects to your database on its configured port. Add a TCP monitor so you can distinguish between Adminer itself being down versus the underlying database failing:
For MySQL or MariaDB:
- Click Add Monitor → TCP Port.
- Enter your database hostname or IP.
- Set Port to
3306. - Set Check interval to
1 minute. - Click Save.
For PostgreSQL:
- Click Add Monitor → TCP Port.
- Enter your PostgreSQL hostname or IP.
- Set Port to
5432. - Set Check interval to
1 minute. - Click Save.
For other Adminer-supported databases, use their respective default ports (MS SQL: 1433, Oracle: 1521, MongoDB: 27017). This TCP check gives you a clean signal when the database process has crashed or become unreachable at the network level, independent of whether Adminer's PHP layer is functioning.
Step 3: Verify Web Server Health
Adminer depends on a web server (Nginx, Apache, or Caddy) to execute the PHP file. Add a root-level HTTP check to distinguish web server failures from Adminer-specific failures:
- Click Add Monitor → HTTP / HTTPS.
- Enter your web server's root URL:
https://yourdomain.com/ - Set Expected HTTP status to
200(or301/302if the root redirects). - Set Check interval to
2 minutes. - Click Save.
If this monitor fails while the Adminer-specific monitor is also down, the issue is in the web server layer. If only the Adminer monitor fails, the PHP configuration or the Adminer file itself is the problem.
For Docker-based Adminer deployments (the official adminer Docker image), this step verifies the container is running and the exposed port is reachable from outside.
Step 4: SSL Certificate Alerts
Adminer handles database login credentials directly in the browser. An expired certificate exposes those credentials to interception. Add SSL monitoring with sufficient lead time:
- Open the HTTP / HTTPS monitor you created in Step 1.
- Enable Monitor SSL certificate under the SSL section.
- Set Alert when certificate expires in less than
21 days. - Click Save.
Adminer is frequently deployed with Let's Encrypt certificates via Certbot or Caddy's automatic TLS. These auto-renew reliably under normal conditions, but renewal can fail if:
- The server is temporarily unreachable during the ACME challenge
- Port 80 is firewalled during renewal
- Caddy's data directory runs out of disk space
A 21-day alert window gives you enough time to diagnose and manually intervene before the certificate lapses.
Step 5: Heartbeat Monitoring for Scheduled Database Maintenance
Adminer is often used to set up and verify database maintenance routines — pg_cron jobs in PostgreSQL, MySQL Event Scheduler events, or shell scripts that perform regular cleanup, aggregation, or backup tasks. Use Vigilmon's cron heartbeat to confirm these jobs are running on schedule:
- In Vigilmon, click Add Monitor → Cron Heartbeat.
- Set the Expected ping interval to match your maintenance job's frequency (e.g.
1440minutes for a daily job). - Copy the heartbeat URL (e.g.
https://vigilmon.online/heartbeat/abc123). - Add a heartbeat ping at the end of your maintenance script:
For a PostgreSQL pg_cron job wrapper:
#!/bin/bash
# Daily database maintenance — runs as a system cron job
psql -U dbadmin -d mydb -c "CALL perform_daily_maintenance();"
if [ $? -eq 0 ]; then
curl -s --max-time 10 https://vigilmon.online/heartbeat/abc123
fi
For a MySQL Event Scheduler companion script:
#!/bin/bash
# Poll MySQL for successful event completion in the last 25 hours
RESULT=$(mysql -u monitor -pmonitorpass mydb \
-e "SELECT COUNT(*) FROM maintenance_log WHERE run_at > NOW() - INTERVAL 25 HOUR;" \
--skip-column-names 2>/dev/null)
if [ "$RESULT" -gt "0" ]; then
curl -s --max-time 10 https://vigilmon.online/heartbeat/abc123
fi
For a Docker-based Adminer setup with a companion cron container:
# Dockerfile for cron companion
FROM alpine:latest
RUN apk add --no-cache postgresql-client curl
COPY maintenance.sh /maintenance.sh
RUN chmod +x /maintenance.sh
# Add to crontab
RUN echo "0 2 * * * /maintenance.sh" | crontab -
CMD ["crond", "-f"]
If the maintenance job stops running — due to a pg_cron configuration change, a MySQL Event Scheduler being disabled, or a script failure — Vigilmon alerts when the heartbeat stops arriving within the expected window.
Step 6: Configure Alert Channels
- Go to Alert Channels in Vigilmon and add Slack, email, or a webhook.
- Set Consecutive failures before alert to
2on the Adminer page monitor — PHP-FPM pool restarts can cause single-probe misses. - Set the TCP port monitors to alert on
1consecutive failure — database ports going silent is always urgent. - Consider separate alert channels for database failures (TCP monitors) versus web UI failures (HTTP monitors) so the right team receives each alert.
Summary
| Monitor | Target | What It Catches |
|---|---|---|
| Adminer login page | /adminer.php or /adminer/ | PHP failure, web server down, file missing |
| MySQL TCP | 3306 | MySQL/MariaDB crash or network block |
| PostgreSQL TCP | 5432 | PostgreSQL crash or network block |
| Web server root | / | Nginx/Apache/Caddy failure |
| SSL certificate | Adminer HTTPS domain | Certificate expiry before credentials exposed |
| Cron heartbeat | Heartbeat URL | Scheduled maintenance jobs silently stopped |
Adminer's simplicity — a single PHP file — makes it easy to overlook operationally. With Vigilmon watching the login page, the database port, the web server, and the SSL certificate, you'll know immediately when Adminer or its underlying database stack becomes unavailable, and you'll have enough signal to pinpoint exactly which layer failed.