Running your own online store gives you full control over your data, your customer relationships, and your revenue. Unlike hosted platforms that charge monthly fees and take a cut of every sale, self-hosted e-commerce solutions run on your own infrastructure with no per-transaction fees.

In this guide, we compare the three most widely-used open-source e-commerce platforms: WooCommerce, PrestaShop, and OpenCart. All three are PHP-based, have large extension ecosystems, and can be deployed with Docker for reproducible, production-ready stores.

Why Self-Host Your E-Commerce Platform?

Hosted platforms like Shopify, BigCommerce, and Wix charge $29-$299/month in subscription fees, plus 0.5-2% per transaction on top of payment processor fees. For a store doing $10,000/month in sales, those add-on fees alone cost $50-$200 every month — money that stays in your pocket when you self-host.

Beyond cost savings, self-hosting gives you:

  • Full data ownership — your customer database, order history, and analytics belong to you
  • Unlimited customization — no platform restrictions on themes, checkout flows, or product types
  • No vendor lock-in — you can migrate servers, change hosting providers, or modify the source code
  • Transparent pricing — the software is free; you only pay for hosting, domain, and optional extensions
  • Compliance control — you decide how to handle GDPR, PCI DSS, and data retention policies

For sellers who value independence and are comfortable managing their own infrastructure, self-hosted e-commerce is the clear choice.

Platform Overview

WooCommerce

WooCommerce is the most popular e-commerce platform on the web, powering over 28% of all online stores. Built as a WordPress plugin, it leverages the world’s most widely-used content management system. With 10,272 GitHub stars and active development from Automattic, it has the largest ecosystem of themes, plugins, and community support of any platform on this list.

WooCommerce is ideal if you already run a WordPress site and want to add a store, or if you need deep content-commerce integration (blogs, portfolios, membership sites alongside products).

PrestaShop

PrestaShop is a standalone e-commerce platform with 9,049 GitHub stars. It offers a richer out-of-the-box feature set than WooCommerce — including multi-store support, advanced product combinations, and built-in SEO tools — without requiring a CMS foundation. The platform ships in 75+ languages and has over 6,000 modules in its official marketplace.

PrestaShop’s recent 9.x release brought modernized architecture, improved performance, and Symfony-based components, making it a solid choice for medium to large stores.

OpenCart

OpenCart is the lightweight alternative with 8,104 GitHub stars. Its philosophy is simplicity: a clean MVC architecture, intuitive admin panel, and minimal resource requirements. OpenCart can run on very modest hardware (512MB RAM is enough for small stores) and has a straightforward extension system.

OpenCart works best for small to medium stores that need a functional shop without complexity — think niche product catalogs, single-merchant operations, or stores where the owner wants a straightforward admin experience.

Feature Comparison

FeatureWooCommercePrestaShopOpenCart
TypeWordPress pluginStandalone platformStandalone platform
LanguagePHPPHP (Symfony components)PHP (MVC)
DatabaseMySQL / MariaDBMySQL / MariaDBMySQL / MariaDB
GitHub Stars10,2729,0498,104
Latest Version9.x+9.x4.x
Multi-StoreVia pluginBuilt-inBuilt-in
Product VariationsUnlimitedUnlimited with combinationsOptions system
Built-in BlogWordPress nativeVia moduleVia extension
SEO ToolsVia plugins (Yoast, Rank Math)Built-in (URL rewriting, meta tags)Built-in (SEO URLs, meta tags)
Payment Gateways100+ plugins50+ modules20+ extensions
Shipping OptionsExtensive via pluginsBuilt-in carrier rulesExtension-based
ThemesThousands (WordPress ecosystem)3,000+ in marketplace2,000+ in marketplace
Mobile AdminWordPress appBuilt-in mobile-responsive adminResponsive admin
Resource RequirementsModerate (WordPress overhead)Moderate to highLow
Learning CurveLow (if familiar with WordPress)ModerateLow
LicenseGPL-3.0OSL-3.0GPL-3.0

Deployment with Docker

All three platforms can be deployed using Docker Compose. Below are production-ready configurations for each.

WooCommerce Docker Compose

WooCommerce runs on WordPress, so the deployment includes MySQL and a WordPress container with WooCommerce activated:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
name: woocommerce-store

services:
  db:
    image: mysql:8.4
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-woo_root_pass}
      MYSQL_DATABASE: ${MYSQL_DATABASE:-woocommerce}
      MYSQL_USER: ${MYSQL_USER:-woo_user}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD:-woo_pass}
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - woo-net

  wordpress:
    image: wordpress:latest
    restart: unless-stopped
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: woo_user
      WORDPRESS_DB_PASSWORD: woo_pass
      WORDPRESS_DB_NAME: woocommerce
    volumes:
      - wp-data:/var/www/html
      - ./themes:/var/www/html/wp-content/themes
      - ./plugins:/var/www/html/wp-content/plugins
    depends_on:
      - db
    networks:
      - woo-net

  # Optional: reverse proxy with Let's Encrypt SSL
  # proxy:
  #   image: nginx:alpine
  #   ports:
  #     - "80:80"
  #     - "443:443"
  #   volumes:
  #     - ./nginx.conf:/etc/nginx/nginx.conf
  #     - ./certs:/etc/nginx/certs

volumes:
  db-data:
  wp-data:

networks:
  woo-net:
    driver: bridge

To launch:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
# Clone or copy the compose file
mkdir woocommerce-store && cd woocommerce-store
curl -o docker-compose.yml https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/plugins/woocommerce/readme.txt

# Or use the compose file above
nano docker-compose.yml

# Start the stack
docker compose up -d

# Visit http://localhost:8080 to complete WordPress setup
# Then install WooCommerce from the WordPress plugin directory

PrestaShop Docker Compose

PrestaShip provides an official prestashop/prestashop image on Docker Hub (over 7 million pulls). The development compose file from the official repo uses MySQL 8.4:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
name: prestashop-store

volumes:
  db-data:

services:
  mysql:
    image: mysql:8.4
    ports:
      - "3306:3306"
    volumes:
      - db-data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_PASSWD:-prestashop}
      MYSQL_DATABASE: ${DB_NAME:-prestashop}
    restart: unless-stopped
    networks:
      - ps-net

  prestashop:
    image: prestashop/prestashop:9.1-apache
    hostname: ${PS_HOSTNAME:-localhost}
    environment:
      DB_PASSWD: ${DB_PASSWD:-prestashop}
      DB_NAME: ${DB_NAME:-prestashop}
      DB_SERVER: mysql
      DB_PREFIX: ${DB_PREFIX:-ps_}
      PS_DOMAIN: ${PS_DOMAIN:-localhost:8001}
      PS_LANGUAGE: ${PS_LANGUAGE:-en}
      PS_COUNTRY: ${PS_COUNTRY:-us}
      PS_DEV_MODE: ${PS_DEV_MODE:-0}
      PS_ENABLE_SSL: ${PS_ENABLE_SSL:-1}
      ADMIN_MAIL: ${ADMIN_MAIL:-admin@mystore.com}
      ADMIN_PASSWD: ${ADMIN_PASSWD:-Str0ngP@ss}
    ports:
      - "8001:80"
      - "8002:443"
    depends_on:
      - mysql
    volumes:
      - ps-modules:/var/www/html/modules
      - ps-themes:/var/www/html/themes
      - ps-upload:/var/www/html/img
    restart: unless-stopped
    networks:
      - ps-net

volumes:
  ps-modules:
  ps-themes:
  ps-upload:

networks:
  ps-net:
    driver: bridge
1
2
3
4
docker compose up -d

# Visit http://localhost:8001 — PrestaShop auto-installs on first load
# Admin panel: http://localhost:8001/admin-dev

OpenCart Docker Compose

OpenCart’s official repository includes a multi-service compose file with separate Apache, PHP, and MySQL containers:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
name: opencart-store

services:
  mysql:
    image: mysql:8.4
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-oc_root}
      MYSQL_DATABASE: ${MYSQL_DATABASE:-opencart}
      MYSQL_USER: ${MYSQL_USER:-oc_user}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD:-oc_pass}
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - oc-net

  php:
    build:
      context: .
      dockerfile: docker/php/Dockerfile
      args:
        PHP_VERSION: ${PHP_VERSION:-8.4}
    environment:
      TZ: ${TZ:-UTC}
      OPENCART_USERNAME: ${OPENCART_USERNAME:-admin}
      OPENCART_PASSWORD: ${OPENCART_PASSWORD:-Op3nCart!}
      OPENCART_ADMIN_EMAIL: ${OPENCART_ADMIN_EMAIL:-admin@mystore.com}
      DB_HOST: mysql
      DB_USER: oc_user
      DB_PASSWORD: oc_pass
      DB_NAME: opencart
    volumes:
      - .:/var/www
    networks:
      - oc-net

  apache:
    build:
      context: .
      dockerfile: docker/apache/Dockerfile
    ports:
      - "80:80"
    volumes:
      - .:/var/www
    depends_on:
      php:
        condition: service_healthy
    networks:
      - oc-net

volumes:
  db-data:

networks:
  oc-net:
    driver: bridge
1
2
3
4
5
6
git clone https://github.com/opencart/opencart.git
cd opencart
docker compose up -d

# Visit http://localhost to complete the installation wizard
# Admin panel: http://localhost/admin

Reverse Proxy Setup with Nginx and SSL

For production deployments, you should put each store behind a reverse proxy with TLS termination. Here’s a shared Nginx configuration that routes to all three platforms:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
server {
    listen 80;
    listen 443 ssl http2;

    server_name shop.example.com;

    ssl_certificate /etc/letsencrypt/live/shop.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/shop.example.com/privkey.pem;

    # WooCommerce
    location /woo {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # PrestaShop
    location /ps {
        proxy_pass http://localhost:8001;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # OpenCart
    location /oc {
        proxy_pass http://localhost:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Performance and Resource Requirements

MetricWooCommercePrestaShopOpenCart
Minimum RAM512MB256MB128MB
Recommended RAM2GB1GB512MB
Minimum PHP7.48.18.1
Disk Space (base)200MB300MB50MB
Page Load (empty)0.8-1.5s0.5-1.0s0.3-0.6s
Admin ResponsivenessModerate (WP admin overhead)GoodFast

WooCommerce carries WordPress overhead, making it the most resource-intensive. PrestaShop sits in the middle with modern Symfony components. OpenCart is the lightest, making it suitable for low-cost VPS hosting ($5/month plans).

Extensibility and Ecosystem

WooCommerce

WooCommerce benefits from the massive WordPress plugin ecosystem — over 60,000 free plugins on the WordPress repository alone. Key e-commerce extensions include:

  • Payments: Stripe, PayPal, Square, Amazon Pay
  • Shipping: FedEx, UPS, DHL, USPS real-time rates
  • Subscriptions: WooCommerce Subscriptions for recurring billing
  • Memberships: Content gating and member-only products
  • Bookings: Appointment and reservation scheduling

PrestaShop

PrestaShop’s marketplace offers 6,000+ modules and 3,000+ themes. Notable categories:

  • Marketplace: Multi-vendor marketplace modules (similar to Amazon)
  • Advanced Stock Management: Warehouse management and inventory forecasting
  • ERP Connectors: SAP, Odoo, and custom ERP integrations
  • Advanced Search: Elasticsearch and Algolia integration
  • Multi-Store: Manage multiple stores from one admin panel natively

OpenCart

OpenCart’s extension marketplace has 13,000+ modules and 4,000+ themes. Its extension system is simpler than the others but covers the essentials:

  • Payment: PayPal, Stripe, Authorize.net, 2Checkout
  • Shipping: Royal Mail, FedEx, UPS, flat rate calculators
  • Reporting: Sales analytics, customer behavior tracking
  • Marketing: Email campaigns, coupon management, affiliate programs

Which Platform Should You Choose?

Choose WooCommerce if:

  • You already run a WordPress site
  • You need deep content-commerce integration (blog + store)
  • You want the largest plugin/theme ecosystem
  • You have a development team familiar with WordPress

Choose PrestaShop if:

  • You need a dedicated, standalone e-commerce platform
  • Multi-store management is a requirement
  • You want built-in SEO tools and advanced product combinations
  • You need enterprise-level features without WordPress overhead

Choose OpenCart if:

  • You want the simplest, most lightweight solution
  • You’re running on limited server resources
  • You prefer a clean, straightforward admin interface
  • You need a store up and running quickly with minimal configuration

FAQ

Is WooCommerce free to use?

Yes, WooCommerce is completely free and open-source under the GPL-3.0 license. You only pay for hosting, a domain name, and any premium extensions you choose to purchase. The core plugin includes everything needed to run a basic store.

Can I migrate from Shopify to a self-hosted platform?

Yes. All three platforms offer migration tools or plugins that can import products, customers, and orders from Shopify. PrestaShop has a dedicated Shopify migration module, WooCommerce has several free migration plugins in the WordPress repository, and OpenCart supports CSV import for bulk product transfers.

Which platform handles the most products?

WooCommerce can handle unlimited products, but performance degrades past 100,000 products without server optimization. PrestaShop is optimized for catalogs up to 500,000 products with proper server configuration. OpenCart handles up to 100,000 products well, making it suitable for most small to medium stores.

Do I need technical knowledge to set up these platforms?

OpenCart has the lowest barrier to entry — its installation wizard takes 5 minutes and requires no command-line knowledge. PrestaShop is similarly straightforward with its auto-install mode. WooCommerce requires setting up WordPress first, which adds a step but is still beginner-friendly with one-click installers from most hosting providers.

Can I run multiple stores on one server?

PrestaShop has built-in multi-store support — you can manage multiple storefronts from a single admin panel. WooCommerce can run multiple stores using WordPress Multisite. OpenCart supports multi-store natively through its admin settings, allowing you to manage different storefronts with separate themes and product catalogs from one installation.

How do I handle payment processing securely?

All three platforms support major payment gateways (Stripe, PayPal) that handle PCI DSS compliance on their end. For self-hosted setups, always use HTTPS (via Let’s Encrypt or similar) and never store raw credit card data on your server. Consider using our self-hosted payment gateway guide for advanced payment infrastructure options.

Which platform has the best SEO capabilities?

PrestaShop includes built-in SEO features: URL rewriting, meta tag management, sitemap generation, and canonical URLs. WooCommerce relies on plugins like Yoast SEO or Rank Math, which are more powerful but require additional setup. OpenCart has built-in SEO URL rewriting and meta tag support. For a complete SEO setup, also check out our API lifecycle management guide if you plan to expose product data via APIs.