24.06.2025

Как установить PrestaShop в Kubernetes-кластере

PrestaShop — популярная open-source платформа для создания интернет-магазинов, предлагающая гибкость и богатый функционал. Однако в традиционной инфраструктуре она сталкивается с проблемами масштабирования и надёжности при росте трафика. Kubernetes решает эти задачи, обеспечивая автоматическое масштабирование, отказоустойчивость и единообразие сред. Это руководство поможет вам развернуть PrestaShop в Kubernetes, создав магазин, готовый к высоким нагрузкам и быстрому росту.

Создание или скачивание контейнера

Вариант 1 - Официальный образ

Особенность быстрый старт с официальным образом.

docker pull prestashop/prestashop:latest

# Тестовый запуск

docker run -d -p 8080:80 --name presta-test \

-e PS_DEV_MODE=1 \

-e DB_SERVER=mysql-host \

prestashop/prestashop

Вариант 2 - Кастомный образ

Особенность кастомизация для производительности.

Создать `Dockerfile`:

FROM prestashop/prestashop:8.1-7.8

# Оптимизация для продакшена

RUN rm -rf /var/www/html/install \

&& apt-get update && apt-get install -y libzip-dev \

&& docker-php-ext-install zip opcache \

&& echo "opcache.enable=1" >> /usr/local/etc/php/conf.d/opcache.ini

# Права доступа

RUN chown -R www-data:www-data /var/www/html

Соберите образ:

docker build -t mycompany/prestashop:2.0 .

 

Развертывание в Kubernetes

Архитектура:

Рисунок 1 - Архитектура PretaShop

Шаг 1 - Установка зависимостей

MariaDB и Redis для данных и сессий.

helm repo add bitnami https://charts.bitnami.com/bitnami

helm install presta-db bitnami/mariadb-galera \

--namespace prestashop \

--set rootUser.password=DB_ROOT_PASS \

--set db.user=prestashop \

--set db.password=PRESTA_DB_PASS \

--set db.name=prestashop_db

helm install presta-redis bitnami/redis \

--namespace prestashop \

--set auth.password=REDIS_PASSWORD

Шаг 2 - Конфигурация

Настройки для PrestaShop.

prestashop-configmap.yaml:

apiVersion: v1

kind: ConfigMap

metadata:

name: prestashop-config

namespace: prestashop

data:

PS_DOMAIN: "shop.example.com"

DB_SERVER: "presta-db-mariadb-galera"

DB_USER: "prestashop"

DB_NAME: "prestashop_db"

REDIS_HOST: "presta-redis-master"

Шаг 3 - Deployment

Особенность  - запускает PrestaShop с хранилищем.

prestashop-deployment.yaml:

apiVersion: apps/v1

kind: Deployment

metadata:

name: prestashop

namespace: prestashop

spec:

replicas: 3

selector:

matchLabels:

app: prestashop

template:

metadata:

labels:

app: prestashop

spec:

containers:

- name: prestashop

image: mycompany/prestashop:2.0

envFrom:

- configMapRef:

name: prestashop-config

- secretRef:

name: prestashop-secrets

ports:

- containerPort: 80

volumeMounts:

- name: prestashop-data

mountPath: /var/www/html

volumes:

- name: prestashop-data

persistentVolumeClaim:

claimName: prestashop-pvc

 

Шаг 4 - Сервис и Ingress

Обеспечивает доступ через домен.

prestashop-service.yaml:

apiVersion: v1

kind: Service

metadata:

name: prestashop-service

namespace: prestashop

spec:

selector:

app: prestashop

ports:

- port: 80

apiVersion: networking.k8s.io/v1

kind: Ingress

metadata:

name: prestashop-ingress

namespace: prestashop

spec:

tls:

- hosts:

- shop.example.com

secretName: prestashop-tls

rules:

- host: shop.example.com

http:

paths:

- path: /

pathType: Prefix

backend:

service:

name: prestashop-service

port:

number: 80

Финальная настройка

Установка через Web Wizard

Для `readinessProbe`.

Откройте `https://shop.example.com`.

Пройдите шаги:

- БД: `presta-db-mariadb-galera`, `prestashop`, `prestashop_db`, пароль из Secrets.

Health-check

Создайте `/var/www/html/health-check.php`:

<?php
header('HTTP/1.1 200 OK');
echo "OK";
?>

3. Настройка Redis

Ускоряет работу сессий.

// /app/config/parameters.php

'parameters' => [

'ps_session_storage' => 'ps_redis',

'ps_redis_server' => 'tcp://presta-redis-master:6379',

'ps_redis_password' => 'REDIS_PASSWORD',

]

PrestaShop в Kubernetes обеспечивает масштабируемость и надёжность для eCommerce. Это руководство создаёт основу для успешного магазина.