Back to projects

DevOps · Infrastructure · Docker · Systems

Completed

Inception

View on GitHub

Built a containerized WordPress infrastructure using Docker, Nginx, MariaDB, TLS, persistent storage, and isolated networking.

DockerDocker ComposeNginxMariaDBWordPressPHP-FPMLinuxTLS

Goal & Architecture

A DevOps and systems project focused on building a multi-container web infrastructure and understanding how Nginx, WordPress/PHP-FPM, MariaDB, Docker networking, TLS, and persistent storage work together.

Core Components

  • Nginx — TLS termination, reverse proxy to PHP-FPM
  • WordPress (PHP-FPM) — Application runtime
  • MariaDB — Persistent database storage
  • Docker Compose — Multi-container orchestration
  • Private Docker network — Service isolation
  • Named volumes — Persistent storage for WP files & DB data

Key Technical Decisions

  • Service discovery via Docker DNS (service names as hostnames)
  • PHP-FPM on port 9000, Nginx proxies via FastCGI
  • MariaDB healthcheck + startup wait script for WP dependency
  • Self-signed TLS certificates for local HTTPS
  • Volumes bind-mounted to host paths for data persistence

My Contribution

  • Designed and implemented the full docker-compose.yml with three services, networks, and volumes
  • Configured Nginx with TLS, FastCGI params, and security headers
  • Wrote MariaDB initialization scripts and WordPress auto-configuration
  • Created entrypoint scripts handling service dependencies and first-run setup
  • Debugged Docker networking, DNS resolution, and service startup ordering
  • Verified end-to-end HTTPS access and data persistence across container recreation

Challenges & Solutions

Nginx could not initially reach the WordPress PHP-FPM service.

Debugged Docker DNS and service networking, then configured Nginx to use the WordPress service name and PHP-FPM port over the internal Docker network.

WordPress startup depended on MariaDB being ready.

Added startup logic that waits for MariaDB connectivity before continuing WordPress installation and configuration.

Application and database data needed to survive container recreation.

Configured persistent storage for WordPress files and MariaDB data independently of the container lifecycle.

Verification & Results

  • All three containers start and reach healthy state via docker compose up
  • WordPress accessible at https://localhost with valid TLS
  • Database persists across docker compose down && docker compose up
  • WordPress files persist across container recreation via named volumes
  • Private network isolates services — no ports exposed except Nginx 443
  • Passes 1337/42 evaluation criteria for Inception project

Multi-container architecture

HTTPS with TLS

Persistent storage

Private Docker network

Service health and startup debugging