Chevereto is an open-source self-hosted image hosting platform: a PHP/MySQL application that provides a full image hosting service with user accounts, albums, social features, and direct image links — essentially a self-hosted Imgur alternative for communities, content creators, and developers. Because Chevereto relies on PHP rendering dynamic pages with MySQL-backed settings and user data, outages can be subtle: the web server may respond while PHP is failing, or PHP may render while MySQL is too slow to serve image queries. Vigilmon monitors Chevereto across all layers: the gallery homepage, the PHP API layer, the core upload workflow, SSL certificate validity, and independent MySQL database health via a TCP probe.
What You'll Set Up
- HTTP monitor for the Chevereto homepage (port 80/443)
- HTTP monitor for the Chevereto API layer availability (
/api/1/upload) - HTTP monitor for the Chevereto upload form (
/upload) - SSL certificate expiry alerts for HTTPS Chevereto deployments
- Heartbeat monitor combining a keyword check and a MySQL TCP probe for database health
Prerequisites
- Chevereto deployed and accessible (Apache or Nginx serving PHP on port 80 or 443)
- MySQL running on port 3306 (the default Chevereto database)
- A free Vigilmon account
Step 1: Monitor the Chevereto Homepage
The Chevereto homepage is served by Apache or Nginx. A GET / returns the gallery homepage or login page — a 200 response confirms PHP has bootstrapped successfully and the web server is running. Chevereto queries MySQL for site settings during page render, so a successful homepage confirms the database connection is functional.
- Log in to vigilmon.online and click Add Monitor.
- Set Type to
HTTP / HTTPS. - Enter your Chevereto URL:
http://your-serverorhttps://images.yourdomain.com. - Set Check interval to
1 minute. - Set Expected HTTP status to
200. - Under Response body check, enter your site name or
Uploadto confirm the Chevereto application rendered a real page rather than a PHP error or database connection failure message. - Click Save.
If Chevereto is configured to require login before viewing the gallery, the homepage will redirect to a login form — enable Follow redirects and check for Login or Sign in to confirm the application is serving correctly.
Step 2: Monitor the Chevereto API Layer
Chevereto's v1 REST API endpoint at /api/1/upload is the core programmatic interface. Sending a GET request to this endpoint (without a valid API key) should return a 4xx error (typically 400 Bad Request or 403 Forbidden) rather than a 5xx server error — a 4xx response confirms the PHP API layer is running, MySQL is accessible, and the Chevereto application can handle API requests. A 5xx response indicates a PHP or database failure.
- Click Add Monitor in Vigilmon.
- Set Type to
HTTP / HTTPS. - Enter the API URL:
http://your-server/api/1/upload - Set Expected HTTP status to any 4xx code — use
400or set the monitor to accept4xxas a valid "up" response.- In Vigilmon, set Expected status code to
400and enable Treat 4xx as up if your instance returns 400 for unauthenticated requests.
- In Vigilmon, set Expected status code to
- Under Response body check, enter
erroror"status_code"to confirm a Chevereto JSON error response rather than a PHP fatal error page. - Set Check interval to
5 minutes. - Click Save.
A healthy unauthenticated request returns something like:
{
"status_code": 400,
"error": {
"message": "Empty upload request",
"code": 310
},
"status_txt": "Bad Request"
}
The key distinction: a Chevereto-formatted JSON error means the application layer is healthy. A generic PHP error page or an nginx 502 means something deeper has failed.
Step 3: Monitor the Upload Form
The upload page at /upload is the primary user-facing workflow for anonymous and authenticated image uploads. A GET /upload returns the upload form — a 200 response confirms the upload workflow is accessible and that Chevereto has rendered the core functionality page successfully.
- Click Add Monitor in Vigilmon.
- Set Type to
HTTP / HTTPS. - Enter the upload URL:
http://your-server/upload - Set Expected HTTP status to
200. - Under Response body check, enter
Uploadto confirm the upload form rendered correctly. - Set Check interval to
5 minutes. - Click Save.
If Chevereto's routing breaks (for example, after an .htaccess misconfiguration or a Nginx rewrite rule change following an update), /upload may return a 404 while the homepage still works — this monitor catches that partial routing failure.
Step 4: SSL Certificate Alerts for HTTPS Deployments
Chevereto is commonly served over HTTPS via Apache with mod_ssl or Nginx with Let's Encrypt. An expired certificate immediately breaks all image uploads via the API, prevents browser access, and breaks any external services embedding Chevereto images.
- Open the HTTPS monitor for your Chevereto domain (created in Step 1).
- Enable Monitor SSL certificate under the SSL settings.
- Set Alert when certificate expires in less than
21 days. - Click Save.
Verify your certificate renewal setup:
# Check current certificate expiry
openssl s_client -connect images.yourdomain.com:443 -servername images.yourdomain.com \
</dev/null 2>/dev/null | openssl x509 -noout -enddate
# For Apache + certbot
certbot renew --dry-run
# For Nginx + certbot
nginx -t && certbot renew --dry-run
A 21-day window gives you three weeks to manually renew if the automatic renewal process fails.
Step 5: Heartbeat Monitoring for Database and Application Health
The homepage loading confirms MySQL was reachable at the moment of the check — but a TCP probe to MySQL port 3306 gives you an independent, lightweight signal that the database process is accepting connections, separate from PHP's ability to render pages. Combining a homepage keyword check (which confirms PHP rendered content from MySQL) with a MySQL TCP probe gives you precise fault isolation: if the homepage keyword check fails but the MySQL TCP probe succeeds, the problem is in PHP; if both fail, MySQL is down.
Create the heartbeat monitor first:
- In Vigilmon, click Add Monitor → Cron Heartbeat.
- Set Expected ping interval to
60 minutes. - Copy the heartbeat URL (e.g.
https://vigilmon.online/heartbeat/abc123).
Add a separate TCP monitor for MySQL:
- Click Add Monitor in Vigilmon.
- Set Type to
TCP. - Enter your server address:
your-server - Set Port to
3306. - Set Check interval to
2 minutes. - Click Save.
Then set up a cron job for the heartbeat on the Chevereto host:
#!/bin/bash
# /etc/cron.hourly/chevereto-heartbeat
CHEVERETO_URL="http://localhost"
VIGILMON_HEARTBEAT="https://vigilmon.online/heartbeat/abc123"
# Fetch the homepage and check for the Upload button or site name
RESPONSE=$(curl -s -o /tmp/chev_health.html -w "%{http_code}" \
--max-time 15 \
"${CHEVERETO_URL}/")
if [ "$RESPONSE" = "200" ] && grep -qi "upload" /tmp/chev_health.html; then
curl -s "${VIGILMON_HEARTBEAT}" > /dev/null
else
echo "Chevereto homepage check failed (HTTP ${RESPONSE})" >&2
fi
rm -f /tmp/chev_health.html
Make the script executable:
chmod +x /etc/cron.hourly/chevereto-heartbeat
For Docker-based Chevereto deployments:
docker exec chevereto curl -s http://localhost/ \
| grep -qi "upload" && curl -s "https://vigilmon.online/heartbeat/abc123"
If Chevereto's PHP layer fails to query MySQL for site settings, the homepage will return a database connection error instead of the gallery UI — the keyword check for "Upload" will fail, the heartbeat will not fire, and Vigilmon will alert you after the interval passes.
Step 6: Configure Alert Channels
- Go to Alert Channels in Vigilmon and add Slack, email, or a webhook.
- For the homepage monitor, set Consecutive failures before alert to
2— PHP-FPM process recycling can cause a single brief failure. - For the MySQL TCP probe, set Consecutive failures before alert to
1— database loss warrants immediate alerting. - For the heartbeat, set Grace period to
0.
Summary
| Monitor | Target | What It Catches |
|---|---|---|
| Homepage | http://your-server/ | PHP/web server down, MySQL connection failure |
| API layer | /api/1/upload | PHP API broken, Chevereto not bootstrapping |
| Upload form | /upload | Routing broken, upload workflow inaccessible |
| MySQL TCP | your-server:3306 | MySQL process down, independent of PHP |
| SSL certificate | Chevereto domain | Let's Encrypt certificate expiry |
| Cron heartbeat | Heartbeat URL | Full-stack PHP + MySQL health confirmation |
Chevereto stores and serves images that other websites, posts, and users may depend on — a broken image host means broken embeds across the internet and lost user-uploaded content. With Vigilmon monitoring the gallery homepage, the API layer, the upload workflow, MySQL independently, and a heartbeat that confirms PHP rendered real content from the database, you'll catch outages in seconds rather than discovering them in your support queue hours later.