How to Install PrestaShop on Ubuntu 24.04 VPS: Self-Hosted Open-Source Ecommerce
PrestaShop is one of the most mature open-source ecommerce platforms in the world, powering over 300,000 active online stores across 75+ languages. Unlike hosted SaaS platforms that charge monthly fees and take transaction percentages, PrestaShop lets you own your storefront end to end -- your data, your database, your customizations, your margins. This guide walks you through installing PrestaShop 8 on an Ubuntu 24.04 VPS with a production-grade LEMP stack, MariaDB, Redis caching, and Let's Encrypt TLS, from the first SSH connection to a hardened back-office ready to take orders.
Want to skip the manual setup? Our CloudCore Professional plan is sized perfectly for PrestaShop stores with headroom for catalogs of 10,000+ SKUs. Launch a PrestaShop-ready VPS now and follow along in your own environment.
Table of Contents
What is PrestaShop?
PrestaShop is a free, open-source ecommerce platform written in PHP and built on the Symfony framework. First released in 2007, it has grown into a complete commerce engine with native support for multi-store management (run several branded storefronts from a single back office and database), multi-language and multi-currency operations out of the box (no paid plugin required), and a catalog of over 5,000 modules and 3,500 themes in the official Addons marketplace.
Where Shopify and BigCommerce lock you into a monthly subscription plus a cut of every sale, PrestaShop charges nothing. You install it on your own server, connect your payment gateways directly, and keep 100% of the revenue. The core ships with the features most merchants need on day one: product variants, combinations, and bundles; categories and brand management; tax rules and zones for international selling; customer accounts and order history; promotional rules, vouchers, and cart rules; abandoned cart recovery; a built-in CMS for pages and blog posts; and a full REST API (Webservice) for headless storefronts or ERP integration.
PrestaShop is used by merchants of every size, from artisan single-product stores to catalogs with tens of thousands of SKUs. Typical deployments include fashion boutiques using the native size/color combination system, B2B wholesalers leveraging customer groups and price tiers, multi-brand retailers running 5-10 storefronts on one back office, and dropshippers pairing PrestaShop with modules like AliExpress DS or Spocket.
Why Self-Host PrestaShop on Your VPS?
Running PrestaShop on your own VPS instead of signing up for hosted Shopify or WooCommerce cloud offers concrete advantages:
- Zero transaction fees -- Shopify charges 0.5%-2% per transaction on top of your plan unless you use Shopify Payments. PrestaShop takes nothing. A store doing EUR 50,000/month in sales saves EUR 250-1,000/month on fees alone.
- Flat, predictable hosting cost -- A VPS costs the same whether you process 100 orders or 10,000. No tier upgrades, no bandwidth overages, no per-staff-seat charges.
- Complete data ownership -- Your customer emails, order history, product data, and analytics live in your database on your server. You can export, migrate, or delete at any time without vendor approval.
- Unlimited customization -- Full source code access means you can modify any controller, override any template, hook into any event, and add custom modules. No "platform limitations" when your business grows.
- Native multi-store -- Run multiple branded storefronts (different domains, themes, languages, currencies) from one installation. Each store shares the same product catalog or has its own -- you choose per attribute.
- GDPR compliance built in -- PrestaShop's Official GDPR module covers data export, right-to-be-forgotten, and consent logging. Combined with EU-hosted infrastructure, this simplifies compliance for European merchants.
- Headless and API-first ready -- The Webservice API exposes every entity (products, orders, customers, stock) as REST endpoints. Build a Next.js, Nuxt, or React Native frontend while keeping PrestaShop as the commerce backbone.
Cost Comparison: Self-Hosted PrestaShop vs. Hosted Platforms
| Scenario | Shopify (Advanced) | BigCommerce Pro | Self-Hosted PrestaShop (VPS) |
|---|---|---|---|
| Monthly platform fee | $399/mo | $399/mo | EUR 19.99/mo |
| Transaction fee (non-native gateway) | 0.5% | 0% (rev-based tier) | 0% |
| Staff accounts | 15 included | Unlimited | Unlimited |
| Storefronts included | 1 (Plus for more) | 1 | Unlimited (native multi-store) |
| Custom module/theme development | Limited (Shopify apps) | Limited | Full source access |
| Typical cost at EUR 100K/mo revenue | $899+ | $399+ | EUR 19.99 (flat) |
System Requirements
PrestaShop 8.x has the following minimum requirements on Ubuntu 24.04:
- PHP 8.1 or 8.2 (PHP 8.3 has partial support; stick to 8.2 for maximum module compatibility)
- Required PHP extensions:
curl,dom,fileinfo,gd,intl,json,mbstring,mysqli,openssl,pdo_mysql,simplexml,zip - Recommended PHP extensions:
opcache,apcu,redis,imagick,bz2 - Web server: Nginx (recommended) or Apache 2.4+
- Database: MySQL 5.6+ or MariaDB 10.3+ (MariaDB 10.11 LTS recommended on Ubuntu 24.04)
- Disk space: 2 GB minimum for the install; plan 10 GB+ for a production catalog with product images
- RAM: 2 GB minimum, 4 GB+ recommended for comfortable back-office use
Prerequisites
Before you begin, make sure you have:
- A VPS running Ubuntu 24.04 LTS with root or sudo access
- SSH access to your server (PuTTY on Windows, or the built-in terminal on macOS/Linux)
- A registered domain name with an A record pointing to your VPS public IP (for TLS certificates)
- At least 2 GB of RAM (4 GB+ for production stores)
- At least 20 GB of free disk space for Ubuntu, the LEMP stack, PrestaShop, and your product images
Recommended Plan: CloudCore Professional>
For a production PrestaShop store with a catalog of up to 10,000 SKUs and reasonable traffic, we recommend the CloudCore Professional plan:>
- 6 vCPU cores
- 12 GB RAM
- 100 GB NVMe SSD
- Unmetered bandwidth
- EUR 19.99/month>
This leaves headroom for MariaDB's buffer pool, PHP-FPM workers, Redis, and the back office running several admin sessions in parallel. Smaller stores (under 500 SKUs, light traffic) run comfortably on a 2 vCPU / 4 GB plan.
Connect to your server via SSH to get started:
ssh root@your-server-ipStep 1: Update System Packages
Start by updating your package index and upgrading installed packages. This ensures you have the latest security patches and that dependency resolution works correctly during the LEMP stack install.
sudo apt update && sudo apt upgrade -yIf your kernel was updated, reboot before continuing:
sudo rebootThen reconnect via SSH after a minute.
Install a few utilities we will need throughout the guide:
sudo apt install -y curl wget unzip software-properties-common gnupg2 ca-certificates lsb-releaseStep 2: Install Nginx, PHP 8.2, and Required Extensions
PrestaShop 8 runs best on Nginx with PHP-FPM. Ubuntu 24.04 ships with PHP 8.3 by default, but we'll pin to PHP 8.2 for maximum module compatibility (many third-party PrestaShop modules are not yet tested on 8.3).
Add the Ondrej PHP PPA, which provides all supported PHP versions:
sudo add-apt-repository -y ppa:ondrej/php
sudo apt updateInstall Nginx, PHP 8.2-FPM, and every extension PrestaShop requires:
sudo apt install -y nginx \
php8.2-fpm php8.2-cli php8.2-common \
php8.2-curl php8.2-dom php8.2-fileinfo php8.2-gd \
php8.2-intl php8.2-mbstring php8.2-mysql \
php8.2-xml php8.2-zip php8.2-bcmath \
php8.2-opcache php8.2-apcu php8.2-redis \
php8.2-imagick php8.2-bz2Note: php8.2-mysql provides both mysqli and pdo_mysql. php8.2-xml provides both dom and simplexml. openssl and json are built into PHP 8.2 core.
Tune PHP-FPM for ecommerce workloads by editing the PHP ini file:
sudo nano /etc/php/8.2/fpm/php.iniAdjust these values (use Ctrl+W to search in nano):
memory_limit = 512M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
max_input_vars = 10000
date.timezone = Europe/ParisPrestaShop's back office occasionally needs to upload large CSVs (catalog imports) or theme zip files -- 64 MB upload size covers almost every case. The 10,000 max_input_vars is required when saving products with many attributes or combinations.
Restart PHP-FPM and enable Nginx to start on boot:
sudo systemctl restart php8.2-fpm
sudo systemctl enable nginx php8.2-fpm
sudo systemctl start nginxVerify both services are running:
sudo systemctl status nginx php8.2-fpm --no-pagerIf you are new to the LEMP stack, our complete LEMP stack guide covers the architecture in depth.
Step 3: Install and Secure MariaDB
PrestaShop works with MySQL 5.6+ but MariaDB 10.11 LTS is faster, fully compatible, and the default in Ubuntu 24.04 repositories.
Install MariaDB:
sudo apt install -y mariadb-server mariadb-clientStart and enable the service:
sudo systemctl enable --now mariadbRun the security hardening script:
sudo mysql_secure_installationAnswer the prompts as follows:
- Enter current password for root: Press Enter (no password set yet)
- Switch to unix_socket authentication:
n - Change the root password:
Y, then set a strong password - Remove anonymous users:
Y - Disallow root login remotely:
Y - Remove test database:
Y - Reload privilege tables:
Y
Step 4: Create the PrestaShop Database and User
Log into MariaDB as root:
sudo mysql -u root -pCreate the database and a dedicated user. Replace STRONG_PASSWORD_HERE with a secure password (use openssl rand -base64 24 to generate one):
CREATE DATABASE prestashop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'psuser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD_HERE';
GRANT ALL PRIVILEGES ON prestashop.* TO 'psuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;The utf8mb4 character set is required for full Unicode support, including emoji in product descriptions and customer messages.
Step 5: Download and Extract PrestaShop
Download the latest PrestaShop 8 release from the official GitHub releases page. At the time of writing, that is 8.2.x -- always check github.com/PrestaShop/PrestaShop/releases for the current version.
cd /tmp
wget https://github.com/PrestaShop/PrestaShop/releases/download/8.2.0/prestashop_8.2.0.zipCreate the web root and extract:
sudo mkdir -p /var/www/prestashop
sudo unzip -q prestashop_8.2.0.zip -d /tmp/prestashop-extractThe PrestaShop zip actually contains another zip (prestashop.zip) plus Install_PrestaShop.html. Extract the inner zip to the web root:
sudo unzip -q /tmp/prestashop-extract/prestashop.zip -d /var/www/prestashopSet ownership to the Nginx/PHP user:
sudo chown -R www-data:www-data /var/www/prestashop
sudo find /var/www/prestashop -type d -exec chmod 755 {} \;
sudo find /var/www/prestashop -type f -exec chmod 644 {} \;These permissions (755 for directories, 644 for files, owned by www-data) are the PrestaShop-recommended defaults. The installer and back office need write access to several directories, which is covered by group ownership.
Step 6: Configure the Nginx Server Block
Create the Nginx configuration for your store. Replace shop.example.com with your actual domain:
sudo tee /etc/nginx/sites-available/prestashop > /dev/null <<'EOF' server { listen 80; listen [::]:80; server_name shop.example.com; root /var/www/prestashop; index index.php index.html;client_max_body_size 64M;
# Gzip compression gzip on; gzip_comp_level 5; gzip_min_length 256; gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;
# Friendly URLs (Symfony/PrestaShop 8 router) location / { try_files $uri $uri/ /index.php$is_args$args; }
# Image regeneration support rewrite ^/api/?(.*)$ /webservice/dispatcher.php?url=$1 last; rewrite ^/([0-9])(\-[_a-zA-Z0-9-]*)?/.+\.jpg$ /img/p/$1/$1$2.jpg last; rewrite ^/([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/.+\.jpg$ /img/p/$1/$2/$1$2$3.jpg last; rewrite ^/([0-9])([0-9])([0-9])(\-[_a-zA-Z0-9-]*)?/.+\.jpg$ /img/p/$1/$2/$3/$1$2$3$4.jpg last;
# Block sensitive directories location ~ /\. { deny all; } location /install/ { deny all; } location /app/ { deny all; } location /bin/ { deny all; } location /cache/ { deny all; } location /classes/ { deny all; } location /config/ { deny all; } location /controllers/ { deny all; } location /src/ { deny all; } location /tests/ { deny all; } location /tools/ { deny all; } location /translations/ { deny all; } location /travis-scripts/ { deny all; } location /vendor/ { deny all; } location /var/ { deny all; }
# PHP-FPM location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_read_timeout 300; include fastcgi_params; }
# Static asset caching location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2|ttf|svg)$ { expires 1y; add_header Cache-Control "public, immutable"; access_log off; } } EOF
Enable the site and remove the default:
sudo ln -s /etc/nginx/sites-available/prestashop /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginxThe try_files $uri $uri/ /index.php$is_args$args; directive is critical -- it enables PrestaShop's friendly URLs (e.g. /category/product.html instead of /index.php?controller=product&id_product=42). Without it, enabling friendly URLs in the back office will produce 404s everywhere.
For a deeper dive into Nginx virtual host configuration, see our Nginx server block guide.
Step 7: Issue a Let's Encrypt TLS Certificate
PrestaShop must be served over HTTPS -- payment providers like Stripe and PayPal require it, and search engines penalize HTTP stores. Let's Encrypt provides free 90-day certificates with auto-renewal.
Install Certbot and the Nginx plugin:
sudo apt install -y certbot python3-certbot-nginxRequest a certificate (make sure your domain's A record points to the VPS first):
sudo certbot --nginx -d shop.example.comCertbot will prompt for an email, accept the terms, and offer to redirect HTTP to HTTPS -- choose Redirect (option 2). It automatically edits your Nginx config to add the SSL block and HTTP-to-HTTPS redirect.
Verify auto-renewal works:
sudo certbot renew --dry-runThe renewal cron job is installed at /etc/cron.d/certbot and runs twice daily. For more detail, see our Let's Encrypt setup guide.
Step 8: Run the PrestaShop Web Installer
Open your browser and navigate to https://shop.example.com/install/. The installer launches a clean five-step wizard.
Step 1 -- Choose language: Select your back-office language. This is independent of your storefront languages, which you configure later.
Step 2 -- License agreements: Accept the OSL 3.0 (core) and AFL 3.0 (modules) licenses.
Step 3 -- System compatibility: The installer runs a full environment check -- PHP version, extensions, directory permissions, max_input_vars, GD library, and disk space. Every row should be green. If any fail, resolve them before continuing (install missing extensions, fix permissions, bump max_input_vars).
Step 4 -- Store information:
- Shop name: Your brand name (shown on invoices and the storefront)
- Main activity: Closest match to your vertical (fashion, electronics, food, etc.)
- Country: Drives default tax zones and currency
- Account info: Create the super-admin user -- use a strong password and a real email address (password resets go there)
Database configuration:
- Database server:
localhost - Database name:
prestashop - Database login:
psuser - Database password: The strong password you set in Step 4
- Tables prefix:
ps_(keep default unless you plan to share a DB, which is not recommended)
The installer takes 30-60 seconds to create ~350 tables, seed default data (currencies, countries, languages, tax rules, carriers), and generate the admin directory with a random name like admin1a2b3c4d/.
Write down the admin directory name shown on the final screen -- you will need it to log in.
Once the installer completes, delete the /install directory (PrestaShop refuses to run until this is done):
sudo rm -rf /var/www/prestashop/installNow visit your storefront at https://shop.example.com to confirm it loads, and log in to the back office at https://shop.example.com/admin1a2b3c4d/ (substitute your actual admin directory name).
Step 9: Harden the Back Office
The PrestaShop back office is a prime target for credential-stuffing and brute-force attacks. Out of the box, the random admin directory name is a helpful first layer, but several additional hardening steps are essential.
Rename the admin directory (optional but recommended). The installer-generated name is random, but if you want something memorable that only your team knows:
cd /var/www/prestashop
sudo mv admin1a2b3c4d admin-secret-name
sudo chown -R www-data:www-data admin-secret-nameThen access the back office at /admin-secret-name/. Never use predictable names like admin, backoffice, or manage.
Enable 2FA for every admin user. PrestaShop 8 includes built-in TOTP two-factor authentication.
From the next login onward, the employee will need both password and TOTP code.
Restrict back-office access by IP (optional). If your team has static IPs, add an Nginx rule:
location ^~ /admin-secret-name/ {
allow 203.0.113.50;
allow 198.51.100.0/24;
deny all;
try_files $uri $uri/ /index.php$is_args$args;
}Enable the PrestaShop Security module. Navigate to Modules -> Module Manager, search for "Security," and enable the official module. It adds login attempt throttling, password strength enforcement, and suspicious activity logging.
Set secure cookies. Go to Configure -> Advanced Parameters -> Administration and enable:
- Enable SSL: Yes
- Enable SSL on all pages: Yes
- Check the IP address on the cookie: Yes
- Lifetime of back-office cookies: 240 minutes (4 hours)
Step 10: Install Redis for Performance Caching
PrestaShop's default filesystem cache works but is slow on disk-bound VPS. Redis provides 10-50x faster cache operations and reduces database load dramatically under traffic.
Install Redis:
sudo apt install -y redis-server
sudo systemctl enable --now redis-serverVerify it's running:
redis-cli pingExpected output: PONG
Enable Redis as the PrestaShop cache backend:
CacheRedis127.0.0.1
- Port: 6379
- Weight: 1
Also enable on the same page:
- Smarty cache: Yes
- Recompile templates if the files have been updated: Never recompile template files
- Cache type: File System (Smarty's own cache is still filesystem-based; Redis caches PrestaShop objects)
- Clear cache: Never clear cache files
- Smart cache for CSS: Yes, use CCC for CSS
- Smart cache for JavaScript: Yes, use CCC for JavaScript
- Apache optimization: No (we use Nginx)
Step 11: Configure Friendly URLs and SEO Basics
Friendly URLs transform /index.php?id_product=42 into /men/t-shirts/42-classic-tee.html -- critical for SEO and user experience.
PrestaShop will attempt to write .htaccess, but since we use Nginx, the try_files directive in Step 6 handles rewriting. Confirm by visiting a product page -- the URL should end in .html with no index.php.
Additional SEO basics to configure now:
- Shop Parameters -> Traffic -> SEO & URLs -> Meta tags: Set the home page meta title, description, and keywords
- Shop Parameters -> Traffic -> SEO & URLs -> Robots file generation: Click Generate robots.txt file to create
/robots.txtwith sane defaults (disallow/admin-*,/cache/,/install/, etc.) - Shop Parameters -> Traffic -> SEO & URLs -> Canonical URL: Set to Redirect to the canonical URL (301) to avoid duplicate content
- Modules -> Module Manager: Install and configure the official Google Sitemap module. Configure it to include products, categories, CMS pages, and manufacturers; schedule a weekly regeneration cron.
Step 12: Install Payment Modules (Stripe, PayPal)
PrestaShop ships with Wire transfer and Cash on delivery enabled -- useful for B2B but insufficient for consumer ecommerce. The two most commonly installed gateways are Stripe (for cards) and PayPal.
Stripe:
https://shop.example.com/module/stripe_official/webhook in the Stripe dashboard)
PayPal:
After installing gateways, go to Shop Parameters -> Payment -> Preferences to restrict which payment methods show per currency, country, and customer group (e.g. only show SEPA to EU customers).
Step 13: Set Up Backups and Updates
Database backups (nightly, retained 14 days):
Create a backup script:
sudo mkdir -p /var/backups/prestashop
sudo tee /usr/local/bin/backup-prestashop.sh > /dev/null <<'EOF'
#!/bin/bash
TIMESTAMP=$(date +%Y-%m-%d_%H-%M-%S)
BACKUP_DIR=/var/backups/prestashop
mysqldump --single-transaction --quick --lock-tables=false \
-u psuser -p'STRONG_PASSWORD_HERE' prestashop \
| gzip > "$BACKUP_DIR/db_$TIMESTAMP.sql.gz"
find "$BACKUP_DIR" -name "db_*.sql.gz" -mtime +14 -delete
EOF
sudo chmod 700 /usr/local/bin/backup-prestashop.shAdd the cron job:
sudo crontab -eAppend:
0 3 * /usr/local/bin/backup-prestashop.shFile backups (weekly). The full /var/www/prestashop directory (which includes product images under /img/p) should also be snapshotted weekly to an offsite location -- our CloudCore VPS plans include weekly automated snapshots, or you can rsync to a backup VPS.
Updating PrestaShop. Use the official 1-Click Upgrade module (pre-installed under Modules). It:
Always test updates on a staging clone first. Never run 1-Click Upgrade on a live store during business hours.
Troubleshooting
| Problem | Cause | Solution |
|---|---|---|
| White page / blank screen on storefront | PHP error suppressed | Enable debug mode: edit /var/www/prestashop/config/defines.inc.php and set define('_PS_MODE_DEV_', true);. Check /var/www/prestashop/var/logs/*.log and sudo tail -f /var/log/nginx/error.log. Revert _PS_MODE_DEV_ to false after fixing. |
Smarty error: unable to write to /var/cache/smarty/ | Cache directory not writable by www-data | sudo chown -R www-data:www-data /var/www/prestashop/var/cache && sudo chmod -R 755 /var/www/prestashop/var/cache |
| SSL mixed content warnings / broken images after enabling HTTPS | Absolute URLs stored as http:// in DB | In back office: Shop Parameters -> General -> Enable SSL: Yes, then Enable SSL on all pages: Yes. Run this SQL: UPDATE ps_configuration SET value='https://shop.example.com' WHERE name IN ('PS_SHOP_DOMAIN_SSL','PS_SHOP_DOMAIN'); |
| 404 on all pages except home after enabling friendly URLs | Nginx try_files directive missing | Verify location / { try_files $uri $uri/ /index.php$is_args$args; } is present in the server block. Reload Nginx: sudo nginx -t && sudo systemctl reload nginx. |
Error 500 after installing a third-party module | Module incompatible with PHP 8.2 or PrestaShop version | Rename the module directory to disable: sudo mv /var/www/prestashop/modules/badmodule /tmp/. Then sudo -u www-data php /var/www/prestashop/bin/console cache:clear. Contact the module vendor for a compatible version. |
| Back office session drops after login | Cookie IP check too strict behind proxy/CDN | Advanced Parameters -> Administration -> Check IP address on cookie: No (only if you're behind a CDN that changes visitor IPs). |
Fatal error: Allowed memory size exhausted during catalog import | PHP memory limit too low | Bump memory_limit = 1024M in /etc/php/8.2/fpm/php.ini and /etc/php/8.2/cli/php.ini, then sudo systemctl restart php8.2-fpm. |
max_input_vars warning when saving a product with many combinations | PHP default of 1000 too low | Set max_input_vars = 10000 in both FPM and CLI php.ini, restart PHP-FPM. |
| Product images not displaying after a theme switch | Image regen cache stale | Design -> Image Settings -> Regenerate thumbnails at the bottom of the page. Large catalogs may take 10+ minutes. |
Viewing Logs
PrestaShop application logs:
sudo tail -f /var/www/prestashop/var/logs/prod.logNginx access and error logs:
sudo tail -f /var/log/nginx/error.log
sudo tail -f /var/log/nginx/access.logPHP-FPM logs:
sudo tail -f /var/log/php8.2-fpm.logFAQ
How many products can PrestaShop handle on a single VPS?
PrestaShop scales comfortably to 50,000-100,000 SKUs on properly tuned hardware. Stores with catalogs under 5,000 SKUs run smoothly on a 2 vCPU / 4 GB plan. Between 5,000 and 50,000 SKUs, the CloudCore Professional (6 vCPU / 12 GB) is the sweet spot -- enough RAM for MariaDB's InnoDB buffer pool to hold the hot index set, and enough CPU for PHP-FPM workers during traffic spikes. Above 100,000 SKUs, consider dedicated MariaDB on a separate VPS with read replicas, and offload product images to an S3-compatible object store with a CDN in front.
Can I run multiple stores on one PrestaShop install?
Yes -- this is one of PrestaShop's flagship features. Under Advanced Parameters -> Multistore you can enable multi-store mode and create additional stores under the same back office. Each store can have its own domain, theme, language set, currency, tax rules, and product visibility. They share customer accounts (optionally), the employee pool, and the underlying database. This is ideal for running multiple brand storefronts (brand1.com, brand2.com) or regional variations (shop.de, shop.fr) from one installation.
Which theme should I choose: Classic or custom?
The default Classic theme is a solid starting point -- responsive, clean, and built on Bootstrap. It's fine for MVPs and merchants who will customize via the theme editor and module positions. For production stores that care about brand identity and conversion rate, invest in either a premium theme from the PrestaShop Addons marketplace (typical cost EUR 60-200, one-time) or a custom theme developed by a PrestaShop agency. Premium themes like Warehouse, Alysum, and Transformer include conversion-optimized templates, rich snippet support, and extensive customization panels out of the box.
How do I migrate an existing store to PrestaShop?
PrestaShop has official migration modules and third-party tools for most platforms. The Store Manager for PrestaShop tool and Cart2Cart service can migrate from Shopify, WooCommerce, Magento, BigCommerce, OpenCart, and WHMCS (for digital goods stores). For WooCommerce specifically, the PrestaShop WooCommerce Migration module on Addons marketplace handles products, categories, customers, orders, and 301 URL redirects. Plan 1-2 weeks for a 5,000-SKU migration including testing, URL mapping, and email template rebuild.
How does PrestaShop compare to WooCommerce and Magento?
PrestaShop sits in the middle -- more powerful than WooCommerce out of the box (native multi-store, multi-currency, combinations system) but lighter and easier to manage than Magento. Best for: independent merchants who want a full ecommerce platform without the operational overhead of Magento.
WooCommerce is a WordPress plugin, so you get WordPress's massive content/SEO ecosystem but ecommerce features are bolted on. Best for: content-driven stores where the blog is central, or merchants already on WordPress.
Magento (Adobe Commerce) is enterprise-grade with the most powerful B2B features (tiered pricing per customer group, quotes, approval workflows) but requires 2-4x the hosting resources and a dedicated Magento developer to manage. Best for: EUR 5M+/year stores with complex B2B requirements.
For the vast majority of independent merchants doing EUR 100K-5M/year, PrestaShop hits the sweet spot.
Do I need a CDN in front of PrestaShop?
Not initially, but you should add one as traffic grows. For stores under 10,000 visits/day, Nginx's static asset caching plus Redis object cache are sufficient. Above that, Cloudflare (free tier works) in front of PrestaShop offloads image/CSS/JS serving, provides DDoS protection, and adds a WAF. For image-heavy stores, pair Cloudflare with a dedicated image CDN (Cloudinary, imgix, or BunnyCDN) pointing at your /img/p/ directory for on-the-fly resize and WebP conversion.
Next Steps
Now that PrestaShop is running on your VPS, here are recommended next steps to build on your setup:
- Configure email delivery with an SMTP relay -- PrestaShop's default PHP
mail()ends up in spam folders. Go to Advanced Parameters -> Email and configure SMTP with a transactional email provider like Amazon SES, Postmark, or Mailgun. Transactional emails (order confirmations, password resets, shipping notifications) then arrive reliably in customer inboxes.
- Install the Official PrestaShop GDPR module -- Free on the Addons marketplace. Adds a customer-facing data export, account deletion request, consent logging, and cookie banner integration. Essential for EU merchants and good practice worldwide.
- Set up abandoned cart recovery -- Install a module like Cart Abandonment Pro or hand-configure the built-in cart rules feature. Automated emails 1 hour, 24 hours, and 72 hours after abandonment typically recover 10-15% of lost revenue.
- Add structured data for rich Google results -- Install a JSON-LD module to emit Product, Offer, Review, and Organization schema. This enables price and review rich snippets in Google search results, which typically lift CTR by 15-30%.
- Connect analytics and tag management -- Add Google Tag Manager, Matomo, or a privacy-friendly alternative like Umami via the official modules. Configure GA4 Enhanced Ecommerce to track add-to-cart, checkout steps, and purchases.
- Build a staging clone -- Snapshot your production VPS and spin up a staging clone on a subdomain. Test updates, theme changes, and new modules there before touching production.
Skip the Manual Install -- Deploy PrestaShop on a CloudCore VPS>
Our CloudCore Professional plan is pre-sized for PrestaShop stores from first-sale to 50,000+ SKUs. Provision in 60 seconds, follow this guide, and have a live storefront by the end of the afternoon.>
- 6 vCPU / 12 GB RAM / 100 GB NVMe SSD
- Unmetered bandwidth for traffic spikes
- Weekly automated snapshots included
- 99.9% uptime SLA
- 24/7 support from engineers who know LEMP and PrestaShop>
Deploy Your PrestaShop VPS Now -- EUR 19.99/month, cancel anytime.