Instalación y Configuración de Odoo con Docker
Este curso utiliza Odoo 20 Community, PostgreSQL 16 y Docker Compose v2. Para instalar desde código fuente necesitas Python 3.12 o posterior. No mezcles addons de otras versiones mayores con este entorno.
Si vienes del entorno Odoo 17 del curso anterior, crea un proyecto y volúmenes nuevos: no basta con cambiar la etiqueta de imagen para migrar una base existente. Define COMPOSE_PROJECT_NAME=curso-odoo20 en el .env local para separar este entorno del anterior. Las migraciones de datos entre versiones mayores requieren su propio proceso.
1. Preparar las carpetas y la configuración #
Crea extra-addons y config en tu espacio de trabajo:
1mkdir -p extra-addons config
Fichero config/odoo.conf:
1[options] 2admin_passwd = REEMPLAZA_POR_TU_CLAVE_MAESTRA_LOCAL 3addons_path = /mnt/extra-addons 4data_dir = /var/lib/odoo 5http_interface = 0.0.0.0
Antes de arrancar, sustituye el marcador REEMPLAZA_POR_TU_CLAVE_MAESTRA_LOCAL por una clave propia en este archivo privado, que debes excluir de Git. El montaje sustituye la configuración de la imagen: por eso hay que crear el archivo antes de arrancar. Las credenciales PostgreSQL se pasan mediante variables del contenedor. La contraseña maestra del gestor de bases es admin_passwd; no es la contraseña PostgreSQL ni la del usuario administrador de la aplicación. Al montar la configuración como solo lectura, cambia la clave en el archivo local y reinicia, no dependas de que el gestor web la guarde.
Fichero compose.yaml:
1services: 2 web: 3 image: odoo:20.0 4 depends_on: 5 db: 6 condition: service_healthy 7 ports: 8 - "127.0.0.1:8069:8069" 9 environment: 10 HOST: db 11 USER: odoo 12 PASSWORD: ${ODOO_DB_PASSWORD:?Define ODOO_DB_PASSWORD} 13 volumes: 14 - odoo-web-data:/var/lib/odoo 15 - ./config/odoo.conf:/etc/odoo/odoo.conf:ro 16 - ./extra-addons:/mnt/extra-addons 17 db: 18 image: postgres:16 19 environment: 20 POSTGRES_DB: postgres 21 POSTGRES_USER: odoo 22 POSTGRES_PASSWORD: ${ODOO_DB_PASSWORD:?Define ODOO_DB_PASSWORD} 23 healthcheck: 24 test: ["CMD-SHELL", "pg_isready -U odoo -d postgres"] 25 interval: 5s 26 timeout: 5s 27 retries: 12 28 volumes: 29 - odoo-db-data:/var/lib/postgresql/data 30volumes: 31 odoo-web-data: 32 odoo-db-data:
Define ODOO_DB_PASSWORD en un .env local excluido de Git, con un valor propio. Arranca y abre localhost:8069 para crear la base de desarrollo curso_odoo:
1docker compose up -d 2docker compose logs -f web
2. Crear, reiniciar y actualizar #
Usa el nombre de servicio web, independiente del nombre que Docker asigne al contenedor:
1docker compose exec web odoo scaffold biblioteca /mnt/extra-addons 2docker compose exec web bash 3docker compose restart web
El scaffold incluye ejemplos que debes sustituir por los del curso. Un bind mount hace visibles los archivos, pero no recarga automáticamente Python ni actualiza los XML de la base. Reinicia Python y actualiza el módulo cuando cambien campos, vistas, datos o permisos.
Para instalar por primera vez desde CLI, detén el servidor web y utiliza un contenedor temporal con la misma configuración:
1docker compose stop web 2docker compose run --rm web odoo -d curso_odoo -i biblioteca --stop-after-init --no-http 3docker compose up -d web
Para actualizar un módulo ya instalado, sustituye -i por -u:
1docker compose stop web 2docker compose run --rm web odoo -d curso_odoo -u biblioteca --stop-after-init --no-http 3docker compose up -d web
También puedes actualizar desde Apps en modo desarrollador. Reiniciar, actualizar la lista de aplicaciones y actualizar un módulo son operaciones distintas. Trabaja siempre sobre una base de desarrollo y conserva sus volúmenes.