Deep dive · Infrastructure and virtualisation

The infrastructure behind the Initpc e-commerce

Over 280,000 products and more than one million images do not fit on a single server. We gave every role its own Proxmox VM, put HAProxy and Varnish in front of the web tier, and pfSense with Hector LIS on the perimeter.

  • 4.7 · 38 Google reviews
  • 25 years of experience
  • ISO 9001 / ISO 27001
TN Solutions technician working on a server rack: the virtualised infrastructure that runs the Initpc e-commerce
280,000+ products served

01 / The challenge

A catalogue that does not fit on one machine

WooCommerce with over 280,000 products generates workloads that differ widely from one another: heavy database queries, PHP pages to produce, an in-memory cache, a search engine of its own and batch imports from suppliers. On a single server, one workload's peak becomes everyone's slowdown, and every maintenance job puts sales at risk. What was needed was an infrastructure in which every component could stop, grow or be updated without switching the shop off, with a network perimeter able to keep the data away from the public layer.

  • Web, database, cache and search workloads competing with each other
  • No maintenance possible without halting sales
  • Over one million media files to store and back up

02 / The solution

A layered infrastructure, with every role in its own virtual machine

Proxmox VE on Ubuntu Server hosts separate VMs for web, database, cache, search and services. HAProxy balances the load and terminates TLS, Varnish serves pages already generated, Redis takes load off MariaDB, Docker isolates Elasticsearch and the auxiliary services. pfSense segments the network and Hector LIS monitors the traffic.

Tools and technologies

Technologies and tools we used

  • Proxmox VE on Ubuntu Server
  • HAProxy
  • Varnish
  • Redis
  • MariaDB
  • Docker with Elasticsearch
  • pfSense and Hector LIS

03 / The results

What we achieved

  • 280,000+ products served by a layered infrastructure, every role in its own VM
  • 1,000,000+ product images on dedicated storage with incremental copies
  • 20 years of system evolution, from a single server to Proxmox VE
  • Each layer scales on its own: more web VMs behind HAProxy, more RAM for cache and database, more nodes for search
  • Cache, search and services can stop without interrupting sales: the system degrades, it does not block
  • Network segmented with pfSense and traffic monitored by Hector LIS: the database is never exposed to the public layer

04 / Technology partners

  • 25+ Years supporting businesses
  • 4.7/5 Average rating on Google
  • 38 Verified reviews
  • ISO 9001/27001 ISO certifications

An e-commerce with over 280,000 products in its catalogue and more than one million images is not a website: it is a system that has to stay up while suppliers update their price lists, customers buy, crawlers pass through and marketplace exports run in the background. For Initpc, whose technical partner we have been since 2006, we chose not to put everything on a single machine, but to build a layered infrastructure in which every layer has a precise, replaceable job.

Here we describe what that infrastructure looks like today, in production: Proxmox VE on Ubuntu Server, HAProxy in front of everything, Varnish and Redis for caching, MariaDB for the data, Docker for the auxiliary services, pfSense and Hector LIS on the perimeter. We also explain what happens when one piece stops: that is where you can tell whether an architecture was designed or merely installed. This is the infrastructure deep dive of the complete architecture of the Initpc project, which also covers the platform, search, ERP integration and AI.

Why virtualise: Proxmox VE on Ubuntu Server

A WooCommerce store with a catalogue this size has workloads that differ widely from one another: the web tier serves pages and runs PHP, the database executes heavy queries on products and metadata, the in-memory cache wants RAM and low latency, search has an engine of its own, and imports run in batches overnight. On the same machine, one workload's peak becomes everyone's slowdown.

So we chose Proxmox VE installed on top of Ubuntu Server: an open-source hypervisor with centralised management of virtual machines, snapshots, built-in backup and a networking model suited to segmentation, sitting on a base we update with the same tools we use on every system we run for our clients, with no dependence on a closed appliance.

The practical consequence is that every role lives in its own VM: web frontend, database, cache, search, services. Each has its own allocated resources and can be updated, cloned or moved without touching the others. It is the same approach we apply in our enterprise server virtualisation projects: separate by role before you separate by power.

The map of the layers and what happens if one goes down

The table summarises the layers, the component that implements each one and the effect of its failure: it is the same map we use ourselves when we intervene.

Layer Component Role If it goes down
Perimeter pfSense Firewall and network segmentation External traffic does not get in: site unreachable, data protected
Monitoring Hector LIS Intrusion detection, traffic analysis The site keeps working; visibility on events is lost until restored
Entry point HAProxy Load balancing and TLS termination No request reaches the web tier: the first thing to restore
HTTP cache Varnish Serves pages already generated Requests go to the web backends: site up, under more load
Application Web VM with WooCommerce Generates pages, cart, checkout Varnish serves what it has in cache; dynamic pages stop
Object cache Redis Object cache and sessions WooCommerce reads everything from MariaDB: slower, but working
Data MariaDB Catalogue, orders, customers No orders: the one point to protect with backups
Search Elasticsearch in Docker Search index and autosuggest Search falls back to native queries; everything else is unaffected
Services Docker, ERP, imports Price list and marketplace synchronisation The site keeps selling on the last successful sync

The "If it goes down" column is the design criterion: no non-essential component may drag sales down with it.

Entry point: HAProxy between the Internet and the web tier

Every request that gets past the firewall goes through HAProxy, which performs two tasks deliberately kept out of the web VMs.

The first is TLS termination: certificates and encryption are handled in a single place. The backends receive already-decrypted traffic on the segmented internal network, never deal with renewals, and any policy change is made once.

The second is load balancing: HAProxy distributes requests across the web backends and checks that they respond; a backend that stops responding leaves the rotation without human intervention and rejoins it when it is healthy again. This is what makes horizontal growth of the web tier a routine operation: clone a web VM in Proxmox, add it to the backends, reload the configuration.

Two-level caching: Varnish and Redis

On a catalogue like this, caching is not an optimisation, it is part of how the system works, and the two levels play different roles.

Varnish sits in front of the web VMs and keeps the pages already generated: once WordPress has produced a product page or a category, subsequent requests are served without running PHP or querying the database. Cart, checkout and the customer area are excluded by rule. When the ERP updates a product's price or availability, the corresponding page is purged and regenerated on the next request.

Redis works inside the application: it acts as the object cache for WordPress, holding the results of the most frequent queries on options, terms and product metadata, and it manages sessions. On WooCommerce, where a single page may need dozens of database reads, it takes load off MariaDB in a structural way. In short: Varnish avoids generating the page, Redis makes generating it cheaper when that is unavoidable.

Data and services: MariaDB and Docker

MariaDB lives in a dedicated VM, sized to keep the hot part of the product and metadata tables in memory. It is the only component whose state cannot be rebuilt from the others: that is why it has its own backups, independent of the hypervisor's.

On the services VM we use Docker for everything auxiliary to the application: this is where Elasticsearch runs, queried by the site through ElasticPress, and where the ERP import and synchronisation processes live. Containers let us update or rebuild a service from a known image without one broken component dragging down the others. We describe the role of the search engine in the deep dive on Elasticsearch for e-commerce search; the flow of product data in the one on the ERP and warehouse synchronisation.

Storage and backup for over one million media files

Product images are the largest dataset and the one that grows fastest: we keep them on storage separate from the VMs' system disks, mounted by the web machines, so that restoring the web tier never means copying the media again and adding space never means rebuilding the VMs. Backup follows the same principle: VMs saved as images by the hypervisor, the database with its own dumps, media with incremental copies of only the new or changed files. Restores are tested, not just configured, because a backup that has never been restored is a hypothesis. It is the same method we offer as a Proxmox backup service.

Availability and scalability, layer by layer

The most important point is not raw power, but the fact that each layer scales on its own. The web tier scales horizontally, with more identical VMs behind HAProxy. Varnish scales first by raising the share of pages served from cache, then by adding memory. Redis scales on RAM and, if needed, by separating sessions from the object cache. MariaDB scales vertically on its VM and, looking ahead, with a read-only replica for catalogue queries. Elasticsearch scales by adding nodes to the cluster in Docker. Batch services move to a VM of their own when they start to weigh.

On the availability side the rule is to degrade rather than stop, as the table shows: only HAProxy and MariaDB actually take the shop down, and those are the two on which we concentrate monitoring and recovery procedures. Day-to-day management falls under our business server support.

Perimeter and monitoring: pfSense and Hector LIS

An e-commerce exposes a PHP application, a checkout and APIs to the public: defence cannot be reduced to updating plugins.

pfSense is the perimeter firewall and the tool we used to segment the network. The web tier is reachable from HAProxy, the database only from the web tier and the services, Proxmox management only from the administration network: a compromise of the public layer must not give direct access to the data. The rules are few, explicit and reviewed whenever the architecture changes, as in our firewall management and installation service.

Hector LIS is our intrusion detection and traffic monitoring product. It watches what passes through the perimeter and between segments, recognises anomalous patterns — scans, repeated attempts on authentication, traffic towards unexpected destinations — and flags them before they turn into an incident. On a site with so much legitimate automated traffic, crawlers and integrations included, the value lies in telling normal noise apart from what deserves action; we cover it on the Hector LIS page.

Frequently asked questions

The questions we get about this project

Why use Proxmox for an e-commerce instead of a single server?

Because the workloads of a large e-commerce get in each other's way: the database, page generation, caching, search and overnight imports all have different CPU, RAM and disk requirements. With Proxmox VE every role lives in its own VM, can be updated, cloned or restored without touching the others, and the infrastructure grows by adding machines where they are needed instead of replacing an ever-bigger server.

What happens if the cache or search stops?

The shop keeps selling. If Varnish is unavailable, requests go straight to the web VMs, which respond under more load; if Redis is missing, WooCommerce reads everything from MariaDB, slower but without errors; if Elasticsearch is down, search falls back to the platform's native queries. Every non-essential layer is designed to degrade rather than block sales; monitoring and recovery concentrate on the two components with no plan B, HAProxy and the database.

How are the data and product images protected?

On three levels. The virtual machines are saved as images by the hypervisor, the MariaDB database has its own dumps, and the more than one million media files sit on dedicated storage with incremental copies of only the new or changed files. On the perimeter, pfSense segments the network so that the database cannot be reached from the public layer, and Hector LIS monitors traffic to flag anomalous behaviour before it becomes a problem.

More case studies

Does your e-commerce still run on a single server?

Separating roles, putting cache at the right level, protecting the perimeter: tell us about your infrastructure and we will tell you what we would change first.

06 / Talk to an expert

Talk to the people who built the Initpc architecture

Tell us about your catalogue, your platform and what no longer holds up: we call you back within one business day.

A senior consultant reviews the situation with you — infrastructure, search, data management, migration — and proposes the solution proportionate to the real scale of your store, with no obligation.

At least 10 characters.

Fill in to send: Name, Email, Message, privacy consent.

I have read the Privacy Policy and consent to the processing of my data.

We use cookies

We use technical cookies required for the site to work and, only with your consent, analytics and marketing cookies. You can accept, refuse or choose category by category. If you continue browsing to another page without choosing, cookies are considered accepted. Cookie Policy