Saltar a contenido

Arquitectura

Vision General

Full3D utiliza una arquitectura de microservicios containerizada con Docker.

flowchart TB
    subgraph Internet
        User[Usuario]
    end

    subgraph Host["Host (Ubuntu VPS)"]
        subgraph Docker["Docker Network (odoo-network)"]
            Traefik[Traefik<br/>:80, :443]
            Odoo[Odoo<br/>:8069, :8072]
            Postgres[(PostgreSQL<br/>:5432)]
        end

        subgraph Volumes["Bind Mounts (./data)"]
            PGData[("./data/postgresql<br/>Base de datos")]
            OdooData[("./data/odoo<br/>Filestore")]
        end

        subgraph Config["Configuración"]
            Env[".env"]
            Template["odoo.conf.template"]
            Acme["acme.json<br/>Certificados SSL"]
        end
    end

    User -->|HTTPS| Traefik
    Traefik -->|HTTP| Odoo
    Odoo -->|TCP| Postgres
    Postgres -.->|Persistencia| PGData
    Odoo -.->|Persistencia| OdooData
    Env -.->|Variables| Odoo
    Template -.->|Config| Odoo
    Acme -.->|SSL| Traefik

Componentes

Traefik (Proxy Reverso)

Aspecto Detalle
Imagen traefik:v2.10
Puertos 80 (HTTP), 443 (HTTPS)
Función Proxy, SSL automático, balanceo
SSL Let's Encrypt (ACME)

Traefik maneja:

  • Terminacion SSL (HTTPS)
  • Redirección HTTP → HTTPS
  • Proxy a Odoo (puerto 8069)
  • WebSocket para longpolling (puerto 8072)

Odoo (Aplicación)

Aspecto Detalle
Imagen Personalizada desde odoo:19.0
Puertos internos 8069 (HTTP), 8072 (WebSocket)
Workers 4 (configurable)
Modo proxy Activado

Caracteristicas adicionales en la imagen:

  • envsubst para inyeccion de variables
  • wkhtmltopdf para PDFs
  • postgresql-client para health checks
  • Paquetes Python: imgkit, qrcode, python-barcode

PostgreSQL (Base de Datos)

Aspecto Detalle
Imagen postgres:17
Puerto interno 5432
Usuario odoo
Base de datos odoo_full3d

Base de Datos en Bind Mount

Los datos de PostgreSQL estan en ./data/postgresql/, no en un volumen nombrado de Docker. Esto significa qué si eliminas esa carpeta, pierdes toda la base de datos.

Flujo de Datos

sequenceDiagram
    participant U as Usuario
    participant T as Traefik
    participant O as Odoo
    participant P as PostgreSQL
    participant F as Filestore

    U->>T: HTTPS Request
    T->>T: Terminar SSL
    T->>O: HTTP Request
    O->>P: Query SQL
    P-->>O: Resultado
    O->>F: Leer/Escribir archivos
    F-->>O: Archivos
    O-->>T: HTTP Response
    T-->>U: HTTPS Response

Persistencia de Datos

Directorio Contenido Backup
./data/postgresql/ Base de datos PostgreSQL Incluido
./data/odoo/filestore/ Archivos adjuntos Incluido
./data/odoo/sessions/ Sesiónes de usuario No critico
./backups/ Archivos de backup Excluido de git

Red Docker

Todos los servicios estan en la red odoo-network:

flowchart LR
    subgraph odoo-network
        T[Traefik] --> O[Odoo]
        O --> P[PostgreSQL]
    end

    Internet -->|80/443| T
Servicio Acceso Externo Acceso Interno
Traefik Si (80, 443) -
Odoo No Si (8069, 8072)
PostgreSQL No Si (5432)

Inyeccion de Configuración

El archivo odoo.conf se genera en tiempo de ejecucion:

flowchart LR
    A[.env] -->|Variables| B[docker-compose.yml]
    B -->|Environment| C[Contenedor Odoo]
    D[odoo.conf.template] -->|Montado| C
    C -->|entrypoint.sh + envsubst| E[/etc/odoo/odoo.conf]

Proceso:

  1. Variables definidas en .env
  2. docker-compose.yml las pasa al contenedor
  3. entrypoint.sh ejecuta envsubst
  4. ${VARIABLES} se reemplazan con valores reales
  5. Odoo lee el archivo generado