Por qué autoalojar Odoo Community
La versión SaaS de Odoo, comercializada a través de Odoo.sh o mediante socios, cobra por usuario y por módulo activado. Para una pyme de 10 personas que use cinco módulos, la factura mensual supera rápidamente varios cientos de euros. Un VPS desde 99 DH/mes es suficiente para ejecutar la misma instancia, sin ninguna restricción en el número de usuarios o módulos Community.
El control de los datos es el otro argumento de peso. Con una instancia autoalojada, la base de datos PostgreSQL permanece en tu servidor, en el datacenter que elijas. Ningún tercero accede a tus clientes, presupuestos, facturas ni datos de RRHH. Para empresas sujetas a requisitos de cumplimiento — sector médico, jurídico, fintech — este control no es opcional.
Finalmente, la personalización es ilimitada. Odoo Community permite instalar cualquier módulo de la comunidad o desarrollado internamente, sin restricciones del editor.
Qué incluye Odoo 17 Community
- CRM: pipeline de ventas, leads, actividades y seguimiento de clientes
- Ventas: presupuestos, pedidos de compra, precios y condiciones de pago
- Contabilidad: plan de cuentas, diarios, conciliación bancaria, IVA
- Facturación: facturas de clientes y proveedores, recordatorios automáticos, pagos
- Inventario: gestión de stock, ubicaciones, reglas de reaprovisionamiento
- Compras: solicitudes de compra, peticiones de oferta y seguimiento de proveedores
- Recursos Humanos: empleados, contratos, ausencias y asistencia
- Email Marketing: listas de correo, campañas y estadísticas de envío
- Sitio web y e-commerce: constructor de páginas, tienda online integrada
- Helpdesk: ticketing de clientes, SLA y portal de autoservicio
Diferencias entre Community y Enterprise
Desplace la tabla
| Funcionalidad | Community | Enterprise | Alternativa open-source |
|---|---|---|---|
| Contabilidad avanzada (informes analíticos) | Básica | Completa | Módulo OCA `account-financial-reporting` |
| Firma electrónica | No incluida | Incluida | Módulo `sign` comunidad o Docusign |
| Hojas de asistencia avanzadas | No incluida | Incluida | Módulo OCA `hr-attendance` |
| Soporte oficial del editor | Foro comunidad | SLA garantizado | Partner Odoo certificado |
| Actualizaciones automáticas (Odoo.sh) | No aplica | Incluidas | Script de migración manual |
| Número de usuarios | Ilimitado | Ilimitado (licenciado) | Sin restricciones |
| Precio (autoalojado) | Gratuito | Gratuito si es autoalojado * | Gratuito |
Requisitos del VPS para alojar Odoo 17
Odoo es una aplicación Python/PostgreSQL que consume bastante RAM, especialmente cuando varios usuarios trabajan simultáneamente. El dimensionamiento mínimo recomendado para una pyme de 5 a 15 usuarios:
- CPU: mínimo 4 vCPU; Odoo es multiproceso y aprovecha el paralelismo
- RAM: 8 GB recomendados (4 GB funcionan para pruebas, insuficientes en producción)
- Almacenamiento: 40 GB SSD NVMe; planifica más si activas e-commerce con medios
- SO: Ubuntu 22.04 LTS o Debian 12
- Docker Engine 24+ y Docker Compose v2
- Un nombre de dominio apuntando a la IP del VPS
- Un proxy inverso (Caddy o Nginx) para gestionar TLS
Un VPS 299 DH/mes en ServOrbit.com cubre ampliamente estos requisitos.
Instalar Odoo 17 con Docker Compose
Crear la estructura de directorios
Conéctate por SSH a tu VPS y crea el árbol de trabajo:
mkdir -p /opt/odoo/{data,addons,config,backups} cd /opt/odooEstas carpetas albergarán los datos persistentes, módulos personalizados, configuración de Odoo y copias de seguridad respectivamente.
Redactar el archivo docker-compose.yml
Crea
/opt/odoo/docker-compose.ymlcon el siguiente contenido:services: db: image: postgres:16 restart: unless-stopped environment: POSTGRES_DB: postgres POSTGRES_USER: odoo POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - ./data/postgres:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U odoo"] interval: 10s retries: 5 odoo: image: odoo:17.0 restart: unless-stopped depends_on: db: condition: service_healthy environment: HOST: db USER: odoo PASSWORD: ${POSTGRES_PASSWORD} volumes: - ./data/odoo:/var/lib/odoo - ./addons:/mnt/extra-addons - ./config/odoo.conf:/etc/odoo/odoo.conf ports: - "127.0.0.1:8069:8069" - "127.0.0.1:8072:8072"Crear el archivo .env y la configuración de Odoo
Crea
/opt/odoo/.env:POSTGRES_PASSWORD=$(openssl rand -hex 32) echo "POSTGRES_PASSWORD=${POSTGRES_PASSWORD}" > /opt/odoo/.envLuego crea
/opt/odoo/config/odoo.conf:[options] db_host = db db_port = 5432 db_user = odoo db_password = ${POSTGRES_PASSWORD} addons_path = /usr/lib/python3/dist-packages/odoo/addons,/mnt/extra-addons admin_passwd = REEMPLAZAR_CON_CONTRASEÑA_FUERTE without_demo = all workers = 4 max_cron_threads = 2 limit_memory_hard = 2684354560 limit_memory_soft = 2147483648Configurar el proxy inverso con Caddy
Caddy es la opción más sencilla: gestiona TLS automáticamente mediante Let's Encrypt. Instálalo y crea
/etc/caddy/Caddyfile:odoo.tudominio.com { reverse_proxy 127.0.0.1:8069 handle /websocket { reverse_proxy 127.0.0.1:8072 } header { X-Frame-Options SAMEORIGIN X-Content-Type-Options nosniff Strict-Transport-Security "max-age=31536000; includeSubDomains" } encode gzip }Recarga Caddy:
systemctl reload caddy.Iniciar los contenedores
Desde
/opt/odoo, ejecuta:docker compose up -dSigue los logs de arranque:
docker compose logs -f odooOdoo tarda 30 a 60 segundos en inicializarse. Verás
HTTP service (werkzeug) runningcuando esté listo.Acceder a la interfaz y crear la base de datos
Abre
https://odoo.tudominio.com/web/database/manageren tu navegador. Introduce la contraseña maestra (admin_passwd) definida enodoo.conf, elige un nombre de base de datos, idioma y correo de administrador, luego haz clic en Crear. La primera inicialización tarda de 2 a 5 minutos según los módulos seleccionados.
Configurar la base de datos y la instancia
Tras la creación de la base de datos, Odoo te redirige a la interfaz principal. Lo primero que hay que hacer es verificar la contraseña maestra en Ajustes > Técnico > Contraseña maestra. Esta contraseña protege el acceso al gestor de bases de datos — debe ser larga y única.
En Ajustes > General, configura el nombre de la empresa, la moneda base, la zona horaria y la dirección. Estos parámetros influyen en los documentos generados (facturas, pedidos de compra).
Configurar las copias de seguridad automáticas
Una instancia Odoo en producción sin copias de seguridad es una deuda técnica inmediata. La estrategia recomendada se basa en dos niveles.
Volcado diario de PostgreSQL con un script cron:
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR=/opt/odoo/backups
DB_NAME=tu_base_de_datos
docker compose -f /opt/odoo/docker-compose.yml exec -T db \
pg_dump -U odoo ${DB_NAME} | gzip > ${BACKUP_DIR}/odoo_${DATE}.sql.gz
# Conservar 7 días
find ${BACKUP_DIR} -name "odoo_*.sql.gz" -mtime +7 -deletePlanifica este script en /etc/cron.d/odoo-backup para ejecutarse a las 02:00 cada noche.
Copia de seguridad de volúmenes: la carpeta /opt/odoo/data/odoo contiene adjuntos, imágenes y archivos subidos. Sincronízala diariamente con almacenamiento de objetos usando rclone o restic.
Activar los módulos clave tras la instalación
- Ventas (
sale_management): presupuestos, pedidos, portal de clientes - Contabilidad (
account_accountant): plan de cuentas, IVA, conciliación bancaria - Inventario (
stock): gestión multialmacén, lotes y números de serie - Compras (
purchase): solicitudes de compra, licitaciones, facturación a proveedores - Recursos Humanos (
hr): ficha de empleado, estructura organizativa, documentos RRHH - Helpdesk (
helpdesk): ticketing, SLA, portal de autoservicio del cliente - Sitio web (
website): constructor de páginas, blog, formularios de contacto - E-Commerce (
website_sale): tienda online, carrito, pago
Optimizar el rendimiento de tu instancia
Ajustar el número de workers
En
odoo.conf, el parámetroworkerscontrola el número de procesos Python que gestionan las solicitudes HTTP. La regla práctica:workers = (vCPU × 2) + 1. En un VPS de 4 vCPU, fijaworkers = 4.Configurar los límites de memoria
Odoo mata los workers que superan los límites definidos para evitar fugas de memoria.
limit_memory_soft = 2147483648 # 2 GB: señal de fin gracioso limit_memory_hard = 2684354560 # 2,5 GB: kill inmediatoLimitar los crons para no saturar la CPU
El parámetro
max_cron_threads = 2reserva 2 hilos para tareas planificadas. Más allá, los crons compiten con los workers HTTP. En un servidor dedicado a Odoo, puedes subir a 4, pero empieza de forma conservadora.Activar el almacenamiento de sesiones Redis (opcional)
Por defecto, Odoo almacena las sesiones en disco. Añade un servicio Redis a
docker-compose.ymly configura:session_store = redis redis_url = redis://redis:6379
Asegurar la instancia Odoo en producción
La seguridad de una instancia Odoo se basa en varias capas complementarias.
Desactivar el gestor de bases de datos en producción es la medida más importante. Añade en odoo.conf:
dbfilter = ^tu_base$
list_db = Falselist_db = False oculta la interfaz de gestión e impide la enumeración de bases de datos.
Forzar TLS: Caddy lo gestiona de forma nativa.
Fail2ban: configura una jaula para intentos de inicio de sesión fallidos en /web/login.
Contraseña maestra robusta: esta contraseña debe tener al menos 32 caracteres alfanuméricos generados aleatoriamente.
Consejo avanzado: integrar módulos personalizados
La carpeta /opt/odoo/addons está montada en el contenedor en /mnt/extra-addons. Para instalar un módulo de la comunidad (OCA o desarrollado internamente), colócalo en esta carpeta y añade la ruta a addons_path en odoo.conf.
Tras añadir un módulo, reinicia Odoo (docker compose restart odoo), luego ve a Ajustes > Aplicaciones > Actualizar lista de aplicaciones. El módulo aparece en la lista y se instala como cualquier módulo nativo.
Comparativa de alojamiento: VPS autoalojado vs Odoo SaaS
Desplace la tabla
| Criterio | VPS autoalojado (ServOrbit.com) | Odoo.sh / SaaS socio |
|---|---|---|
| Coste mensual (10 usuarios) | Desde 99 DH/mes | 150 a 500 € según módulos |
| Control de datos | Total — datos en tu servidor | Datos con el editor o el socio |
| Módulos Community | Todos disponibles, sin restricciones | Depende del plan y el socio |
| Módulos Enterprise | No incluidos (licencia separada) | Incluidos en la suscripción |
| Copias de seguridad | A tu cargo, configurables | Gestionadas por la plataforma |
| Actualizaciones | Manuales (migración mayor) | Gestionadas (actualización asistida) |
| Personalización | Ilimitada | Restringida o facturable |
| Habilidades requeridas | Administración Linux, Docker | Sin necesidad de conocimientos de servidor |
| Soporte técnico | Comunidad + socio a elección | SLA según contrato con el editor |