Tu tienda online necesita más que un hosting compartido. Cada segundo de carga extra reduce conversiones un 7%. Un VPS bien configurado es la diferencia entre vender y perder clientes.
WooCommerce, PrestaShop, Magento… cada plataforma tiene requisitos específicos. Esta guía cubre todo: desde elegir el VPS correcto hasta optimizarlo para máximas conversiones.
Por qué un VPS para e-commerce
Hosting compartido vs VPS
| Aspecto | Compartido | VPS |
|---|---|---|
| Recursos | Compartidos | Dedicados |
| Velocidad | Variable | Consistente |
| Escalabilidad | Limitada | Flexible |
| Control | Mínimo | Total |
| Seguridad | Básica | Configurable |
| Picos de tráfico | Problemas | Manejables |
Cuándo necesitas un VPS
- Más de 100 productos
- Más de 1.000 visitas/día
- Picos de tráfico (Black Friday, rebajas)
- Múltiples plugins/extensiones
- Necesitas personalización del servidor
- Requisitos de seguridad PCI-DSS
Requisitos por plataforma
WooCommerce
| Tienda | RAM | CPU | Almacenamiento |
|---|---|---|---|
| Pequeña (<500 productos) | 2 GB | 2 cores | 40 GB SSD |
| Media (500-5.000) | 4 GB | 4 cores | 80 GB NVMe |
| Grande (5.000+) | 8+ GB | 6+ cores | 160+ GB NVMe |
Stack recomendado: Nginx + PHP 8.2+ + MySQL 8 + Redis
PrestaShop
| Tienda | RAM | CPU | Almacenamiento |
|---|---|---|---|
| Pequeña | 2 GB | 2 cores | 40 GB SSD |
| Media | 4 GB | 4 cores | 80 GB NVMe |
| Grande | 8+ GB | 6+ cores | 160+ GB NVMe |
Stack recomendado: Apache/Nginx + PHP 8.1+ + MySQL 8 + Memcached
Magento 2
| Tienda | RAM | CPU | Almacenamiento |
|---|---|---|---|
| Pequeña | 4 GB | 4 cores | 80 GB NVMe |
| Media | 8 GB | 6 cores | 160 GB NVMe |
| Grande | 16+ GB | 8+ cores | 320+ GB NVMe |
Stack recomendado: Nginx + PHP 8.2 + MySQL 8 + Redis + Elasticsearch + Varnish
Magento es el más exigente. Para tiendas serias, considera VPS de gama alta.
Stack técnico óptimo
Componentes esenciales
Capa 1: CDN (Cloudflare)
↓
Capa 2: Nginx (proxy + caché estáticos)
↓
Capa 3: PHP-FPM (procesa la aplicación)
↓
Capa 4: Redis (caché de objetos/sesiones)
↓
Capa 5: MySQL/MariaDB (base de datos)
↓
Capa 6: NVMe (almacenamiento rápido)
Por qué cada componente
| Componente | Función | Impacto |
|---|---|---|
| CDN | Cachea estáticos globalmente | -50% tiempo carga |
| Nginx | Sirve archivos, proxy | Muy eficiente |
| PHP-FPM | Procesa PHP en paralelo | +200% requests/seg |
| Redis | Caché en memoria | -80% consultas BD |
| NVMe | Almacenamiento rápido | 5x más rápido que SSD |
Instalación paso a paso (WooCommerce)
1. Preparar el servidor
# Actualizar sistema
sudo apt update && sudo apt upgrade -y
# Instalar dependencias
sudo apt install -y curl wget gnupg2 software-properties-common
2. Instalar Nginx
sudo apt install nginx -y
sudo systemctl enable nginx
3. Instalar PHP 8.2
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update
sudo apt install -y php8.2-fpm php8.2-mysql php8.2-curl php8.2-gd \
php8.2-mbstring php8.2-xml php8.2-zip php8.2-intl php8.2-soap \
php8.2-bcmath php8.2-redis php8.2-imagick
4. Instalar MySQL 8
sudo apt install mysql-server -y
sudo mysql_secure_installation
# Crear base de datos
sudo mysql -e "CREATE DATABASE woocommerce;"
sudo mysql -e "CREATE USER 'woo_user'@'localhost' IDENTIFIED BY 'password_seguro';"
sudo mysql -e "GRANT ALL ON woocommerce.* TO 'woo_user'@'localhost';"
sudo mysql -e "FLUSH PRIVILEGES;"
5. Instalar Redis
sudo apt install redis-server -y
sudo systemctl enable redis-server
6. Configurar Nginx para WooCommerce
sudo nano /etc/nginx/sites-available/tienda.com
server {
listen 80;
server_name tienda.com www.tienda.com;
root /var/www/tienda.com;
index index.php;
# Logs
access_log /var/log/nginx/tienda-access.log;
error_log /var/log/nginx/tienda-error.log;
# Gzip
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;
gzip_min_length 1000;
# Cache de estáticos
location ~* \.(jpg|jpeg|png|gif|ico|css|js|pdf|woff|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
# WordPress/WooCommerce
location / {
try_files $uri $uri/ /index.php?$args;
}
# PHP
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
# Timeouts para operaciones largas
fastcgi_read_timeout 300;
}
# Seguridad
location ~ /\.ht {
deny all;
}
location = /wp-config.php {
deny all;
}
# Bloquear xmlrpc
location = /xmlrpc.php {
deny all;
}
}
sudo ln -s /etc/nginx/sites-available/tienda.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
7. Instalar WordPress + WooCommerce
cd /var/www
sudo wget https://wordpress.org/latest.tar.gz
sudo tar -xzf latest.tar.gz
sudo mv wordpress tienda.com
sudo chown -R www-data:www-data tienda.com
sudo chmod -R 755 tienda.com
Completa instalación vía web, luego instala WooCommerce desde plugins.
Optimización de rendimiento
PHP-FPM para e-commerce
sudo nano /etc/php/8.2/fpm/pool.d/www.conf
[www]
pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500
; Para tiendas con mucho tráfico
;pm = static
;pm.max_children = 30
php.ini optimizado
; /etc/php/8.2/fpm/php.ini
memory_limit = 512M
max_execution_time = 300
max_input_time = 300
post_max_size = 64M
upload_max_filesize = 64M
; OPcache (crítico para rendimiento)
opcache.enable = 1
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 10000
opcache.revalidate_freq = 60
opcache.fast_shutdown = 1
MySQL optimizado
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
# InnoDB
innodb_buffer_pool_size = 1G # 50-70% de RAM disponible
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
# Query cache (MariaDB)
query_cache_type = 1
query_cache_size = 64M
query_cache_limit = 2M
# Conexiones
max_connections = 150
thread_cache_size = 8
# Logs lentos
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
Redis para WooCommerce
Instala plugin “Redis Object Cache”:
// wp-config.php
define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);
define('WP_REDIS_DATABASE', 0);
define('WP_CACHE', true);
Caché de página
Instala WP Super Cache o W3 Total Cache:
// wp-config.php (para W3TC)
define('WP_CACHE', true);
Seguridad para e-commerce
SSL obligatorio
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d tienda.com -d www.tienda.com
Guía completa: SSL con Let’s Encrypt
Firewall
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
Guía completa: Firewall en VPS
Proteger wp-admin
location /wp-admin {
# Limitar por IP si es posible
# allow 203.0.113.5;
# deny all;
# O al menos rate limiting
limit_req zone=login burst=3 nodelay;
}
location = /wp-login.php {
limit_req zone=login burst=3 nodelay;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Plugin de seguridad
Instala Wordfence o Sucuri:
- 2FA para administradores
- Firewall de aplicación
- Escaneo de malware
Guía completa: Seguridad WordPress
PCI-DSS consideraciones
Si procesas tarjetas directamente (no vía Stripe/PayPal):
- SSL obligatorio en todo el sitio
- No almacenar datos de tarjetas
- Logs de acceso
- Actualizaciones regulares
- Escaneo de vulnerabilidades
Recomendación: Usa pasarelas como Stripe que manejan PCI por ti.
Backups para e-commerce
Estrategia 3-2-1
- 3 copias de datos
- 2 tipos de almacenamiento
- 1 copia offsite
Script de backup
#!/bin/bash
# /root/scripts/backup-tienda.sh
FECHA=$(date +%Y%m%d_%H%M)
BACKUP_DIR="/backups"
SITE_DIR="/var/www/tienda.com"
DB_NAME="woocommerce"
DB_USER="woo_user"
DB_PASS="password"
# Backup base de datos
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME | gzip > $BACKUP_DIR/db-$FECHA.sql.gz
# Backup archivos (excluyendo caché)
tar -czf $BACKUP_DIR/files-$FECHA.tar.gz \
--exclude='wp-content/cache' \
--exclude='wp-content/uploads/wc-logs' \
$SITE_DIR
# Eliminar backups > 7 días
find $BACKUP_DIR -mtime +7 -delete
# Sincronizar a cloud
rclone sync $BACKUP_DIR remote:backups/tienda
# Cron diario a las 3 AM
0 3 * * * /root/scripts/backup-tienda.sh
Gestión de picos de tráfico
Black Friday / Rebajas
-
Antes del evento:
- Escalar VPS temporalmente
- Activar caché agresivo
- Precargar páginas populares
- Desactivar plugins innecesarios
-
Durante el evento:
- Monitorizar recursos en tiempo real
- Cloudflare en modo “Under Attack” si necesario
- Tener plan B (escalar más)
-
Después:
- Analizar métricas
- Volver a configuración normal
- Documentar lecciones
Escalado temporal
# Escalar VPS antes del evento
# (contacta a tu proveedor o usa panel)
# Aumentar workers PHP temporalmente
pm.max_children = 100
pm.start_servers = 20
Monitorización
Métricas clave
| Métrica | Umbral alerta | Acción |
|---|---|---|
| CPU | >80% sostenido | Escalar o optimizar |
| RAM | >85% | Aumentar o revisar |
| Disco | >80% | Limpiar o ampliar |
| Tiempo respuesta | >2s | Optimizar caché |
| Error rate | >1% | Investigar logs |
Herramientas
- Netdata: Monitorización en tiempo real
- UptimeRobot: Alertas de caída (gratis)
- Google Analytics: Rendimiento real de usuarios
Guía: Monitorizar VPS con Netdata
Checklist e-commerce
Pre-lanzamiento
| Tarea | ✓ |
|---|---|
| VPS dimensionado correctamente | ☐ |
| SSL configurado | ☐ |
| Caché activo (Redis + página) | ☐ |
| Backups automatizados | ☐ |
| CDN configurado | ☐ |
| Seguridad básica | ☐ |
Post-lanzamiento
| Tarea | ✓ |
|---|---|
| Monitorización activa | ☐ |
| Alertas configuradas | ☐ |
| Test de carga realizado | ☐ |
| Plan de escalado documentado | ☐ |
| Recuperación de desastres probada | ☐ |
Errores comunes
Error 1: VPS subdimensionado
Síntomas: Lentitud, errores 503, caídas. Solución: Escalar recursos o optimizar.
Error 2: Sin caché
Síntomas: Cada visita golpea la BD. Solución: Redis + caché de página.
Error 3: Sin CDN
Síntomas: Imágenes lentas, alto consumo de ancho de banda. Solución: Cloudflare o similar.
Error 4: Backups no probados
Síntomas: Backup existe pero no restaura. Solución: Probar restauración regularmente.
Preguntas frecuentes
¿Cuánto VPS necesito para mi tienda?
Depende de productos, tráfico y plataforma. Empieza con 4GB RAM / 2 cores y escala según necesidad.
¿WooCommerce o PrestaShop?
WooCommerce si ya usas WordPress. PrestaShop si prefieres solución dedicada e-commerce.
¿Puedo empezar con hosting compartido?
Sí, para tiendas pequeñas. Migra a VPS cuando notes lentitud o necesites más control.
¿Magento vale la pena?
Para tiendas grandes con necesidades complejas. Para PYMEs, WooCommerce/PrestaShop son más eficientes.
Nuestra recomendación
Para empezar: VPS 4GB RAM con WooCommerce + Redis + Cloudflare.
Para crecer: Escala verticalmente primero, luego considera arquitectura distribuida.
¿No quieres gestionar el servidor? La administración gestionada de Avantys incluye optimización específica para e-commerce.
Conclusión
Un VPS bien configurado es la base de una tienda online exitosa. La combinación de recursos dedicados, caché inteligente y CDN puede transformar la experiencia de tus clientes.
No escatimes en hosting para tu e-commerce. Cada segundo de mejora en velocidad es dinero en conversiones.
¿Quieres un VPS optimizado para tu tienda? Explora los VPS de Avantys con configuración e-commerce incluida.
Guías relacionadas
- Optimizar rendimiento de tu VPS
- Caché en VPS: Redis y Memcached
- CDN con Cloudflare
- Seguridad WordPress en VPS
¿Quieres la guía completa con todos los casos de uso?
¿Quieres que lo hagamos por ti?
En Avantys gestionamos tu web, hosting y crecimiento digital de punta a punta. Tú a lo importante.