configuraciones instancia efimera odoo 18
This commit is contained in:
parent
f9a3e3e7f2
commit
38365e6e41
11
.env
Normal file
11
.env
Normal file
|
@ -0,0 +1,11 @@
|
|||
# Variables de entorno para el entorno de Docker de Odoo
|
||||
|
||||
# PostgreSQL
|
||||
POSTGRES_DB=postgres
|
||||
POSTGRES_USER=odoo
|
||||
POSTGRES_PASSWORD=supersegura
|
||||
|
||||
# Odoo
|
||||
ODOO_DB_NAME=lims_demo
|
||||
ODOO_MASTER_PASSWORD=admin
|
||||
ODOO_WEB_PORT=8069
|
17
Dockerfile
Normal file
17
Dockerfile
Normal file
|
@ -0,0 +1,17 @@
|
|||
# Usa la imagen oficial de Odoo 18
|
||||
FROM odoo:18.0
|
||||
|
||||
# Establece la variable de entorno para el archivo de configuración
|
||||
ENV ODOO_RC /etc/odoo/odoo.conf
|
||||
|
||||
# Copia el archivo de configuración de Odoo al contenedor
|
||||
COPY odoo.conf /etc/odoo/odoo.conf
|
||||
|
||||
# Opcional: Cambia los permisos del archivo de configuración
|
||||
USER root
|
||||
RUN chown odoo:odoo /etc/odoo/odoo.conf
|
||||
USER odoo
|
||||
|
||||
# El CMD por defecto de la imagen de Odoo usará ODOO_RC
|
||||
# y los parámetros del docker-compose para iniciar.
|
||||
# No es necesario sobreescribir el CMD si pasamos las variables correctas.
|
63
docker-compose.yml
Normal file
63
docker-compose.yml
Normal file
|
@ -0,0 +1,63 @@
|
|||
|
||||
services:
|
||||
# ────────────────────────────────────────────
|
||||
# PostgreSQL
|
||||
# ────────────────────────────────────────────
|
||||
db:
|
||||
image: postgres:15
|
||||
container_name: lims_db
|
||||
environment:
|
||||
POSTGRES_DB: postgres # BD catálogo
|
||||
POSTGRES_USER: odoo # rol que usará Odoo
|
||||
POSTGRES_PASSWORD: supersegura # contraseña del rol
|
||||
volumes:
|
||||
- db_data:/var/lib/postgresql/data
|
||||
restart: unless-stopped
|
||||
|
||||
# ────────────────────────────────────────────
|
||||
# Job de inicialización (se ejecuta una vez)
|
||||
# ────────────────────────────────────────────
|
||||
odoo_init:
|
||||
image: odoo:18.0
|
||||
depends_on: [db]
|
||||
volumes:
|
||||
- ./lims_management:/mnt/extra-addons/lims_management
|
||||
- ./odoo.conf:/etc/odoo/odoo.conf
|
||||
- ./init_odoo.py:/app/init_odoo.py
|
||||
command: ["/usr/bin/python3", "/app/init_odoo.py"]
|
||||
environment:
|
||||
HOST: db
|
||||
PORT: "5432"
|
||||
USER: odoo
|
||||
PASSWORD: supersegura
|
||||
restart: "no"
|
||||
|
||||
|
||||
# ────────────────────────────────────────────
|
||||
# Odoo (servicio de larga vida)
|
||||
# ────────────────────────────────────────────
|
||||
odoo:
|
||||
image: odoo:18.0
|
||||
container_name: lims_odoo
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_started
|
||||
odoo_init:
|
||||
condition: service_completed_successfully
|
||||
environment:
|
||||
HOST: db
|
||||
PORT: "5432"
|
||||
USER: odoo
|
||||
PASSWORD: supersegura
|
||||
MASTER_PASSWORD: admin123
|
||||
command: ["/usr/bin/python3", "/app/wait_and_start_odoo.py"]
|
||||
ports:
|
||||
- "8069:8069"
|
||||
volumes:
|
||||
- ./lims_management:/mnt/extra-addons/lims_management
|
||||
- ./odoo.conf:/etc/odoo/odoo.conf
|
||||
- ./wait_and_start_odoo.py:/app/wait_and_start_odoo.py
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
db_data: {}
|
68
init_odoo.py
Normal file
68
init_odoo.py
Normal file
|
@ -0,0 +1,68 @@
|
|||
import socket
|
||||
import time
|
||||
import subprocess
|
||||
import sys
|
||||
import os
|
||||
|
||||
# --- Configuración ---
|
||||
DB_HOST = os.environ.get("HOST", "db")
|
||||
DB_PORT = int(os.environ.get("PORT", 5432))
|
||||
ODOO_CONF = "/etc/odoo/odoo.conf"
|
||||
DB_NAME = "lims_demo"
|
||||
MODULES_TO_INSTALL = "base,sale_management,stock,account,lims_management"
|
||||
|
||||
# --- Lógica de espera de PostgreSQL ---
|
||||
print(f"Esperando a PostgreSQL en {DB_HOST}:{DB_PORT}...")
|
||||
sys.stdout.flush()
|
||||
|
||||
while True:
|
||||
try:
|
||||
with socket.create_connection((DB_HOST, DB_PORT), timeout=2):
|
||||
print("PostgreSQL está listo.")
|
||||
sys.stdout.flush()
|
||||
break
|
||||
except (socket.timeout, ConnectionRefusedError, OSError) as e:
|
||||
print(f"PostgreSQL no está listo todavía ({e}), esperando...")
|
||||
sys.stdout.flush()
|
||||
time.sleep(2)
|
||||
|
||||
# --- Lógica de inicialización de Odoo ---
|
||||
print(f"Creando base de datos '{DB_NAME}' e instalando módulos...")
|
||||
sys.stdout.flush()
|
||||
|
||||
odoo_command = [
|
||||
"odoo",
|
||||
"-c", ODOO_CONF,
|
||||
"-d", DB_NAME,
|
||||
"-i", MODULES_TO_INSTALL,
|
||||
"--stop-after-init"
|
||||
]
|
||||
|
||||
# Usamos subprocess.run para tener mejor control sobre la salida
|
||||
try:
|
||||
result = subprocess.run(
|
||||
odoo_command,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
check=False
|
||||
)
|
||||
|
||||
print("--- Odoo stdout ---")
|
||||
print(result.stdout)
|
||||
print("--- Odoo stderr ---")
|
||||
print(result.stderr)
|
||||
sys.stdout.flush()
|
||||
|
||||
if result.returncode != 0:
|
||||
print(f"Odoo falló con código de salida {result.returncode}")
|
||||
sys.exit(result.returncode)
|
||||
|
||||
print("Inicialización de Odoo completada exitosamente.")
|
||||
sys.exit(0)
|
||||
|
||||
except FileNotFoundError:
|
||||
print("Error: El comando 'odoo' no se encontró. Asegúrate de que la imagen del contenedor es correcta y odoo está en el PATH.")
|
||||
sys.exit(1)
|
||||
except Exception as e:
|
||||
print(f"Ocurrió un error inesperado al ejecutar Odoo: {e}")
|
||||
sys.exit(1)
|
BIN
lims_management/__pycache__/__init__.cpython-312.pyc
Normal file
BIN
lims_management/__pycache__/__init__.cpython-312.pyc
Normal file
Binary file not shown.
BIN
lims_management/models/__pycache__/__init__.cpython-312.pyc
Normal file
BIN
lims_management/models/__pycache__/__init__.cpython-312.pyc
Normal file
Binary file not shown.
10
odoo.conf
Normal file
10
odoo.conf
Normal file
|
@ -0,0 +1,10 @@
|
|||
[options]
|
||||
admin_passwd = admin123
|
||||
db_host = db
|
||||
db_port = 5432
|
||||
db_user = odoo
|
||||
db_password = supersegura
|
||||
addons_path = /mnt/extra-addons,/usr/lib/python3/dist-packages/odoo/addons
|
||||
demo = True
|
||||
dbfilter = ^lims_demo$
|
||||
log_level = info
|
46
wait_and_start_odoo.py
Normal file
46
wait_and_start_odoo.py
Normal file
|
@ -0,0 +1,46 @@
|
|||
import socket
|
||||
import time
|
||||
import os
|
||||
import sys
|
||||
|
||||
# --- Configuración de la base de datos (leída desde el entorno) ---
|
||||
DB_HOST = os.environ.get("HOST", "db")
|
||||
DB_PORT = int(os.environ.get("PORT", 5432))
|
||||
|
||||
# --- Lógica de espera de PostgreSQL ---
|
||||
print(f"Servicio Odoo: Esperando a PostgreSQL en {DB_HOST}:{DB_PORT}...")
|
||||
sys.stdout.flush()
|
||||
|
||||
# Usamos un bucle para intentar la conexión hasta que tenga éxito
|
||||
while True:
|
||||
try:
|
||||
# Intenta crear una conexión de socket
|
||||
with socket.create_connection((DB_HOST, DB_PORT), timeout=5):
|
||||
print("Servicio Odoo: PostgreSQL está listo y aceptando conexiones.")
|
||||
sys.stdout.flush()
|
||||
break # Sale del bucle si la conexión es exitosa
|
||||
except (socket.timeout, ConnectionRefusedError, OSError) as e:
|
||||
print(f"Servicio Odoo: PostgreSQL no está listo todavía ({e}). Reintentando en 2 segundos...")
|
||||
sys.stdout.flush()
|
||||
time.sleep(2)
|
||||
|
||||
# --- Iniciar Odoo ---
|
||||
print("Servicio Odoo: PostgreSQL listo. Iniciando Odoo...")
|
||||
sys.stdout.flush()
|
||||
|
||||
# Argumentos para Odoo. Odoo leerá la configuración principal
|
||||
# desde /etc/odoo/odoo.conf y las variables de entorno.
|
||||
# El db-filter se pasa como argumento explícito.
|
||||
odoo_args = ["odoo", "--db-filter=^lims_demo$"]
|
||||
|
||||
# Reemplaza el proceso actual con Odoo.
|
||||
# Esto es crucial para que Odoo sea el proceso principal (PID 1)
|
||||
# y reciba las señales del sistema (ej. para detenerse).
|
||||
try:
|
||||
os.execvp("odoo", odoo_args)
|
||||
except FileNotFoundError:
|
||||
print("Error fatal: El comando 'odoo' no se encontró en el PATH del contenedor.", file=sys.stderr)
|
||||
sys.exit(127)
|
||||
except Exception as e:
|
||||
print(f"Error fatal al intentar ejecutar Odoo: {e}", file=sys.stderr)
|
||||
sys.exit(1)
|
Loading…
Reference in New Issue
Block a user