Por que Elegir VPS para Odoo en 2026
Un Servidor Virtual Privado (VPS) representa el equilibrio perfecto entre el control total de un servidor dedicado y la accesibilidad economica del hosting compartido. Para Odoo, un VPS ofrece la flexibilidad necesaria para personalizar cada aspecto del entorno de ejecucion, desde la version de Python hasta la configuracion de PostgreSQL.
En 2026, los proveedores de VPS han evolucionado significativamente, ofreciendo almacenamiento NVMe ultrarapido, redes de baja latencia y herramientas de gestion simplificadas. Esto hace que desplegar Odoo en un VPS sea mas accesible que nunca, incluso para equipos con conocimientos tecnicos intermedios.
Resumen Ejecutivo
Para la mayoria de implementaciones de Odoo, recomendamos Hetzner Cloud por su excelente relacion precio-rendimiento en Europa. Si tu audiencia principal esta en America, considera DigitalOcean o Vultr por su presencia geografica. Contabo es ideal para presupuestos muy ajustados donde el rendimiento no es critico.
Ventajas de VPS sobre Hosting Gestionado
Ventajas del VPS
- Control total sobre el servidor
- Sin limite de usuarios
- Personalizacion completa
- Coste fijo predecible
- Instalacion de modulos sin restricciones
- Acceso root completo
Desventajas del VPS
- Requiere conocimientos tecnicos
- Responsabilidad de mantenimiento
- Configuracion manual de seguridad
- Sin soporte Odoo incluido
- Backups bajo tu responsabilidad
- Tiempo de administracion
Cuando NO Elegir VPS
Un VPS no es la mejor opcion si:
- No tienes experiencia con Linux y linea de comandos
- Necesitas soporte tecnico especializado en Odoo
- Prefieres actualizaciones automaticas gestionadas
- Tu tiempo es mas valioso que el ahorro en hosting
- Requieres SLA garantizado con compensacion
En estos casos, considera hosting gestionado como Odoo4projects u Odoo.sh.
Comparativa de Proveedores VPS para Odoo
Analizamos los cuatro proveedores VPS mas populares para Odoo, evaluando precio, rendimiento, ubicaciones y caracteristicas especificas para cargas de trabajo ERP.
| Proveedor | Plan Minimo Odoo | RAM | CPU | SSD | Ubicaciones | Rating |
|---|---|---|---|---|---|---|
| Hetzner Cloud | 7.05EUR/mes (CX22) | 4 GB | 2 vCPU | 40 GB NVMe | 5 (EU/US) | 4.8/5 |
| DigitalOcean | $24/mes (4GB) | 4 GB | 2 vCPU | 80 GB SSD | 15 | 4.6/5 |
| Vultr | $24/mes (4GB) | 4 GB | 2 vCPU | 100 GB NVMe | 32 | 4.5/5 |
| Contabo | 5.99EUR/mes (VPS S) | 8 GB | 4 vCPU | 200 GB SSD | 6 | 4.1/5 |
Hetzner Cloud
7.05EUR/mes (CX22)
- Mejor rendimiento por euro en Europa
- Almacenamiento NVMe ultrarapido
- Centros de datos en Alemania y Finlandia
- Nueva ubicacion en EE.UU. (Ashburn)
- API completa y bien documentada
- Snapshots y backups automaticos
- IPv6 nativo incluido
Ventajas
- Precio imbatible en Europa
- Excelente rendimiento I/O
- Facturacion por hora
Limitaciones
- Soporte solo en ingles/aleman
- Pocas ubicaciones fuera de Europa
DigitalOcean
$24/mes (4GB Droplet)
- Documentacion excepcional
- Comunidad muy activa
- Marketplace con apps preconfiguradas
- 15 ubicaciones globales
- Panel de control intuitivo
- Monitoreo integrado
- $200 credito para nuevos usuarios
Vultr
$24/mes (4GB Cloud)
- 32 ubicaciones en todo el mundo
- Almacenamiento NVMe en todos los planes
- Bare metal disponible
- Kubernetes gestionado
- Excelente latencia global
- Facturacion por hora
- $250 credito promocional
Contabo
5.99EUR/mes (VPS S)
- Recursos muy generosos por precio
- 8 GB RAM en plan basico
- 200 GB SSD incluidos
- Sin limite de trafico
- Centros de datos en EU/US/Asia
- Snapshots opcionales
Nota sobre Contabo
Contabo ofrece excelentes recursos por precio, pero el rendimiento puede ser inferior a otros proveedores debido a overselling. Recomendado para desarrollo o proyectos no criticos.
Comparativa Visual: Precio vs Rendimiento
Este grafico interactivo compara los proveedores VPS en terminos de precio mensual frente a puntuacion de rendimiento. El tamano del circulo indica la cantidad de ubicaciones disponibles.
Guia de Dimensionamiento: Que VPS Necesitas
El dimensionamiento correcto del servidor es crucial para el rendimiento de Odoo. Un servidor subdimensionado causara lentitud y frustracion, mientras que uno sobredimensionado desperdicia recursos.
Regla General de Dimensionamiento
Formula Basica
RAM necesaria = 2GB base + (0.3GB x usuarios simultaneos)
Workers = (CPU cores x 2) + 1
Almacenamiento = 20GB base + (2GB x usuarios totales) + espacio filestore
| Escenario | Usuarios Simultaneos | RAM Minima | CPU | Almacenamiento | Plan Recomendado |
|---|---|---|---|---|---|
| Desarrollo/Pruebas | 1-3 | 2 GB | 1 vCPU | 20 GB | Hetzner CX11 (3.29EUR) |
| Startup Pequena | 5-10 | 4 GB | 2 vCPU | 40 GB | Hetzner CX22 (7.05EUR) |
| PYME | 10-25 | 8 GB | 4 vCPU | 80 GB | Hetzner CX32 (13.10EUR) |
| Empresa Mediana | 25-50 | 16 GB | 8 vCPU | 160 GB | Hetzner CX42 (25.40EUR) |
| Enterprise | 50-100+ | 32 GB+ | 16 vCPU+ | 320 GB+ | Hetzner CX52 (49.90EUR) |
Consideraciones Adicionales
- Odoo Enterprise: Requiere aproximadamente 50% mas de RAM que Community
- Muchos modulos: Cada modulo adicional consume memoria. Con 20+ modulos, aumenta RAM un 25%
- Integraciones API: Si usas integraciones intensivas, considera mas CPU
- Filestore grande: Archivos adjuntos y documentos pueden requerir mucho espacio
- PostgreSQL separado: Para cargas altas, considera separar la base de datos en otro servidor
Arbol de Decision: Elige tu VPS
Navega por este arbol interactivo para encontrar el proveedor VPS ideal segun tus necesidades especificas.
Instalacion de Odoo 18 en VPS: Guia Paso a Paso
Esta guia asume que estas usando Ubuntu 22.04 LTS o 24.04 LTS. Las instrucciones son validas para cualquier proveedor VPS.
Antes de Empezar
Asegurate de tener: acceso SSH root a tu VPS, un dominio apuntando a la IP del servidor, y aproximadamente 45 minutos de tiempo.
-
Actualizar el Sistema y Crear Usuario
Primero, actualiza todos los paquetes y crea un usuario dedicado para Odoo:
# Actualizar sistema sudo apt update && sudo apt upgrade -y # Crear usuario odoo sudo adduser --system --home=/opt/odoo --group odoo # Instalar dependencias basicas sudo apt install -y git python3-pip python3-dev python3-venv \ libxml2-dev libxslt1-dev zlib1g-dev libsasl2-dev \ libldap2-dev build-essential libssl-dev libffi-dev \ libmysqlclient-dev libjpeg-dev libpq-dev libjpeg8-dev \ liblcms2-dev libblas-dev libatlas-base-dev npm -
Instalar PostgreSQL 16
Odoo requiere PostgreSQL como base de datos. Instalamos la version 16 para mejor rendimiento:
# Agregar repositorio oficial de PostgreSQL sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - sudo apt update # Instalar PostgreSQL 16 sudo apt install -y postgresql-16 postgresql-client-16 # Crear usuario de base de datos para Odoo sudo -u postgres createuser -s odoo -
Instalar wkhtmltopdf
Necesario para generar reportes PDF en Odoo:
# Descargar e instalar wkhtmltopdf con soporte Qt wget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.jammy_amd64.deb sudo apt install -y ./wkhtmltox_0.12.6.1-3.jammy_amd64.deb rm wkhtmltox_0.12.6.1-3.jammy_amd64.deb -
Descargar e Instalar Odoo 18
Clonamos el repositorio oficial y configuramos el entorno:
# Clonar Odoo 18 sudo git clone --depth 1 --branch 18.0 https://github.com/odoo/odoo.git /opt/odoo/odoo # Crear entorno virtual Python sudo python3 -m venv /opt/odoo/venv # Instalar dependencias de Odoo sudo /opt/odoo/venv/bin/pip install wheel sudo /opt/odoo/venv/bin/pip install -r /opt/odoo/odoo/requirements.txt # Crear directorio para modulos personalizados sudo mkdir /opt/odoo/custom-addons # Establecer permisos sudo chown -R odoo:odoo /opt/odoo -
Crear Archivo de Configuracion
Configuramos Odoo con parametros optimizados:
sudo nano /etc/odoo.confContenido del archivo:
[options] ; Configuracion basica admin_passwd = TuContraseƱaSeguraAqui123! db_host = False db_port = False db_user = odoo db_password = False ; Rutas addons_path = /opt/odoo/odoo/addons,/opt/odoo/custom-addons data_dir = /opt/odoo/.local/share/Odoo ; Servidor http_port = 8069 longpolling_port = 8072 proxy_mode = True ; Workers (ajustar segun CPU) workers = 4 max_cron_threads = 2 ; Limites de memoria (ajustar segun RAM) limit_memory_hard = 2684354560 limit_memory_soft = 2147483648 limit_time_cpu = 600 limit_time_real = 1200 ; Logs logfile = /var/log/odoo/odoo.log log_level = warn -
Crear Servicio Systemd
Configuramos Odoo como servicio del sistema:
sudo nano /etc/systemd/system/odoo.serviceContenido:
[Unit] Description=Odoo 18 After=network.target postgresql.service [Service] Type=simple SyslogIdentifier=odoo PermissionsStartOnly=true User=odoo Group=odoo ExecStart=/opt/odoo/venv/bin/python3 /opt/odoo/odoo/odoo-bin -c /etc/odoo.conf StandardOutput=journal+console Restart=always RestartSec=5 [Install] WantedBy=multi-user.target# Crear directorio de logs sudo mkdir -p /var/log/odoo sudo chown odoo:odoo /var/log/odoo # Habilitar e iniciar servicio sudo systemctl daemon-reload sudo systemctl enable odoo sudo systemctl start odoo # Verificar estado sudo systemctl status odoo -
Instalar y Configurar Nginx
Configuramos Nginx como proxy inverso con SSL:
# Instalar Nginx y Certbot sudo apt install -y nginx certbot python3-certbot-nginx # Crear configuracion de Nginx sudo nano /etc/nginx/sites-available/odooContenido del archivo Nginx:
upstream odoo { server 127.0.0.1:8069; } upstream odoochat { server 127.0.0.1:8072; } server { listen 80; server_name tu-dominio.com; # Redirigir a HTTPS return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name tu-dominio.com; # Logs access_log /var/log/nginx/odoo.access.log; error_log /var/log/nginx/odoo.error.log; # SSL (Certbot lo configurara) ssl_certificate /etc/letsencrypt/live/tu-dominio.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/tu-dominio.com/privkey.pem; # Proxy settings proxy_read_timeout 720s; proxy_connect_timeout 720s; proxy_send_timeout 720s; # Headers proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; # Longpolling location /longpolling { proxy_pass http://odoochat; } # Archivos estaticos location ~* /web/static/ { proxy_cache_valid 200 90m; proxy_buffering on; expires 864000; proxy_pass http://odoo; } # Proxy principal location / { proxy_redirect off; proxy_pass http://odoo; } # Gzip gzip_types text/css text/plain text/xml application/xml application/javascript application/x-javascript text/javascript; gzip on; }# Habilitar sitio sudo ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/ sudo rm /etc/nginx/sites-enabled/default # Obtener certificado SSL sudo certbot --nginx -d tu-dominio.com # Reiniciar Nginx sudo nginx -t && sudo systemctl restart nginx
Instalacion Completada
Ahora puedes acceder a Odoo en https://tu-dominio.com. La primera vez, crea la base de datos usando la contrasena maestra que configuraste en odoo.conf.
Configuracion Avanzada del Servidor
Optimizacion de PostgreSQL para Odoo
PostgreSQL viene con configuracion conservadora por defecto. Ajustamos para mejor rendimiento:
sudo nano /etc/postgresql/16/main/postgresql.conf
Parametros recomendados para servidor de 8GB RAM:
# Memoria
shared_buffers = 2GB # 25% de RAM
effective_cache_size = 6GB # 75% de RAM
work_mem = 64MB # RAM / max_connections / 2
maintenance_work_mem = 512MB
# Checkpoint
checkpoint_completion_target = 0.9
wal_buffers = 64MB
default_statistics_target = 100
# Planificador
random_page_cost = 1.1 # Para SSD
effective_io_concurrency = 200 # Para SSD
# Conexiones
max_connections = 100
# Logs
log_min_duration_statement = 1000 # Log queries lentas (+1s)
# Reiniciar PostgreSQL
sudo systemctl restart postgresql
Configuracion de Workers de Odoo
La configuracion de workers es critica para el rendimiento. Usa esta formula:
Calculo de Workers
workers = (CPU cores * 2) + 1
max_cron_threads = 2 (maximo)
limit_memory_soft = 640MB por worker
limit_memory_hard = 768MB por worker
| CPU Cores | Workers | RAM Necesaria | Usuarios Simultaneos |
|---|---|---|---|
| 2 | 5 | 4 GB | 10-15 |
| 4 | 9 | 8 GB | 20-30 |
| 8 | 17 | 16 GB | 40-60 |
| 16 | 33 | 32 GB | 80-120 |
Optimizacion de Rendimiento
1. Habilitar Swap (Recomendado)
Swap proporciona un colchon de seguridad cuando la RAM se agota:
# Crear archivo swap de 4GB
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# Hacer permanente
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
# Ajustar swappiness para servidores
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
2. Cache de Assets con Nginx
Mejora tiempos de carga cacheando archivos estaticos:
# Agregar a la seccion server de Nginx
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 30d;
add_header Cache-Control "public, immutable";
proxy_pass http://odoo;
}
3. Compresion Gzip
Reduce el tamano de transferencia significativamente:
# En /etc/nginx/nginx.conf
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript
application/xml application/xml+rss text/javascript application/x-javascript;
gzip_min_length 1000;
4. Indices de Base de Datos
Crea indices adicionales para consultas frecuentes:
# Conectar a PostgreSQL
sudo -u postgres psql nombre_base_datos
# Indices utiles para Odoo
CREATE INDEX CONCURRENTLY idx_mail_message_date ON mail_message(date DESC);
CREATE INDEX CONCURRENTLY idx_sale_order_state ON sale_order(state);
CREATE INDEX CONCURRENTLY idx_purchase_order_state ON purchase_order(state);
CREATE INDEX CONCURRENTLY idx_stock_move_state ON stock_move(state);
5. Programar VACUUM y ANALYZE
Mantiene PostgreSQL optimizado:
# Agregar al crontab del usuario postgres
sudo crontab -u postgres -e
# Ejecutar VACUUM cada noche a las 3 AM
0 3 * * * /usr/bin/vacuumdb -a -z -q
Hardening de Seguridad
La seguridad es critica para cualquier servidor en produccion. Implementamos multiples capas de proteccion.
1. Configurar Firewall (UFW)
# Instalar y configurar UFW
sudo apt install -y ufw
# Politicas por defecto
sudo ufw default deny incoming
sudo ufw default allow outgoing
# Permitir SSH (IMPORTANTE: no bloquear tu acceso)
sudo ufw allow 22/tcp
# Permitir HTTP y HTTPS
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
# Habilitar firewall
sudo ufw enable
sudo ufw status
2. Securizar SSH
sudo nano /etc/ssh/sshd_config
Cambiar estas configuraciones:
# Deshabilitar login root
PermitRootLogin no
# Usar solo autenticacion por clave
PasswordAuthentication no
PubkeyAuthentication yes
# Limitar intentos
MaxAuthTries 3
# Timeout de sesion inactiva
ClientAliveInterval 300
ClientAliveCountMax 2
Importante
Antes de deshabilitar PasswordAuthentication, asegurate de tener tu clave SSH configurada correctamente. De lo contrario, perderas acceso al servidor.
3. Instalar Fail2ban
Protege contra ataques de fuerza bruta:
sudo apt install -y fail2ban
sudo nano /etc/fail2ban/jail.local
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
[nginx-http-auth]
enabled = true
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
4. Actualizaciones Automaticas de Seguridad
sudo apt install -y unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
5. Limitar Acceso a la Base de Datos
PostgreSQL solo debe ser accesible localmente:
sudo nano /etc/postgresql/16/main/pg_hba.conf
# Asegurar que solo permite conexiones locales
local all all peer
host all all 127.0.0.1/32 scram-sha-256
6. Headers de Seguridad en Nginx
# Agregar al bloque server de Nginx
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Estrategia de Backups
Una estrategia de backup solida es esencial. Debes respaldar tres componentes:
Componentes a Respaldar
- Base de datos PostgreSQL: Todos los datos de Odoo
- Filestore: Archivos adjuntos, imagenes, documentos
- Configuracion: odoo.conf, nginx, etc.
Script de Backup Automatico
sudo nano /opt/odoo/backup.sh
#!/bin/bash
# Variables
BACKUP_DIR="/opt/odoo/backups"
DATE=$(date +%Y%m%d_%H%M%S)
DB_NAME="tu_base_de_datos"
RETENTION_DAYS=30
# Crear directorio si no existe
mkdir -p $BACKUP_DIR
# Backup de base de datos
echo "Respaldando base de datos..."
sudo -u postgres pg_dump $DB_NAME | gzip > $BACKUP_DIR/db_${DATE}.sql.gz
# Backup del filestore
echo "Respaldando filestore..."
tar -czf $BACKUP_DIR/filestore_${DATE}.tar.gz /opt/odoo/.local/share/Odoo/filestore/$DB_NAME
# Backup de configuracion
echo "Respaldando configuracion..."
tar -czf $BACKUP_DIR/config_${DATE}.tar.gz /etc/odoo.conf /etc/nginx/sites-available/odoo
# Eliminar backups antiguos
find $BACKUP_DIR -type f -mtime +$RETENTION_DAYS -delete
# Mostrar tamano de backups
echo "Backup completado:"
ls -lh $BACKUP_DIR/*_${DATE}*
# Opcional: Subir a almacenamiento externo (S3, Backblaze, etc.)
# rclone copy $BACKUP_DIR remote:odoo-backups/
# Hacer ejecutable
sudo chmod +x /opt/odoo/backup.sh
# Programar backup diario a las 2 AM
sudo crontab -e
# Agregar:
0 2 * * * /opt/odoo/backup.sh >> /var/log/odoo/backup.log 2>&1
Recomendacion: Backup Externo
Siempre mantiene una copia de tus backups fuera del servidor. Puedes usar rclone para sincronizar con S3, Backblaze B2, Google Cloud Storage u otros proveedores. El coste es minimo (centimos por GB/mes).