Process Dec 29, 2025 7 min read

Neuroblastoma Research Foundation — Technical Case Study

WordPress backend modernization using PHP 8.3, Docker Compose, MariaDB 10.5.4, and Nginx with production media fallback. Implemented environment-aware configuration, 3-tier caching (OPcache, Memcached, Redis), Virtual Orders v2.1, and 4 payment gateways. 59-plugin enterprise stack with OWASP security compliance for medical research fundraising platform.

Lushano Perera
Lushano Perera
Author

Backend Infrastructure Modernization for a Medical Research WordPress Platform

Context

The Neuroblastoma Research Foundation website (neuroblastoma.org) is a mission-critical WordPress platform serving a pediatric cancer research organization in Italy. The original website was developed by a previous agency, creating a production-stable multisite installation supporting donation processing, multi-language content, and medical research communications.

Scope of Work

This case study documents the backend infrastructure modernization, focusing on:

  • Docker containerization for local development
  • Environment-aware configuration management
  • Database migration and production synchronization
  • Virtual Orders system implementation (v2.1)
  • Performance optimization and security hardening

Business Context

  • Organization: Italian medical research foundation (pediatric cancer)
  • Mission: Neuroblastoma research funding, patient support, medical community engagement
  • Audience: Researchers, donors, families, medical professionals
  • Languages: Italian (primary) + English (international)

Technology Stack

CategoryTechnologyVersionPurpose
CMSWordPress6.8.3Content management, multisite
PHPPHP-FPM8.3Application server
DatabaseMariaDB10.5.4Data persistence
Web ServerNginxLatestReverse proxy, static assets
CachingMemcachedLatestObject caching
CachingRedisLatestSession/cache extension
CachingOPcachePHP 8.3Bytecode caching
ContainerizationDocker Composev2Development environment
ThemeAvadaLatestFrontend design (agency work)
Page BuilderFusion Builder3.13.3Visual editing (agency work)

PHP Extensions Configured

# From php/Dockerfile
FROM php:8.3-fpm

# Core extensions
docker-php-ext-install pdo_mysql mysqli curl
docker-php-ext-configure gd --with-freetype --with-jpeg
docker-php-ext-install gd

# Performance extensions
pecl install -o -f redis
echo "extension=redis.so" > /usr/local/etc/php/conf.d/redis.ini
echo "opcache.enable_cli=1" >> /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini

Architecture

Docker Services Architecture

Production Media Fallback

A key infrastructure decision was implementing a production media fallback in Nginx, enabling development without syncing large media libraries:

# From nginx/default.conf
# Matches any URL containing /wp-content/uploads/
location ~ "^(.*)/wp-content/uploads/(.*)$" {
try_files $uri @prod_serv;
}

# Redirects to production server for missing media
location @prod_serv {
rewrite "^(.*)/wp-content/uploads/(.*)$"
"https://neuroblastoma.org/wp-content/uploads/$2" redirect;
}

# Image fallback with DNS resolution
location @image_fallback {
resolver 208.67.222.222; # OpenDNS
proxy_pass https://neuroblastoma.org;
}

Benefits:

  • Eliminates need to sync 10+ GB media library
  • Development environment stays lightweight
  • Seamless user experience during development testing
  • Reduces local storage requirements

Key Implementation: Environment-Aware Configuration

Challenge

The existing wp-config.php lacked proper environment separation, making local development error-prone and requiring manual configuration changes.

Solution

Implemented intelligent environment detection supporting both web and CLI contexts:

// From wp-config.php - Environment Detection

// Handle both web and CLI contexts
$is_local = false;
if (defined('WP_CLI') && WP_CLI) {
// WP-CLI context - assume local environment
$is_local = true;
} elseif (isset($_SERVER['HTTP_HOST']) &&
strpos($_SERVER['HTTP_HOST'], 'neuroblastoma.org.local') !== false) {
// Web context - local environment
$is_local = true;
}

if (!$is_local) {
// Production environment
define('FORCE_SSL_ADMIN', true);
if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) &&
strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
$_SERVER['HTTPS']='on';
}
}

// Environment-based database configuration
if ($is_local) {
// Local Docker environment
define('DB_NAME', 'c16_neuroblast');
define('DB_USER', 'c16_neuroblast');
define('DB_PASSWORD', '***');
define('DB_HOST', 'mariadb'); // Docker container name
} else {
// Production environment
define('DB_NAME', 'wp_neuro');
define('DB_USER', 'wp_neuro');
define('DB_PASSWORD', '***');
define('DB_HOST', 'localhost:3306');
}

Implementation Details

FeatureImplementation
WP-CLI SupportDetects CLI context to prevent HTTP_HOST errors
SSL HandlingSupports load balancer X-Forwarded-Proto header
Database SwitchingAutomatic host switching (Docker vs. production)
Memory Management512MB limit for large content operations
Error LoggingDynamic path resolution for any document root

Virtual Orders System (v2.1)

Overview

A significant backend implementation was the Virtual Orders system, enabling automated order processing for the donation and e-commerce platform.

Documentation Generated

DocumentPurposeSize
VIRTUAL_ORDERS_V2.1_IMPLEMENTATION_SUMMARY.mdComplete technical overview16KB
VIRTUAL_ORDERS_V2.1_CHANGELOG.mdVersion history and changes14KB
VIRTUAL_ORDERS_V2.1_TEST_PLAN.mdComprehensive test scenarios21KB
VIRTUAL_ORDERS_V2.1_OPERATIONS_GUIDE.mdOperational procedures17KB
VIRTUAL_ORDERS_V2.1_SECURITY_COMPLETE.mdSecurity audit results16KB
PERFORMANCE_ANALYSIS_VIRTUAL_ORDERS_V2.1.mdPerformance benchmarks46KB
SECURITY_AUDIT_VIRTUAL_ORDERS_V2.1.mdOWASP compliance review18KB

Quality Assurance

  • Formal code review documentation
  • Security audit with OWASP compliance verification
  • Performance analysis and optimization
  • Comprehensive test plan with scenarios

Plugin Architecture

Core Donation System

The platform utilizes a dual donation system:

PluginPurposeIntegration
GivePrimary donation platformRecurring donations, forms
Give Form Field ManagerCustom form fieldsDonor data collection
Give RecurringSubscription donationsMonthly/annual giving
YITH DonationsWooCommerce donationsProduct-based donations

Payment Gateway Stack (Italy-Focused)

Payment Gateways
├── Stripe (International)
│ └── Cards, Apple Pay, Google Pay
├── PayPal Payments
│ └── Global payment processing
├── GestPay (Banca Sella)
│ └── Italian bank integration
└── Satispay
└── Italian mobile payments

Custom Donation Page Integration

The page-donazioni-on-line.php implements direct GestPay SOAP integration:

// From wp-content/themes/Avada-Child-Theme/page-donazioni-on-line.php

// Production GestPay credentials
$shopLogin = '9008631';
$currency = '242'; // Euro

// Membership fee validation (minimum €100)
function checkQuota() {
if (jQuery("#causale").val() == "Quota associativa") {
if (selecteditem == "altro") {
if (jQuery("#importo-donazione-altro").val() < 100) {
jQuery("#quota_msg").html(
"Per la quota associativa, l'importo minimo è €100,00."
);
return false;
}
}
}
return true;
}

// NuSOAP client for GestPay encryption
require_once($_SERVER["DOCUMENT_ROOT"]."/lib/nusoap.php");
$wsdl = "https://ecomms2s.sella.it/gestpay/gestpayws/WSCryptDecrypt.asmx?WSDL";
$client = new nusoap_client($wsdl, true);

// Encrypt payment parameters
$param = array(
'shopLogin' => $shopLogin,
'uicCode' => $currency,
'amount' => $amount,
'shopTransactionId' => $shopTransactionID
);
$objectresult = $client->call('Encrypt', $param);

Plugin Inventory Summary

CategoryCountNotable Plugins
Donation/Fundraising4Give, Give Recurring, YITH Donations
E-Commerce9WooCommerce, Checkout Manager Pro
Payment Gateways4Stripe, PayPal, GestPay, Satispay
Multilingual3WPML, String Translation, Loco
Security4Really Simple SSL, Role Editor
SEO1Yoast SEO Premium
Performance3Varnish Purge, OPcache Reset
Backup/Migration4Duplicator, AIOIM, WP Migrate DB Pro
Custom1wp-neuroblastoma-export
Total59Full enterprise stack

Database Architecture

Configuration

# From docker-compose.yml
mariadb:
image: mariadb:10.5.4
volumes:
- ./mariadb:/var/lib/mysql
environment:
MYSQL_DATABASE: c16_neuroblast
MYSQL_USER: c16_neuroblast
ports:
- "3306:3306"

Key Settings

SettingValuePurpose
Table Prefixneuro_Namespace isolation
Character Setutf8mb4Full Unicode support
MultisiteWP_ALLOW_MULTISITE = trueMulti-language support
Memory Limit512MBLarge content operations

Directory Structure

neuroblastoma.org/
├── docker-compose.yml # Container orchestration
├── wp-config.php # Environment-aware configuration

├── nginx/
│ ├── Dockerfile # Nginx image build
│ └── default.conf # Production fallback config

├── php/
│ └── Dockerfile # PHP 8.3-FPM + extensions

├── mariadb/ # Database persistent storage
│ └── c16_neuroblast/ # Database files

├── eng/ # English subdirectory (multisite)
│ ├── wp-admin/
│ ├── wp-content/
│ └── wp-includes/

├── wp-content/
│ ├── themes/
│ │ ├── Avada/ # Commercial theme (agency)
│ │ └── Avada-Child-Theme/ # Customizations
│ │ └── page-donazioni-on-line.php # Custom donation
│ ├── plugins/ # 59 plugins installed
│ └── mu-plugins/ # Must-use plugins

└── docs/ # Generated documentation
├── CASE_STUDY_TECHNICAL.md
└── CASE_STUDY_EXECUTIVE.md

Development Timeline

DateMilestoneDescription
March 23, 2021Repository CreationInitial Git tracking of production site
March 31, 2021Production SyncAligned repository with live environment
October 6, 2025Modernizationwp-config.php overhaul, database import
October 7-9, 2025Virtual Orders v2.1Complete system implementation

Git History Summary

Commits: 3 total (production-first development)
Contributors: 1 (backend specialist)
Timespan: 4.6 years (March 2021 - October 2025)

Security Implementation

SSL/TLS Configuration

// Session security (Really Simple SSL)
@ini_set('session.cookie_httponly', true);
@ini_set('session.cookie_secure', true);
@ini_set('session.use_only_cookies', true);

// Production HTTPS enforcement
define('FORCE_SSL_ADMIN', true);
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
$_SERVER['HTTPS'] = 'on';
}

Security Measures

MeasureImplementation
SSL EnforcementFORCE_SSL_ADMIN + load balancer detection
Admin ProtectionCustom admin login URL
Cookie SecurityhttpOnly, secure, cookie-only sessions
PCI ComplianceStripe + GestPay certified gateways
GDPRCookie notice, data consent forms
Access ControlUser Role Editor for fine-grained permissions

Performance Optimizations

Caching Stack

Caching Layers
├── OPcache (PHP bytecode)
│ └── CLI enabled for WP-CLI performance
├── Memcached (Object cache)
│ └── WordPress transients and queries
├── Redis (Optional)
│ └── Session handling capability
└── Varnish HTTP Purge
└── Full-page cache invalidation

Docker Performance

# Optimized volume mounting
app:
image: php:8.3-fpm
volumes:
- .:/var/www/html:delegated # macOS performance optimization

Nginx Buffering

fastcgi_buffer_size 16k;
fastcgi_buffers 4 16k;
client_max_body_size 100m;

Quality Practices

Documentation Standards

  • Comprehensive markdown documentation for all major features
  • Security audit reports
  • Performance analysis benchmarks
  • Test plans with scenarios
  • Operations guides for production

Code Review Process

  • VIRTUAL_ORDERS_CODE_REVIEW.md – Detailed review
  • VIRTUAL_ORDERS_V2_FIXES_APPLIED.md – Issue tracking
  • Security audit documentation

Key Learnings

1. Production-First Development

The sparse Git history reflects a production-stable system where changes are carefully planned rather than frequently iterated.

2. Environment Isolation

Docker-based development with production media fallback enables efficient local development without massive data synchronization.

3. Plugin Ecosystem Management

59 plugins require careful dependency management and update coordination, addressed through:

  • ManageWP remote monitoring
  • Multiple backup systems (Duplicator, AIOIM, WP Migrate DB Pro)
  • Varnish cache purging for updates

4. Medical Industry Requirements

Payment processing, donor data, and medical research content require:

  • PCI-compliant payment gateways
  • GDPR-compliant data handling
  • SSL/TLS enforcement throughout
  • Audit trails for donations

Technologies Demonstrated

  • Backend: PHP 8.3, WordPress 6.8, Custom SOAP integrations
  • Database: MariaDB 10.5.4, Query optimization
  • Infrastructure: Docker Compose, Nginx, Memcached, Redis
  • DevOps: Environment-aware configuration, Production fallbacks
  • Security: SSL/TLS, OWASP compliance, PCI-DSS awareness
  • Documentation: Technical writing, Security audits, Test plans

Conclusion

This backend modernization transformed a legacy WordPress installation into a professionally managed, containerized development environment while maintaining the stability required for a medical research foundation. The implementation demonstrates:

  • Infrastructure expertise: Docker containerization with production-aware configuration
  • Security consciousness: Multi-layer security implementation for medical/financial data
  • Documentation standards: Comprehensive technical documentation for maintenance
  • Performance optimization: Multi-tier caching for optimal user experience

The project successfully bridges the gap between the original agency-developed frontend and modern DevOps practices, ensuring the platform can continue serving the Neuroblastoma Research Foundation’s mission of advancing pediatric cancer research.

Written by Lushano Perera

Digital craftsman exploring the intersection of design, technology, and human experience.