elouann.dev
FR — version française

ProjectsSystems, network & algorithms

Inception

Docker infra with home-made monitoring

Period
Jul 2025 – Feb 2026
Context
42 curriculum
Team
solo
Grade
125/100 · outstanding ×3
  • Go
  • Docker
  • MariaDB
  • Network
  • System administration

View source

A small but complete infrastructure, built with Docker Compose: a WordPress site, its database, its web server, then everything I felt like adding, up to monitoring partly written by hand.

Internet:443 HTTPSFTP client:21guardiansecrets (Go)inception-networkNginxTLSWordPressPHP-FPMMariaDBvolumeRediscacheAdminerdatabase UIWondercatNuxt siteFTPvsftpdGomblingGo gameFTP: WordPress filesmonitoringexporters ×4written in GoPrometheuscollectsGrafanadisplaysMariaDB · Redis · PHP-FPM · Nginx
DiagramThe services on their Docker network. Only Nginx is exposed over HTTPS; at the bottom, the monitoring chain.

The basics

Each service has its own image, written from a Dockerfile (no ready-made images): Nginx with TLS as the only way in on port 443, WordPress with PHP-FPM, and MariaDB. Data lives in volumes, and services only talk to each other on a dedicated Docker network.

Services start in the right order thanks to healthchecks: WordPress waits until MariaDB is actually ready, not just started.

The extras

A Redis cache for WordPress, an FTP server to the site’s files, Adminer for the database, a static site in Nuxt, and a small game in Go. Then monitoring: Prometheus collects metrics and Grafana displays them.

The exporters, which translate the state of MariaDB, Redis, PHP-FPM and Nginx into Prometheus metrics, I wrote myself in Go. I also wrote “guardian”, a Go tool that generates secrets and environment variables safely, so that no password lies around in the repository.

What I took away

  • A container is an isolated process, not a virtual machine.
  • “Started” is not “ready”: hence healthchecks.
  • Secrets are generated and mounted, never committed.