AWS · EC2 · Odoo · Ubuntu · Nginx
Cómo instalar Odoo 18 en AWS EC2 con Ubuntu 24.04 y Nginx
Instalación de Odoo 18 en Ubuntu 24.04 sobre AWS EC2, en castellano, con una capa mínima de seguridad y operativa real.
En esta guía vamos a ver cómo instalar Odoo 18 en Ubuntu 24.04 sobre una instancia AWS EC2 siguiendo un enfoque limpio y fácil de mantener. El objetivo no es sólo que el servicio arranque, sino dejar preparada una base razonable para trabajar con dominio, HTTPS, proxy inverso y una estructura de directorios clara.
A lo largo del artículo montaremos Odoo 18 con Nginx, PostgreSQL, systemd, HTTPS y firewall, dejando el puerto 8069 sólo para uso interno y publicando la aplicación por 80/443, que es lo habitual cuando quieres exponerla con un dominio real.
Qué vas a montar
La estructura final será esta: EC2 + Ubuntu 24.04 + PostgreSQL + Odoo con usuario dedicado + Nginx + HTTPS + puerto 8069 sólo en localhost. Es una base sencilla, clara y suficientemente sólida para una primera instalación pequeña o mediana.
Qué incluye esta guía
- No expone el puerto
8069públicamente; Odoo queda detrás de Nginx. - Añade
systemd,UFW, TLS con Certbot y validaciones operativas. - Usa directorios claros para código, datos, logs y addons personalizados.
- Deja una estructura fácil de ampliar si más adelante separas base de datos, backups o monitorización.
- Incluye comprobaciones finales para validar que el servicio ha quedado realmente accesible.
Cuando Odoo ya está funcionando, el siguiente paso práctico suele ser emitir la primera factura: Cómo hacer una factura en Odoo 18 paso a paso.
1. Antes de empezar
Esta guía está pensada para quien quiere montar su primera instalación de Odoo 18 en AWS EC2 sin complicarse con una arquitectura demasiado grande desde el principio. Si tienes una instancia Ubuntu limpia, un dominio y acceso por SSH, con esto puedes dejar una instalación razonable y lista para empezar a trabajar.
Necesitas
- Una EC2 con Ubuntu 24.04 recién creada.
- Acceso SSH con permisos de
sudo. - Un dominio que puedas apuntar a la IP pública de la máquina.
Conviene tener claro
- Esta instalación sirve muy bien para empezar, probar o trabajar con un despliegue pequeño o mediano.
- Si el proyecto crece mucho, lo normal será separar base de datos, backups y observabilidad.
- El objetivo aquí es dejar una base limpia y mantenible, no una infraestructura gigante desde el primer día.
2. Arquitectura recomendada para desplegar Odoo 18 en una EC2 pequeña o mediana
Si vas a montar una primera instalación de Odoo 18 en AWS, la opción simple y razonable suele ser una EC2 con Ubuntu 24.04, PostgreSQL en la misma máquina y un Nginx frontal terminando HTTP y HTTPS. Para una empresa pequeña o una prueba seria, esto ya es suficiente si se dimensiona bien y se hacen copias de seguridad.
Lo que no tiene mucho sentido es abrir 8069 a Internet y dejar Odoo expuesto directamente. El navegador debe entrar por 80/443; el puerto interno se queda en loopback.
127.0.0.1:8069.3. Qué instancia EC2 elegir para Odoo 18 y qué puertos no debes abrir
Para una instalación estándar, lo habitual es usar una máquina con Ubuntu 24.04, un tamaño suficiente para no ir justo de memoria y un security group con SSH, HTTP y HTTPS. El puerto 8069 no debería abrirse públicamente; conviene dejarlo sólo para uso interno.
443. El 8069 es un detalle interno del servicio, no una interfaz pública. - AMI: Ubuntu Server 24.04 LTS.
- Tamaño inicial: evita
t2antiguo; hoy suele tener más sentidot3.mediumot3.largesegún carga. - Disco: 30 GB es un arranque correcto; sube más si manejas adjuntos, documentos o varias bases.
- Puertos públicos: 22, 80 y 443.
- Puerto privado: 8069 solo en localhost.
4. Cómo preparar Ubuntu 24.04 antes de instalar Odoo 18
Antes de clonar nada, deja el sistema al día e instala dependencias de compilación, PostgreSQL, Nginx y Certbot. También conviene instalar ufw desde el principio para no olvidarte del cierre de puertos.
En muchos tutoriales aparece wkhtmltopdf demasiado tarde o de forma improvisada. Para Odoo sigue siendo habitual necesitarlo por los PDFs, así que déjalo resuelto cuanto antes:
5. Usuario de servicio y PostgreSQL
El usuario odoo no debería ser un usuario humano de administración. Debe existir sólo para ejecutar el servicio y tener permisos claros sobre /opt/odoo. Lo mismo con PostgreSQL: para una instalación local sencilla basta con un rol dedicado y autenticación por socket.
6. Descargar Odoo 18, crear el entorno virtual e instalar requisitos
En este punto vamos a descargar el código, crear un entorno virtual y dejar una estructura clara dentro de /opt/odoo. Tener bien separados código, datos, logs y addons ayuda mucho cuando más adelante tengas que actualizar, revisar errores o instalar módulos propios.
Si usas Odoo Enterprise, recuerda que necesitas licencia y acceso al repositorio privado. Si vas con Community, el repositorio público oficial es suficiente.
7. Configuración de Odoo: lo mínimo para no dejarlo “de laboratorio”
El fichero /etc/odoo.conf es donde la calidad de la instalación empieza a notarse. En este ejemplo fijamos directorios, logs, workers, proxy_mode y escucha local en 127.0.0.1.
[options]
admin_passwd = CAMBIA_ESTA_CLAVE_MAESTRA
db_host = False
db_port = False
db_user = odoo
db_password = False
addons_path = /opt/odoo/src/odoo/addons,/opt/odoo/custom-addons
data_dir = /opt/odoo/data
logfile = /opt/odoo/logs/odoo.log
proxy_mode = True
xmlrpc_interface = 127.0.0.1
xmlrpc_port = 8069
workers = 4
max_cron_threads = 2
limit_memory_soft = 2147483648
limit_memory_hard = 2684354560
limit_time_cpu = 600
limit_time_real = 1200proxy_mode = Truees obligatorio si publicas detrás de Nginx.xmlrpc_interface = 127.0.0.1evita exposición pública directa.workersdepende de CPU y RAM; ajusta este número a tu tamaño real.
8. Systemd, Nginx y HTTPS: la parte que hace publicable la instalación
El servicio systemd debe arrancar solo, reiniciarse si se cae y escribir logs en journal. Nada de dejar Odoo corriendo desde una shell manual.
El fichero hay que crearlo como /etc/systemd/system/odoo18.service. Esa es la ruta habitual para un servicio propio en Ubuntu. Ábrelo con sudo, pega el contenido siguiente, guarda el archivo y luego recarga systemd para que detecte la nueva unidad.
[Unit]
Description=Odoo 18
Documentation=https://www.odoo.com/documentation/18.0/
After=network.target postgresql.service
Requires=postgresql.service
[Service]
Type=simple
User=odoo
Group=odoo
WorkingDirectory=/opt/odoo/src/odoo
ExecStart=/opt/odoo/venv/bin/python3 /opt/odoo/src/odoo/odoo-bin -c /etc/odoo.conf
Restart=always
RestartSec=5
StandardOutput=journal
StandardError=inherit
SyslogIdentifier=odoo18
[Install]
WantedBy=multi-user.targetSi todo ha quedado bien, en terminal deberías ver algo muy parecido a esto:
ubuntu@ip-172-31-29-9:/tmp$ sudo vim /etc/systemd/system/odoo18.service
ubuntu@ip-172-31-29-9:/tmp$ sudo systemctl daemon-reload
ubuntu@ip-172-31-29-9:/tmp$ sudo systemctl enable odoo18
Created symlink /etc/systemd/system/multi-user.target.wants/odoo18.service → /etc/systemd/system/odoo18.service.
ubuntu@ip-172-31-29-9:/tmp$ sudo systemctl start odoo18
ubuntu@ip-172-31-29-9:/tmp$ sudo systemctl status odoo18
● odoo18.service - Odoo 18
Loaded: loaded (/etc/systemd/system/odoo18.service; enabled; preset: enabled)
Active: active (running) since Mon 2026-04-20 08:54:50 UTC; 6s ago
Docs: https://www.odoo.com/documentation/18.0/
Main PID: 23599 (python3)
Tasks: 15 (limit: 1004)
Memory: 239.9M (peak: 240.1M)
CPU: 3.066s
CGroup: /system.slice/odoo18.service
├─23599 /opt/odoo/venv/bin/python3 /opt/odoo/src/odoo/odoo-bin -c /etc/odoo.conf
├─23602 /opt/odoo/venv/bin/python3 /opt/odoo/src/odoo/odoo-bin -c /etc/odoo.conf
├─23603 /opt/odoo/venv/bin/python3 /opt/odoo/src/odoo/odoo-bin -c /etc/odoo.conf
├─23604 /opt/odoo/venv/bin/python3 /opt/odoo/src/odoo/odoo-bin -c /etc/odoo.conf
├─23606 /opt/odoo/venv/bin/python3 /opt/odoo/src/odoo/odoo-bin -c /etc/odoo.conf
├─23607 /opt/odoo/venv/bin/python3 /opt/odoo/src/odoo/odoo-bin gevent -c /etc/odoo.conf
├─23609 /opt/odoo/venv/bin/python3 /opt/odoo/src/odoo/odoo-bin -c /etc/odoo.conf
└─23613 /opt/odoo/venv/bin/python3 /opt/odoo/src/odoo/odoo-bin -c /etc/odoo.conf
Apr 20 08:54:50 ip-172-31-29-9 systemd[1]: Started odoo18.service - Odoo 18.
ubuntu@ip-172-31-29-9:/tmp$ WorkingDirectory, ExecStart y los permisos del usuario odoo sobre /opt/odoo. Después publicamos el servicio detrás de Nginx para que el acceso externo entre por el dominio y por HTTPS, mientras Odoo sigue escuchando únicamente en localhost.
server {
listen 80;
server_name erp.midominio.com;
client_max_body_size 100m;
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
location / {
proxy_pass http://127.0.0.1:8069;
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 /web/static/ {
proxy_cache_valid 200 90m;
proxy_buffering on;
expires 10d;
proxy_pass http://127.0.0.1:8069;
}
}Prueba rápida solo con IP pública
Si solo quieres probar Odoo sin dominio, puedes publicarlo usando la IP pública de la instancia EC2. En ese caso, lo más simple es dejar HTTP en el puerto 80 y utilizar un bloque mínimo de Nginx para esa IP.
server {
listen 80;
server_name _;
client_max_body_size 100m;
proxy_read_timeout 720s;
proxy_connect_timeout 720s;
proxy_send_timeout 720s;
location / {
proxy_pass http://127.0.0.1:8069;
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 /web/static/ {
proxy_cache_valid 200 90m;
proxy_buffering on;
expires 10d;
proxy_pass http://127.0.0.1:8069;
}
}Cuando Certbot termine, toda la entrada pública irá por HTTPS. Si más adelante añades CloudFront, un balanceador o una WAF, el patrón general sigue siendo el mismo: Odoo no se expone de forma cruda.
9. Arranque, validación y pruebas mínimas después del despliegue
No conviene ejecutar todas las comprobaciones a la vez. Primero valida que Odoo arranca como servicio, después confirma que escucha en 127.0.0.1:8069 y sólo cuando Nginx y el DNS estén listos prueba el dominio público y el HTTPS.
Estos son los comandos básicos de systemctl: daemon-reload recarga las unidades, enable deja el servicio preparado para arrancar al reiniciar, start lo arranca en ese momento y status te dice si realmente está corriendo.
Cuando el servicio ya está levantado, comprueba primero la escucha local antes de meter Nginx en la ecuación:
Sólo cuando Nginx esté configurado conviene probar la entrada pública. Empieza por HTTP si el dominio ya apunta a la máquina y prueba HTTPS únicamente después de que Certbot haya terminado bien.
- Si todavía no has configurado el dominio, no esperes que
erp.midominio.comresponda. - Si aún no has ejecutado Certbot, no esperes que
https://erp.midominio.comfuncione. - Abre
https://erp.midominio.comy comprueba que carga el setup o el login. - Expón la creación de bases de datos sólo si realmente quieres ese flujo disponible.
- Revisa
/opt/odoo/logs/odoo.logyjournalctl -u odoo18. - Comprueba que el security group no deja entrar a
8069desde Internet. - Haz snapshot de EC2 antes de cambios mayores y copia externa de la base.
10. Errores típicos al instalar Odoo en AWS
- Abrir
8069en EC2 y olvidarse del proxy inverso. - Usar una instancia demasiado pequeña y culpar a Odoo cuando el problema es memoria.
- No configurar
proxy_modey sufrir redirecciones raras o URLs incorrectas. - No planificar backups de base de datos ni adjuntos.
- Instalar todo como
ubuntuorooty mezclar código con datos. - Tratar un arranque rápido como si ya fuera una instalación lista para producción.
11. Checklist final
- Dominio apuntando a la EC2 y certificado funcionando por HTTPS.
- Puerto 8069 sin exposición pública en el security group.
- Odoo arrancando con systemd y reinicio automático activo.
- Backups de base y adjuntos definidos antes de meter usuarios reales.
- Logs y snapshot disponibles antes de tocar addons o upgrades.
12. Preguntas frecuentes sobre Odoo 18 en AWS EC2 y Ubuntu 24.04
¿Se puede instalar Odoo 18 en Ubuntu 24.04?
Sí. Ubuntu 24.04 es una base totalmente válida para desplegar Odoo 18 en una EC2, siempre que cuides las dependencias, el entorno virtual, PostgreSQL y el proxy inverso.
¿Hace falta Nginx para Odoo en AWS?
Si vas a publicar el ERP con dominio y HTTPS, sí tiene mucho sentido. Nginx permite terminar TLS, enviar los headers correctos y evitar que Odoo quede expuesto directamente en 8069.
¿Qué puertos abrir para Odoo 18 en una instancia EC2?
En la práctica, 22 para administración, 80 para validación y redirección, y 443 para acceso final. El 8069 debería quedarse sólo en localhost.
¿Es suficiente una sola EC2 para Odoo?
Para una primera instalación pequeña o mediana, sí. Cuando el uso crece, lo normal es separar base de datos, backups, observabilidad y quizá añadir balanceo.
Conclusión
Instalar Odoo 18 en AWS EC2 con Ubuntu 24.04 no es especialmente complicado si mantienes una estructura ordenada desde el principio. La clave está en separar bien cada pieza: sistema, base de datos, servicio, proxy inverso y validación final.
Con esta base ya puedes publicar una primera instalación de forma limpia y seguir creciendo después. Si más adelante el proyecto aumenta de tamaño, el siguiente paso lógico será separar PostgreSQL, automatizar backups y definir un proceso claro para actualizaciones y despliegues.