DevOps · Infrastructure · Docker · Systems
CompletedInception
Built a containerized WordPress infrastructure using Docker, Nginx, MariaDB, TLS, persistent storage, and isolated networking.
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.ymlwith 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://localhostwith 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