PrestaShop — популярная open-source платформа для создания интернет-магазинов, предлагающая гибкость и богатый функционал. Однако в традиционной инфраструктуре она сталкивается с проблемами масштабирования и надёжности при росте трафика. Kubernetes решает эти задачи, обеспечивая автоматическое масштабирование, отказоустойчивость и единообразие сред. Это руководство поможет вам развернуть PrestaShop в Kubernetes, создав магазин, готовый к высоким нагрузкам и быстрому росту.
Создание или скачивание контейнера
Вариант 1 - Официальный образ
Особенность быстрый старт с официальным образом.
# Тестовый запуск
docker run -d -p 8080:80 --name presta-test \
-e PS_DEV_MODE=1 \
-e DB_SERVER=mysql-host \
prestashop/prestashop
Вариант 2 - Кастомный образ
Особенность кастомизация для производительности.
Создать `Dockerfile`:
# Оптимизация для продакшена
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
Соберите образ:
Развертывание в Kubernetes
Архитектура:
Шаг 1 - Установка зависимостей
MariaDB и Redis для данных и сессий.
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:
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:
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:
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
Ускоряет работу сессий.
'parameters' => [
'ps_session_storage' => 'ps_redis',
'ps_redis_server' => 'tcp://presta-redis-master:6379',
'ps_redis_password' => 'REDIS_PASSWORD',
]
PrestaShop в Kubernetes обеспечивает масштабируемость и надёжность для eCommerce. Это руководство создаёт основу для успешного магазина.