A small, reproducible service used to practice the foundations of DevOps: Git, Python services, Docker, networking, health checks, CI, Prometheus, and Grafana.
- A minimal HTTP service with
/and/healthendpoints - Automated tests with Python's standard library
- A non-root Docker container
- Docker Compose with a private user-defined bridge network
- Nginx reverse proxy with only the proxy port published
- Service health checks and dependency ordering
- GitHub Actions for tests, image builds, Compose validation, and an integration request
python3 -m unittest discover -s tests -v
python3 app/main.pydocker compose up --build -d
curl http://localhost:8080/health
docker compose ps
docker compose downThe request path is:
host:8080 -> proxy:80 -> app:8080
The app has no host port mapping. It is reachable only by the proxy over the private frontend network. Details are in networking/README.md.
- A container packages the application and runtime, but is not a virtual machine.
portspublishes a container port to the host;exposedocuments an internal port without publishing it.- User-defined Docker networks provide container-to-container DNS using service names.
- Health checks let Compose and orchestrators detect failure.
- CI should test both code and the deployed wiring, not just build an image.
- Add Prometheus metrics and Grafana dashboards.
- Add image scanning and publishing to GitHub Container Registry.
- Deploy the service to Kubernetes.
- Add an incident runbook and failure exercise.