Ghyma Deploy — Static Site with Health Monitoring
A "Coming Soon" static site, containerized with nginx, deployed on ghaymah.systems, with a built-in health check, request metrics, and a live monitoring dashboard.
Project Structure
comingsoon-deploy/
├── Dockerfile # Builds the nginx image
├── nginx.conf # Adds /health and /nginx_status routes + CORS
├── monitor.py # CLI script: polls /health every 30s, logs results
├── comingsoon/ # The static site itself (HTML/CSS/JS)
└── dashboard/
└── index.html # Live monitoring dashboard (served at /dashboard)
What Gets Deployed
The Docker image bundles three things served by a single nginx instance:
| Path | What it is |
|---|---|
/ |
The static "Coming Soon" site |
/dashboard |
Live monitoring UI (status, response time, request count) |
/health |
Plain-text health check, returns ok |
/nginx_status |
nginx stub_status output, used for request count |
monitor.py is not bundled in the image — it's a standalone script
meant to run on your machine (or any external host) against the deployed
URL.
Build & Run Locally
cd comingsoon-deploy
docker build -t motazelalfy/ghyma:latest .
docker run -d -p 8080:80 --name comingsoon motazelalfy/ghyma:latest
Check it's working:
curl http://localhost:8080/health
curl http://localhost:8080/nginx_status
Open in browser:
- Site: http://localhost:8080
- Dashboard: http://localhost:8080/dashboard (auto-detects and monitors itself)
Push to Docker Hub
docker login
docker push motazelalfy/ghyma:latest
Deploy on ghaymah.systems
- Log in at https://deploy.ghaymah.systems
- Create a new app/service → Deploy from image
- Image:
motazelalfy/ghyma:latest - Port:
80 - Health check path (if available):
/health - Deploy and wait for the public URL
Monitor the Deployed App
Option A — open the dashboard on the live URL:
https://your-app.ghaymah.systems/dashboard
Option B — run the CLI monitor from your machine:
python monitor.py --url https://your-app.ghaymah.systems
Runs a check every 30 seconds by default, writes monitor.log and
monitor_history.json, and alerts after 3 consecutive failures.
Useful flags:
python monitor.py --url <URL> --interval 30 --health-path /health --once
Notes / Known Limitations
- The site's PHP contact form (
comingsoon/php/contact.php) does not work as-is — this image serves static files only, no PHP runtime. Addingphp-fpmto the Dockerfile would be needed to enable it. /nginx_statusis open to any origin (CORS enabled) so the dashboard can read it — fine for this monitoring use case, but worth restricting if the app ever needs tighter access control.