Qué vas a tener al final
- Odoo 19 Community instalado como servicio desde el repositorio oficial, con actualizaciones por
apt. - Acceso por https:// con Nginx como proxy inverso y certificado de Let's Encrypt que se renueva solo.
- Modo multiproceso (workers) con el chat y las notificaciones funcionando por websocket.
- Gestor de bases de datos protegido y respaldos de la base y del filestore.
Requisitos previos
- Un servidor con Ubuntu 24.04 LTS recién instalado: es la versión que soporta oficialmente el paquete de Odoo 19. Para pruebas o una empresa pequeña, 2 vCPU y 4 GB de RAM son un punto de partida razonable.
- Un usuario con
sudoy acceso por SSH. - Un subdominio, por ejemplo
erp.tuempresa.com, con un registro A que apunte a la IP del servidor. Sin esto no podrás obtener el certificado SSL. - Los puertos 80 y 443 abiertos hacia el servidor.
En todos los comandos, cambia erp.tuempresa.com por tu dominio real.
1. Actualiza el servidor
sudo apt update && sudo apt upgrade -y
sudo timedatectl set-timezone America/Santo_Domingo
La zona horaria del servidor no afecta a los usuarios (Odoo usa la de cada uno), pero sí a los registros y a las tareas programadas del sistema, así que conviene dejarla bien desde el principio.
2. Instala PostgreSQL
El paquete de Odoo espera un PostgreSQL en el mismo servidor. Ubuntu 24.04 trae PostgreSQL 16, compatible con Odoo 19:
sudo apt install postgresql -y
No hace falta crear el usuario de la base de datos: el paquete de Odoo lo crea al instalarse.
3. Instala wkhtmltopdf (la versión correcta)
Odoo genera los PDF (facturas, cotizaciones, órdenes de compra) con wkhtmltopdf. La versión de los repositorios de Ubuntu no trae el Qt parcheado y los PDF salen sin encabezado ni pie de página. Odoo recomienda la 0.12.6 parcheada; en Ubuntu 24.04 se usa el paquete publicado para 22.04 (jammy):
sudo apt install -y xfonts-75dpi xfonts-base fontconfig
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
wkhtmltopdf --version # debe decir: wkhtmltopdf 0.12.6.1 (with patched qt)
4. Instala Odoo 19 desde el repositorio oficial
Odoo S.A. publica un repositorio para la edición Community. Estos son los comandos de la documentación oficial, con la rama 19.0:
wget -q -O - https://nightly.odoo.com/odoo.key | sudo gpg --dearmor -o /usr/share/keyrings/odoo-archive-keyring.gpg
echo 'deb [signed-by=/usr/share/keyrings/odoo-archive-keyring.gpg] https://nightly.odoo.com/19.0/nightly/deb/ ./' | sudo tee /etc/apt/sources.list.d/odoo.list
sudo apt-get update && sudo apt-get install odoo -y
sudo systemctl status odoo
El paquete deja Odoo funcionando como servicio odoo, con la configuración en /etc/odoo/odoo.conf, el registro en /var/log/odoo/odoo-server.log y los datos del usuario odoo en /var/lib/odoo. A partir de ahora, un apt upgrade también actualiza Odoo con los últimos parches de la versión 19.
No hay repositorio para Enterprise. Si tienes suscripción, descarga el paquete .deb desde la página de descargas de Odoo y lo instalas con sudo apt install ./archivo.deb; el resto de esta guía es igual.
5. Configura Odoo para producción
Edita el archivo de configuración:
sudo nano /etc/odoo/odoo.conf
Y déjalo así, cambiando la contraseña maestra:
[options]
; contraseña maestra del gestor de bases de datos: larga y única
admin_passwd = CAMBIA-ESTA-CLAVE-LARGA-Y-UNICA
db_host = False
db_port = False
db_user = odoo
db_password = False
; Odoo solo escucha en local: el acceso público entra por Nginx
http_interface = 127.0.0.1
proxy_mode = True
; modo multiproceso (ajusta workers a tu servidor)
workers = 5
max_cron_threads = 1
limit_memory_soft = 629145600
limit_memory_hard = 1677721600
limit_time_cpu = 600
limit_time_real = 1200
limit_request = 8192
¿Cuántos workers?
La documentación de Odoo da dos reglas: el máximo teórico es (núcleos × 2) + 1 y cada worker atiende unos 6 usuarios concurrentes. Con 2 vCPU, el máximo es 5 workers, suficiente para unos 30 usuarios conectados a la vez. En memoria, calcula alrededor de 150 MB por worker en peticiones normales y hasta 1 GB en las pesadas (reportes, importaciones). Con workers mayor que 0, Odoo arranca además un proceso para el chat y las notificaciones en el puerto 8072.
sudo systemctl restart odoo
sudo tail -n 30 /var/log/odoo/odoo-server.log
6. Nginx como proxy inverso y certificado SSL
sudo apt install -y nginx certbot python3-certbot-nginx
sudo nano /etc/nginx/sites-available/odoo
Pega esta configuración, basada en el ejemplo oficial de Odoo 19:
upstream odoo {
server 127.0.0.1:8069;
}
upstream odoochat {
server 127.0.0.1:8072;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 80;
server_name erp.tuempresa.com;
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
client_max_body_size 64m;
access_log /var/log/nginx/odoo.access.log;
error_log /var/log/nginx/odoo.error.log;
# chat y notificaciones en tiempo real
location /websocket {
proxy_pass http://odoochat;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header X-Forwarded-Host $http_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;
}
location / {
proxy_set_header X-Forwarded-Host $http_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;
proxy_redirect off;
proxy_pass http://odoo;
}
gzip on;
gzip_types text/css text/scss text/plain text/xml application/xml application/json application/javascript;
}
Actívala, comprueba la sintaxis y pide el certificado. Certbot añade el bloque HTTPS y la redirección de HTTP a HTTPS por ti:
sudo ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/odoo
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d erp.tuempresa.com --redirect -m tu@correo.com --agree-tos
El certificado dura 90 días y certbot deja programada la renovación automática. Puedes probarla con sudo certbot renew --dry-run.
7. Cierra el firewall
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status
Como Odoo solo escucha en 127.0.0.1, los puertos 8069 y 8072 no quedan expuestos a internet aunque alguien los intente abrir desde fuera.
8. Crea la base de datos y protege el gestor
Entra a https://erp.tuempresa.com. Odoo te pedirá la contraseña maestra (la de admin_passwd), el nombre de la base de datos, el correo y la contraseña del administrador, el idioma y el país. Si eliges República Dominicana, Odoo propone la localización contable del país.
Cuando la base de datos esté creada, oculta el gestor para que nadie pueda listar, copiar o borrar bases desde el navegador. Añade al final de /etc/odoo/odoo.conf:
list_db = False
dbfilter = ^nombre_de_tu_base$
sudo systemctl restart odoo
9. Respaldos: base de datos y filestore
Un respaldo de Odoo tiene dos partes: la base de datos de PostgreSQL y el filestore, la carpeta donde Odoo guarda los adjuntos (PDF, imágenes, documentos). Si solo respaldas la base, pierdes los archivos. Como root (sudo -i):
mkdir -p /backup
BD=nombre_de_tu_base
sudo -u postgres pg_dump -Fc "$BD" > /backup/${BD}_$(date +%F).dump
tar czf /backup/${BD}_filestore_$(date +%F).tgz -C /var/lib/odoo/.local/share/Odoo/filestore "$BD"
Programa estos comandos con cron, guarda una copia fuera del servidor y, sobre todo, prueba a restaurarla de vez en cuando. Un respaldo que nunca se ha restaurado no es un respaldo.
Problemas comunes y cómo resolverlos
- Los PDF salen sin encabezado ni pie de página: wkhtmltopdf no es la versión parcheada. Repite el paso 3.
- El chat o las notificaciones no se actualizan: falta el bloque
location /websocketen Nginx oworkersestá en 0. - Los enlaces salen con http:// o con la IP interna: falta
proxy_mode = Trueo las cabecerasX-Forwarded-*. - Error 413 al subir un archivo o importar datos: sube
client_max_body_sizeen Nginx. - Odoo no arranca después de un cambio: revisa el registro con
sudo tail -f /var/log/odoo/odoo-server.log; casi siempre es un error de escritura enodoo.conf.
¿Prefieres que lo deje montado y documentado en tu servidor, con respaldos y monitoreo?
Escríbeme ↗Preguntas frecuentes
¿Odoo 19 Community es gratis?
Sí. Odoo Community es software libre con licencia LGPL: no pagas licencia. Pagas el servidor, la implementación y el soporte que necesites. La edición Enterprise sí requiere una suscripción anual por usuario.
¿Puedo instalar Odoo 19 en Ubuntu 22.04?
El paquete oficial de Odoo 19 soporta Ubuntu 24.04 LTS. En 22.04 tendrías que instalar desde el código fuente y resolver tú las dependencias de Python. Para un servidor nuevo, usa 24.04.
¿Es mejor instalar Odoo con Docker?
Docker es muy cómodo para tener varias versiones o entornos de prueba en el mismo servidor. Para una sola instancia de producción, el paquete oficial es más sencillo de mantener. Enseño ambos métodos en mi curso de Odoo técnico para implementadores.
¿Cuánta RAM necesita Odoo?
Depende de los usuarios concurrentes y de los workers. Con la fórmula de Odoo, 9 workers necesitan unos 3 GB solo para Odoo, más lo que use PostgreSQL. Para una empresa pequeña, 4 GB en total suele alcanzar para empezar; mide la carga y crece cuando haga falta.
Fuentes
- Odoo 19: instaladores empaquetados (documentación oficial).
- Odoo 19: despliegue en producción, workers y Nginx (documentación oficial).
- wkhtmltopdf 0.12.6.1-3 (paquetes oficiales).