El comercio electrónico es un ámbito donde la estabilidad y la escalabilidad impactan directamente en los ingresos. Imagine una tienda en línea durante una gran venta: miles de usuarios realizan pedidos simultáneamente, pero la infraestructura tradicional colapsa bajo la carga. El sitio web se ralentiza, los clientes se van y el negocio pierde dinero. OpenCart es una plataforma popular para pequeñas y medianas empresas, pero su rendimiento en servidores estándar es limitado. Kubernetes Aborda estos desafíos al proporcionar escalado automático, tolerancia a fallos y flexibilidad. Esta guía le guiará en la implementación de OpenCart en Kubernetes, transformando su tienda en un sistema confiable y elástico preparado para cualquier carga.
Etapa 1 - Preparación del contenedor: La base
Opción 1 - Imagen oficial (Inicio rápido)
Ideal para una configuración rápida, esta imagen incluye dependencias y configuraciones preinstaladas.
# Pull the optimized Bitnami image for OpenCart
docker pull bitnami/opencart:latest
# Test run to verify functionality
docker run -d -p 8080:8080 -p 8443:8443 \
-e OPENCART_USERNAME=admin \
-e OPENCART_PASSWORD=StrongPassword \
bitnami/opencart
Opción 2: Construcción personalizada (Control total)
Una imagen personalizada proporciona control sobre las versiones y configuraciones, ideal para requisitos específicos.
1. Crear `Dockerlisto para importar`:
FROM php:8.1-apache
# Install dependencies required for OpenCart
RUN apt-get update && apt-get install -y \
libzip-dev libpng-dev libjpeg-dev libfreetype6-dev libonig-dev libxml2-dev \
&& docker-php-ext-configure gd --with-freetype --with-jpeg \
&& docker-php-ext-install -j$(nproc) gd mysqli pdo_mysql zip opcache
# Download and extract OpenCart
ENV OPENCART_VERSION 4.0.2.2
RUN curl -O https://github.com/opencart/opencart/releases/download/${OPENCART_VERSION}/opencart-${OPENCART_VERSION}.zip \
&& unzip opencart-${OPENCART_VERSION}.zip \
&& mv upload /var/www/html \
&& rm opencart-${OPENCART_VERSION}.zip
# Configure permissions and configuration files
RUN chown -R www-data:www-data /var/www/html \
&& mv /var/www/html/config-dist.php /var/www/html/config.php \
&& mv /var/www/html/admin/config-dist.php /var/www/html/admin/config.php
# Optimize PHP for performance
COPY opcache.ini /usr/local/etc/php/conf.d/opcache.ini
COPY 000-default.conf /etc/apache2/sites-available/000-default.conf
EXPOSE 8080
2. Construye la imagen:
docker build -t mycompany/opencart:3.0 .Etapa 2 - Despliegue en Kubernetes — Orquestando el éxito
Arquitectura de soluciones:
Cloudflare proporciona protección y almacenamiento en caché, Ingress administra el tráfico, Redis acelera las sesiones y MySQL almacena datos.
![[Пользователь] → [Ingress] → [PrestaShop Pods] → [Redis] → [MariaDB] - visual selection (3)](https://serverspace.io/wp-content/uploads/2025/06/polzovatel-→-ingress-→-prestashop-pods-→-redis-→-mariadb-visual-selection-3-450x231.png)
Paso 1 - Instalar MySQL vía Helm
Helm simplifica MySQL Instalación con configuraciones preconfiguradas.
# Add Bitnami repo and install MySQL
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install opencart-db bitnami/mysql \
--namespace opencart \
--set auth.rootPassword=DB_ROOT_PASS \
--set auth.database=opencart_db \
--set auth.username=opencart_user \
--set auth.password=OPENCART_DB_PASS \
--set persistence.size=20Gi
Paso 2: Configurar OpenCart
ConfigMap almacena configuraciones inyectadas en contenedores.
`opencart-configmap.yaml`:
apiVersion: v1
kind: ConfigMap
metadata:
name: opencart-config
namespace: opencart
data:
OPENCART_HOST: "shop.example.com" # Store domain
OPENCART_USERNAME: "admin" # Admin username
DB_HOST: "opencart-db-mysql" # Database host
DB_NAME: "opencart_db" # Database name
DB_USER: "opencart_user" # Database user
SESSION_DRIVER: "redis" # Session driver
REDIS_HOST: "opencart-redis-master" # Redis host
Paso 3: Implementar StatefulSet
StatefulSet garantiza un estado de pod estable con almacenamiento persistente.
`opencart-statefulset.yaml`:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: opencart
namespace: opencart
spec:
serviceName: opencart
replicas: 3
selector:
matchLabels:
app: opencart
template:
metadata:
labels:
app: opencart
spec:
initContainers:
- name: init-permissions
image: busybox:1.36
command: ['sh', '-c', 'chown -R 33:33 /var/www/html']
volumeMounts:
- name: opencart-data
mountPath: /var/www/html
containers:
- name: opencart
image: mycompany/opencart:3.0
envFrom:
- configMapRef:
name: opencart-config
- secretRef:
name: opencart-secrets
ports:
- containerPort: 8080
volumeMounts:
- name: opencart-data
mountPath: /var/www/html
livenessProbe:
httpGet:
path: /index.php
port: 8080
readinessProbe:
httpGet:
path: /health-check.php
port: 8080
volumeClaimTemplates:
- metadata:
name: opencart-data
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: "ssd"
resources:
requests:
storage: 10Gi
Paso 4 - Servicio e ingreso
Service e Ingress brindan acceso a OpenCart a través de un único dominio con HTTPSoporte S.
`opencart-service.yaml`:
apiVersion: v1
kind: Service
metadata:
name: opencart-service
namespace: opencart
spec:
selector:
app: opencart
ports:
- protocol: TCP
port: 80
targetPort: 8080
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: opencart-ingress
namespace: opencart
annotations:
nginx.ingress.kubernetes.io/affinity: "cookie"
cert-manager.io/cluster-issuer: "letsencrypt-prod"
spec:
tls:
- hosts:
- shop.example.com
secretName: opencart-tls
rules:
- host: shop.example.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: opencart-service
port:
number: 80
Etapa 3 - Configuración final: Lanzamiento de la tienda
Se utiliza para `readinessProbe` para garantizar Kubernetes determina correctamente la preparación del pod.
Configuración inicial:
Abra "https://shop.example.com".
Siga el asistente de configuración:
- Configuración de la base de datos:
Host: opencart-db-mysql
User: opencart_user
Database: opencart_db
Password: from Kubernetes Secrets
- Administrador: especifique el correo electrónico y la contraseña para el acceso de administrador.
Crear health-check.php:
Crear `/var/www/html/health-check.php`:
Configurar Redis para sesiones:
// In /config.php
define('SESSION_DRIVER', 'redis');
define('CACHE_HOSTNAME', 'opencart-redis-master:6379');
Optimización del rendimiento:
En el panel de administración: Sistema → Configuración → Servidor
Habilitar almacenamiento en caché: Sí
Compresión de salida: GZIP
Duración de la caché: 86400
Configurar CDN para activos estáticos:
// In /config.php and /admin/config.php
define('HTTP_SERVER', 'https://cdn.example.com/');
Escalado automático:
HPA escala automáticamente los pods en función de CPU cargar.
`opencart-hpa.yaml`:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: opencart-hpa
namespace: opencart
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: StatefulSet
name: opencart
minReplicas: 3
maxReplicas: 12
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
OpenCart en Kubernetes establece lo siguiente:
- Tolerancia a fallos:
- Recuperación automática ante fallos.
- Escalabilidad:
- Escalabilidad flexible de recursos bajo carga.
- Actuación:
- Optimización a través de Redis y CDN.
Si sigue esta guía, creará una tienda lista para crecer y tener mucho tráfico.