# `bmallenxs/status` Container image for a small live status page built with Go and Gin. The app reads `config.yaml`, serves a web UI, exposes `/api/status`, and pushes live service updates over WebSockets. ## Quick Start Pull the image: ```bash docker pull bmallenxs/status:latest ``` Run with the bundled config: ```bash docker run --rm -p 8080:8080 bmallenxs/status:latest ``` Open: ```text http://localhost:8080 ``` ## Use Your Own `config.yaml` Mount a config file into the container: ```bash docker run --rm \ -p 8080:8080 \ -v "$(pwd)/config.yaml:/app/config.yaml:ro" \ bmallenxs/status:latest ``` ## HTTPS / TLS If you provide a certificate and key, the container can serve HTTPS directly. ```bash docker run --rm \ -p 8443:8443 \ -e ADDR=:8443 \ -e TLS_CERT_FILE=/certs/server.crt \ -e TLS_KEY_FILE=/certs/server.key \ -v "$(pwd)/config.yaml:/app/config.yaml:ro" \ -v "$(pwd)/certs:/certs:ro" \ bmallenxs/status:latest ``` Open: ```text https://localhost:8443 ``` ## Environment Variables `ADDR` : Full listen address inside the container. Default: `:8080` `PORT` : Port-only fallback if `ADDR` is not set `CONFIG_PATH` : Config file path. Default: `/app/config.yaml` `THEME` : UI theme. Supported values: `dark` or `light`. Default: `dark` `TLS_CERT_FILE` : Optional PEM certificate file path for HTTPS `TLS_KEY_FILE` : Optional PEM private key file path for HTTPS Notes: - Set both `TLS_CERT_FILE` and `TLS_KEY_FILE` to enable HTTPS. - If only one is set, the container exits with an error. ## Example `config.yaml` ```yaml monitors: - name: GitHub url: https://github.com category: Developer Tools - name: Cloudflare DNS url: dns://cloudflare.com category: DNS - name: Google TLS url: tls://www.google.com:443 category: TLS - name: Google Ping url: ping://8.8.8.8 category: Network ``` ## Supported Monitor Schemes `https://` and `http://` : HTTP GET check, healthy on `2xx` and `3xx` `dns://` : DNS resolution check `tls://` : TLS handshake plus certificate validation and expiry reporting `ping://` : TCP reachability check. This is not ICMP ping. ## Exposed Port The image exposes: ```text 8080/tcp ``` If you change `ADDR`, publish the matching container port. ## Endpoints `/` : Browser UI `/api/status` : JSON snapshot `/ws` : WebSocket stream of live `service_update` messages