Introduccion: Por Que Migrar tu Odoo a Otro Hosting
La migracion de Odoo a un nuevo hosting es una de las tareas mas criticas que puede enfrentar un administrador de sistemas ERP. Ya sea por mejor rendimiento, costes mas bajos, mejor soporte o simplemente porque tu proveedor actual no cumple con tus expectativas, cambiar de hosting requiere una planificacion meticulosa para evitar perdida de datos y minimizar el tiempo de inactividad.
Objetivo de Esta Guia
Al finalizar esta guia, seras capaz de realizar una migracion completa de Odoo con menos de 30 minutos de downtime, manteniendo la integridad total de tus datos, archivos y configuraciones. Cubriremos desde el backup inicial hasta la validacion final post-migracion.
Razones Comunes para Migrar
- Rendimiento insuficiente: El servidor actual no soporta la carga de usuarios o procesos
- Costes elevados: Existen alternativas mas economicas con igual o mejor servicio
- Mejor soporte: Necesitas soporte en espanol o asistencia tecnica especializada
- Cumplimiento normativo: Requisitos de GDPR o localizacion de datos en Europa
- Escalabilidad: El proveedor actual no permite crecer segun tus necesidades
- Funcionalidades: El nuevo hosting ofrece backups automaticos, IA, o integraciones
Componentes de una Instalacion Odoo
Antes de iniciar la migracion, es fundamental entender que componentes forman una instalacion completa de Odoo:
| Componente | Ubicacion Tipica | Descripcion |
|---|---|---|
| Base de datos PostgreSQL | /var/lib/postgresql/ | Todos los datos de negocio: clientes, facturas, inventario, etc. |
| Filestore | ~/.local/share/Odoo/filestore/ | Archivos adjuntos: PDFs, imagenes, documentos subidos |
| Codigo Odoo | /opt/odoo/ o /usr/lib/python3/ | El framework Odoo y modulos base |
| Modulos custom | /opt/odoo/custom-addons/ | Modulos personalizados y de terceros |
| Configuracion | /etc/odoo/odoo.conf | Parametros del servidor, rutas, workers |
| Certificados SSL | /etc/letsencrypt/ o /etc/ssl/ | Certificados HTTPS para conexion segura |
Nota Importante
Los dos componentes mas criticos son la base de datos PostgreSQL y el filestore. Sin estos, perderas todos tus datos de negocio. El codigo de Odoo puede reinstalarse, pero los datos son irreemplazables sin un backup adecuado.
Diagrama del Flujo de Migracion
Este diagrama interactivo muestra el flujo completo del proceso de migracion. Cada nodo representa una fase critica. Pasa el cursor sobre cada fase para ver detalles y tiempo estimado.
Paso 1: Preparacion del Entorno
Documentacion y Planificacion
30-60 minutosAntes de tocar cualquier archivo, documenta tu instalacion actual. Esto te salvara de problemas durante la restauracion.
1.1 Documentar Version de Odoo
# Verificar version de Odoo instaladaodoo --version# O desde la interfaz web, ir a:# Configuracion -> Opciones Generales -> Sobre Odoo
1.2 Listar Modulos Instalados
# Desde PostgreSQL, listar modulos activospsql -U odoo -d tu_base_datos -c "SELECT name, state FROM ir_module_module WHERE state = 'installed';"# Guardar en archivopsql -U odoo -d tu_base_datos -c "SELECT name FROM ir_module_module WHERE state = 'installed';" > modulos_instalados.txt
1.3 Documentar Configuracion Actual
# Copiar archivo de configuracioncp /etc/odoo/odoo.conf ~/backup_config/odoo.conf.backup# Documentar configuracion nginx si aplicacp /etc/nginx/sites-available/odoo ~/backup_config/nginx_odoo.backup
1.4 Verificar Espacio en Disco
# Tamano de la base de datospsql -U odoo -d tu_base_datos -c "SELECT pg_size_pretty(pg_database_size('tu_base_datos'));"# Tamano del filestoredu -sh ~/.local/share/Odoo/filestore/tu_base_datos/
Precaucion
Asegurate de tener al menos 3 veces el espacio del tamano total de datos en el nuevo servidor. Necesitaras espacio para: datos originales, archivos comprimidos temporales, y margen de seguridad.
Paso 2: Backup de Base de Datos PostgreSQL
Exportacion Completa de la Base de Datos
15-60 minutos (segun tamano)El backup de PostgreSQL es el paso mas critico. Usaremos pg_dump con formato custom para maxima flexibilidad.
2.1 Metodo Recomendado: pg_dump con formato Custom
# Backup completo con formato custom (recomendado)pg_dump -Fc -h localhost -U odoo -d tu_base_datos -f backup_$(date +%Y%m%d_%H%M%S).dump# Explicacion de parametros:# -Fc: Formato custom (comprimido, restauracion flexible)
# -h localhost: Host de PostgreSQL
# -U odoo: Usuario de PostgreSQL
# -d tu_base_datos: Nombre de la base de datos
# -f: Archivo de salida con fecha
2.2 Metodo Alternativo: Backup desde Interfaz Web
Si prefieres usar la interfaz grafica de Odoo:
- Accede a
https://tu-servidor/web/database/manager - Ingresa la master password (configurada en odoo.conf)
- Haz clic en "Backup" junto a tu base de datos
- Selecciona formato "zip" para incluir filestore automaticamente
- Descarga el archivo generado
Diferencia entre Formatos
Formato Custom (-Fc): Mas rapido, permite restauracion parcial de tablas, compresion optima. Ideal para bases grandes.
Formato ZIP (web): Incluye filestore automaticamente, mas facil de usar, pero mas lento y archivos mas grandes.
2.3 Verificar Integridad del Backup
# Verificar que el archivo no esta corruptopg_restore -l backup_20260125_120000.dump | head -20# Deberia mostrar lista de objetos en el backup# Si hay error, el archivo esta corrupto - repetir backup
2.4 Backup durante Horario de Baja Actividad
Para garantizar consistencia de datos, programa el backup final durante horario de minima actividad. Considera:
- Notificar a usuarios sobre ventana de mantenimiento
- Detener trabajos programados (cron jobs de Odoo)
- Considerar poner Odoo en modo mantenimiento
# Opcion: Detener Odoo durante backup final para maxima consistenciasudo systemctl stop odoopg_dump -Fc -U odoo -d tu_base_datos -f backup_final.dumpsudo systemctl start odoo
Paso 3: Copia del Filestore
Transferencia de Archivos Adjuntos
15-120 minutos (segun tamano)El filestore contiene todos los archivos subidos a Odoo: facturas PDF, imagenes de productos, documentos adjuntos a registros, etc.
3.1 Localizar el Filestore
# Ubicacion por defecto (usuario odoo)ls -la ~/.local/share/Odoo/filestore/# O verificar en odoo.confgrep data_dir /etc/odoo/odoo.conf# Ejemplo de salida:# data_dir = /var/lib/odoo/.local/share/Odoo
3.2 Comprimir el Filestore
# Comprimir con tar y gzip para transferencia eficientecd ~/.local/share/Odoo/filestore/tar -czvf ~/filestore_backup_$(date +%Y%m%d).tar.gz tu_base_datos/# Verificar tamanols -lh ~/filestore_backup_*.tar.gz
3.3 Transferir al Nuevo Servidor
# Opcion 1: SCP (mas simple)scp ~/filestore_backup_20260125.tar.gz usuario@nuevo-servidor:/tmp/scp ~/backup_final.dump usuario@nuevo-servidor:/tmp/# Opcion 2: rsync (mejor para archivos grandes, soporta reanudacion)rsync -avz --progress ~/filestore_backup_20260125.tar.gz usuario@nuevo-servidor:/tmp/# Opcion 3: Para conexiones lentas, usar screen/tmux para evitar cortesscreen -S transferrsync -avz --progress --partial ~/filestore_backup*.tar.gz usuario@nuevo-servidor:/tmp/
Consejo Pro
Si el filestore es muy grande (>10GB), considera usar rsync con compresion y la opcion --partial para poder reanudar transferencias interrumpidas. Tambien puedes sincronizar en paralelo mientras el servidor original sigue funcionando.
3.4 Verificar Transferencia
# En el nuevo servidor, verificar checksum# En servidor origen:md5sum ~/filestore_backup_20260125.tar.gz# En servidor destino:md5sum /tmp/filestore_backup_20260125.tar.gz# Los hashes deben coincidir exactamente
Paso 4: Configuracion del Nuevo Servidor
Preparar el Entorno de Destino
30-90 minutosEl nuevo servidor debe tener instalados todos los componentes necesarios antes de restaurar los datos.
4.1 Requisitos del Sistema (Odoo 18)
| Componente | Version Requerida |
|---|---|
| Sistema Operativo | Ubuntu 22.04/24.04 LTS o Debian 12 |
| Python | 3.10 o superior |
| PostgreSQL | 14, 15 o 16 (recomendado 16) |
| Node.js | 18 LTS o superior |
| wkhtmltopdf | 0.12.6 con patched qt |
4.2 Instalacion de Dependencias
# Actualizar sistemasudo apt update && sudo apt upgrade -y# Instalar PostgreSQL 16sudo apt install -y postgresql-16 postgresql-client-16# Instalar dependencias Pythonsudo apt install -y python3-pip python3-dev python3-venv \ libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev \ libtiff5-dev libjpeg8-dev libopenjp2-7-dev zlib1g-dev \ libfreetype6-dev liblcms2-dev libwebp-dev libharfbuzz-dev \ libfribidi-dev libxcb1-dev libpq-dev# Instalar Node.js 18curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -sudo apt install -y nodejs# Instalar wkhtmltopdfwget https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-3/wkhtmltox_0.12.6.1-3.jammy_amd64.debsudo apt install -y ./wkhtmltox_0.12.6.1-3.jammy_amd64.deb
4.3 Instalar Odoo
# Crear usuario odoosudo useradd -m -d /opt/odoo -U -r -s /bin/bash odoo# Clonar Odoo (misma version que el origen)sudo su - odoogit clone https://www.github.com/odoo/odoo --depth 1 --branch 18.0 /opt/odoo/odoo# Crear entorno virtual e instalar dependenciaspython3 -m venv /opt/odoo/venvsource /opt/odoo/venv/bin/activatepip install wheelpip install -r /opt/odoo/odoo/requirements.txt
4.4 Configurar PostgreSQL
# Crear usuario PostgreSQL para Odoosudo -u postgres createuser -s odoo# Opcional: Establecer passwordsudo -u postgres psql -c "ALTER USER odoo WITH PASSWORD 'tu_password_seguro';"
Version de PostgreSQL
Es importante que la version de PostgreSQL en el nuevo servidor sea igual o superior a la del servidor origen. No puedes restaurar un backup de PostgreSQL 16 en un servidor con PostgreSQL 14. Verifica versiones antes de continuar.
Paso 5: Restauracion de Datos
Importar Base de Datos y Filestore
20-90 minutos5.1 Crear Base de Datos Vacia
# Crear base de datos con mismo nombre que el origensudo -u postgres createdb -O odoo tu_base_datos# O si usas password:createdb -h localhost -U odoo tu_base_datos
5.2 Restaurar Base de Datos
# Restaurar desde formato custompg_restore -h localhost -U odoo -d tu_base_datos -v /tmp/backup_final.dump# Si hay errores de permisos, usar --no-ownerpg_restore -h localhost -U odoo -d tu_base_datos -v --no-owner /tmp/backup_final.dump# Para ver progreso en bases grandes:pg_restore -h localhost -U odoo -d tu_base_datos -v /tmp/backup_final.dump 2>&1 | tee restore.log
5.3 Restaurar Filestore
# Crear directorio de filestoresudo mkdir -p /opt/odoo/.local/share/Odoo/filestore/# Descomprimir filestorecd /opt/odoo/.local/share/Odoo/filestore/sudo tar -xzvf /tmp/filestore_backup_20260125.tar.gz# Ajustar permisossudo chown -R odoo:odoo /opt/odoo/.local/sudo chmod -R 755 /opt/odoo/.local/share/Odoo/filestore/
5.4 Copiar Modulos Personalizados
# Crear directorio para modulos customsudo mkdir -p /opt/odoo/custom-addons# Copiar desde backup o transferir directamentescp -r usuario@servidor-origen:/opt/odoo/custom-addons/* /opt/odoo/custom-addons/# Ajustar permisossudo chown -R odoo:odoo /opt/odoo/custom-addons
5.5 Configurar odoo.conf
# Crear archivo de configuracionsudo nano /etc/odoo/odoo.conf[options]admin_passwd = tu_master_password_seguradb_host = localhostdb_port = 5432db_user = odoodb_password = tu_password_postgresaddons_path = /opt/odoo/odoo/addons,/opt/odoo/custom-addonsdata_dir = /opt/odoo/.local/share/Odoologfile = /var/log/odoo/odoo.logworkers = 4max_cron_threads = 2
Verificacion Rapida
Antes de continuar con DNS, prueba que Odoo arranca correctamente:
sudo -u odoo /opt/odoo/venv/bin/python /opt/odoo/odoo/odoo-bin -c /etc/odoo/odoo.conf
Accede a http://IP-NUEVO-SERVIDOR:8069 y verifica que ves la pantalla de login.
Paso 6: Cambio de DNS
Redirigir el Dominio al Nuevo Servidor
15-60 minutos (propagacion: hasta 48h)Una vez verificado que Odoo funciona en el nuevo servidor, es momento de redirigir el trafico.
6.1 Configurar Nginx como Proxy Inverso
# Instalar nginxsudo apt install -y nginx# Crear configuracion para Odoosudo nano /etc/nginx/sites-available/odoo
# Contenido 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 www.tu-dominio.com; proxy_read_timeout 720s; proxy_connect_timeout 720s; proxy_send_timeout 720s; location / { proxy_pass http://odoo; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } location /longpolling { proxy_pass http://odoochat; }}
# Activar sitio y reiniciar nginxsudo ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/sudo nginx -tsudo systemctl restart nginx
6.2 Configurar SSL con Let's Encrypt
# Instalar certbotsudo apt install -y certbot python3-certbot-nginx# Obtener certificado SSLsudo certbot --nginx -d tu-dominio.com -d www.tu-dominio.com# Verificar renovacion automaticasudo certbot renew --dry-run
6.3 Actualizar Registros DNS
En el panel de tu registrador de dominio (GoDaddy, Cloudflare, Namecheap, etc.):
- Localiza los registros A para tu dominio
- Cambia la IP del registro A principal a la IP del nuevo servidor
- Si usas www, actualiza tambien ese registro
- Reduce el TTL a 300 segundos antes del cambio para acelerar propagacion
| Tipo | Nombre | Valor (antes) | Valor (despues) | TTL |
|---|---|---|---|---|
| A | @ | 123.45.67.89 | 98.76.54.32 | 300 |
| A | www | 123.45.67.89 | 98.76.54.32 | 300 |
Tiempo de Propagacion DNS
Los cambios DNS pueden tardar entre 15 minutos y 48 horas en propagarse globalmente. Durante este periodo, algunos usuarios veran el servidor antiguo y otros el nuevo. Mantener ambos servidores activos durante las primeras 48-72 horas.
Paso 7: Testing y Validacion
Verificar Funcionamiento Completo
30-60 minutosLa fase de testing es critica para detectar problemas antes de que afecten a usuarios en produccion.
7.1 Checklist de Validacion Basica
- Login de usuarios funciona correctamente
- Dashboard principal carga sin errores
- Imagenes y adjuntos se visualizan correctamente
- Reportes PDF se generan correctamente
- Envio de emails funciona
- Trabajos programados (cron) se ejecutan
7.2 Verificar Logs de Errores
# Revisar logs de Odootail -f /var/log/odoo/odoo.log# Filtrar solo erroresgrep -i error /var/log/odoo/odoo.log | tail -50# Revisar logs de nginxtail -f /var/log/nginx/error.log
7.3 Probar Modulos Criticos
Para cada modulo instalado, verifica al menos una operacion critica:
| Modulo | Prueba Recomendada |
|---|---|
| Ventas | Crear cotizacion, confirmar pedido, generar factura PDF |
| Compras | Crear orden de compra, recibir productos |
| Inventario | Verificar stock, realizar transferencia |
| Contabilidad | Revisar asientos, generar reporte de balance |
| CRM | Ver oportunidades, enviar email desde registro |
| Website | Verificar pagina publica, probar formulario de contacto |
7.4 Validar Integridad de Datos
# Comparar conteos de registros importantes# En servidor ORIGEN:psql -U odoo -d tu_base_datos -c "SELECT 'partners' as tabla, COUNT(*) FROM res_partner UNION ALL SELECT 'products', COUNT(*) FROM product_template UNION ALL SELECT 'invoices', COUNT(*) FROM account_move WHERE move_type IN ('out_invoice', 'in_invoice');"# Repetir en servidor DESTINO y comparar resultados
Migracion Exitosa
Si todos los tests pasan correctamente, la migracion ha sido exitosa. Mantener el servidor antiguo apagado (no eliminado) durante al menos 7 dias como backup de emergencia.
Errores Comunes y Soluciones
Estos son los problemas mas frecuentes durante migraciones de Odoo y como resolverlos:
Filestore no encontrado
Las imagenes y adjuntos no aparecen despues de restaurar.
Version PostgreSQL incompatible
Error: "pg_restore: unsupported version" al restaurar backup.
Modulo no encontrado
Odoo no arranca por falta de modulo instalado.
Permisos de directorio
Errores de escritura en logs o filestore.
SSL/HTTPS no funciona
Certificado no valido o errores de mixed content.
Emails no se envian
Error de conexion SMTP despues de migrar.
Longpolling no funciona
Chat y notificaciones en tiempo real no funcionan.
Cron jobs no ejecutan
Las acciones programadas no se disparan.
Checklist Completo de Migracion
Marca cada item completado para asegurar que no olvidas ningun paso critico: