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:
envsubstpara inyeccion de variableswkhtmltopdfpara PDFspostgresql-clientpara 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:
- Variables definidas en
.env docker-compose.ymllas pasa al contenedorentrypoint.shejecutaenvsubst${VARIABLES}se reemplazan con valores reales- Odoo lee el archivo generado