Skip to main contentSkip to navigation
[email protected]
Client AreaSupport
Hosting Mammoth
HostingMammothYour Data, Our Responsibility
Home
Solutions
Hosting Services
Store
Pricing
About
Blog
API
Contact

Stay Ahead of the Curve

Get the latest insights on cybersecurity, AI innovations, and enterprise data solutions delivered to your inbox.

Hosting Mammoth
HostingMammothEnterprise Solutions

Enterprise-grade data solutions. Hosting, recovery, cybersecurity, and AI-powered services for businesses worldwide.

[email protected]
Sun - Fri, 9:00am - 5:00pm

Services

  • Cloud Hosting
  • Data Recovery
  • Cybersecurity
  • Legal Support
  • MSP Services
  • Web Development
  • AI Services
  • Free Server Migration

Hosting

  • VPS Hosting (NVMe SSD)
  • VDS Hosting (NVMe)
  • Storage VPS (High SSD)
  • GPU Servers
  • Managed Services
  • Cloud Firewall
  • Load Balancer
  • One-Click Apps
  • n8n Hosting
  • Object Storage
  • FAQ

Company

  • Store
  • Pricing
  • About Us
  • Locations
  • Blog
  • Testimonials
  • Contact
  • Affiliate Program
  • White-Label
  • Terms of Service
  • Privacy Policy
  • Browser Cookies
  • SLA

Support

  • Client Area
  • Submit Ticket
  • Knowledge Base
  • Server Status
  • API Documentation

© 2026 Hosting Mammoth. All rights reserved.

Knowledge Base
Getting StartedAccount ManagementVPS HostingGPU ServersStorage VPSCloud FirewallLoad BalancerServer ManagementBilling & PaymentsSupport & TicketsAffiliate ProgramReseller ProgramMarketplace & Appsn8n HostingManaged ServicesServer MigrationAPI & DevelopersSecurityTroubleshootingGlossaryInstall Guides
  1. Home
  2. /
  3. Support
  4. /
  5. Install Guides
  6. /
  7. How To Install Prestashop Ubuntu
GUIDEInstall Guides

How to Install PrestaShop on Ubuntu 24.04 VPS: Self-Hosted Open-Source Ecommerce

26 min read

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?
  • Why Self-Host PrestaShop on Your VPS?
  • System Requirements
  • Prerequisites
  • Step 1: Update System Packages
  • Step 2: Install Nginx, PHP 8.2, and Required Extensions
  • Step 3: Install and Secure MariaDB
  • Step 4: Create the PrestaShop Database and User
  • Step 5: Download and Extract PrestaShop
  • Step 6: Configure the Nginx Server Block
  • Step 7: Issue a Let's Encrypt TLS Certificate
  • Step 8: Run the PrestaShop Web Installer
  • Step 9: Harden the Back Office
  • Step 10: Install Redis for Performance Caching
  • Step 11: Configure Friendly URLs and SEO Basics
  • Step 12: Install Payment Modules (Stripe, PayPal)
  • Step 13: Set Up Backups and Updates
  • Troubleshooting
  • FAQ
  • Next Steps
  • 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

    ScenarioShopify (Advanced)BigCommerce ProSelf-Hosted PrestaShop (VPS)
    Monthly platform fee$399/mo$399/moEUR 19.99/mo
    Transaction fee (non-native gateway)0.5%0% (rev-based tier)0%
    Staff accounts15 includedUnlimitedUnlimited
    Storefronts included1 (Plus for more)1Unlimited (native multi-store)
    Custom module/theme developmentLimited (Shopify apps)LimitedFull source access
    Typical cost at EUR 100K/mo revenue$899+$399+EUR 19.99 (flat)
    For any store doing more than a few thousand euros per month, self-hosting pays for itself in the first quarter.

    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:

    bash
    ssh root@your-server-ip

    Step 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.

    bash
    sudo apt update && sudo apt upgrade -y

    If your kernel was updated, reboot before continuing:

    bash
    sudo reboot

    Then reconnect via SSH after a minute.

    Install a few utilities we will need throughout the guide:

    bash
    sudo apt install -y curl wget unzip software-properties-common gnupg2 ca-certificates lsb-release

    Step 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:

    bash
    sudo add-apt-repository -y ppa:ondrej/php
    sudo apt update

    Install Nginx, PHP 8.2-FPM, and every extension PrestaShop requires:

    bash
    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-bz2

    Note: 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:

    bash
    sudo nano /etc/php/8.2/fpm/php.ini

    Adjust these values (use Ctrl+W to search in nano):

    text
    memory_limit = 512M
    upload_max_filesize = 64M
    post_max_size = 64M
    max_execution_time = 300
    max_input_vars = 10000
    date.timezone = Europe/Paris

    PrestaShop'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:

    bash
    sudo systemctl restart php8.2-fpm
    sudo systemctl enable nginx php8.2-fpm
    sudo systemctl start nginx

    Verify both services are running:

    bash
    sudo systemctl status nginx php8.2-fpm --no-pager

    If 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:

    bash
    sudo apt install -y mariadb-server mariadb-client

    Start and enable the service:

    bash
    sudo systemctl enable --now mariadb

    Run the security hardening script:

    bash
    sudo mysql_secure_installation

    Answer 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
    For detailed MariaDB tuning (innodb_buffer_pool_size, query cache, connection limits), see our MariaDB installation and tuning guide.

    Step 4: Create the PrestaShop Database and User

    Log into MariaDB as root:

    bash
    sudo mysql -u root -p

    Create the database and a dedicated user. Replace STRONG_PASSWORD_HERE with a secure password (use openssl rand -base64 24 to generate one):

    sql
    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.

    bash
    cd /tmp
    wget https://github.com/PrestaShop/PrestaShop/releases/download/8.2.0/prestashop_8.2.0.zip

    Create the web root and extract:

    bash
    sudo mkdir -p /var/www/prestashop
    sudo unzip -q prestashop_8.2.0.zip -d /tmp/prestashop-extract

    The PrestaShop zip actually contains another zip (prestashop.zip) plus Install_PrestaShop.html. Extract the inner zip to the web root:

    bash
    sudo unzip -q /tmp/prestashop-extract/prestashop.zip -d /var/www/prestashop

    Set ownership to the Nginx/PHP user:

    bash
    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:

    bash
    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:

    bash
    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 nginx

    The 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:

    bash
    sudo apt install -y certbot python3-certbot-nginx

    Request a certificate (make sure your domain's A record points to the VPS first):

    bash
    sudo certbot --nginx -d shop.example.com

    Certbot 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:

    bash
    sudo certbot renew --dry-run

    The 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)
    Step 5 -- Store content: Choose whether to install the demo products and sample categories. For a production store, uncheck demo products. For a test install to explore the back office, leave them on -- they are easy to delete later in bulk.

    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)
    Click Test your database connection now -- it should return green -- then Next.

    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):

    bash
    sudo rm -rf /var/www/prestashop/install

    Now 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:

    bash
    cd /var/www/prestashop
    sudo mv admin1a2b3c4d admin-secret-name
    sudo chown -R www-data:www-data admin-secret-name

    Then 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.

  • Log into the back office
  • Go to Configure -> Advanced Parameters -> Team
  • Edit each employee -> 2FA Method -> Select Google Authenticator
  • Scan the QR code with Google Authenticator, Authy, or 1Password
  • Enter the generated code to confirm
  • 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:

    nginx
    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:

    bash
    sudo apt install -y redis-server
    sudo systemctl enable --now redis-server

    Verify it's running:

    bash
    redis-cli ping

    Expected output: PONG

    Enable Redis as the PrestaShop cache backend:

  • Log into the back office
  • Go to Advanced Parameters -> Performance
  • Scroll to Caching section
  • Set Use cache: Yes
  • Set Caching system: CacheRedis
  • Click Add server and enter:
  • - IP Address / Hostname: 127.0.0.1 - Port: 6379 - Weight: 1
  • Click Save
  • 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
    In the CCC (Combine, Compress and Cache) section, enable:
    • Smart cache for CSS: Yes, use CCC for CSS
    • Smart cache for JavaScript: Yes, use CCC for JavaScript
    • Apache optimization: No (we use Nginx)
    These optimizations typically cut first-byte time from 800ms to under 200ms on a CloudCore Professional VPS.

    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.

  • Go to Shop Parameters -> Traffic -> SEO & URLs
  • Scroll to Set up URLs
  • Set Friendly URL: Yes
  • Set Accented URL: Yes (allows characters like é, à, ñ in slugs)
  • Click Save
  • 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.txt with 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:

  • Go to Modules -> Module Manager -> Marketplace
  • Search for Stripe Official
  • Click Install
  • Configure with your Stripe API keys from the Stripe Dashboard:
  • - Publishable key - Secret key - Webhook signing secret (create the webhook at https://shop.example.com/module/stripe_official/webhook in the Stripe dashboard)
  • Enable payment methods: Cards, Apple Pay, Google Pay, SEPA, iDEAL (EU), Klarna, etc.
  • PayPal:

  • Modules -> Module Manager -> Marketplace
  • Search PayPal Official
  • Install and configure with PayPal merchant credentials
  • Enable Smart Payment Buttons (the modern embedded checkout)
  • 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:

    bash
    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.sh

    Add the cron job:

    bash
    sudo crontab -e

    Append:

    text
    0 3   * /usr/local/bin/backup-prestashop.sh

    File 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:

  • Backs up the database and files automatically
  • Downloads the target version
  • Runs the migration scripts
  • Preserves your custom theme and modules
  • Offers a rollback if the upgrade fails
  • Always test updates on a staging clone first. Never run 1-Click Upgrade on a live store during business hours.

    Troubleshooting

    ProblemCauseSolution
    White page / blank screen on storefrontPHP error suppressedEnable 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-datasudo 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 HTTPSAbsolute URLs stored as http:// in DBIn 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 URLsNginx try_files directive missingVerify 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 moduleModule incompatible with PHP 8.2 or PrestaShop versionRename 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 loginCookie IP check too strict behind proxy/CDNAdvanced 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 importPHP memory limit too lowBump 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 combinationsPHP default of 1000 too lowSet max_input_vars = 10000 in both FPM and CLI php.ini, restart PHP-FPM.
    Product images not displaying after a theme switchImage regen cache staleDesign -> Image Settings -> Regenerate thumbnails at the bottom of the page. Large catalogs may take 10+ minutes.

    Viewing Logs

    PrestaShop application logs:

    bash
    sudo tail -f /var/www/prestashop/var/logs/prod.log

    Nginx access and error logs:

    bash
    sudo tail -f /var/log/nginx/error.log
    sudo tail -f /var/log/nginx/access.log

    PHP-FPM logs:

    bash
    sudo tail -f /var/log/php8.2-fpm.log

    FAQ

    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.

    Was this article helpful?

    ← Back to Install GuidesBrowse all categories →

    Still have questions?

    Contact Support →Submit a Ticket