2274 lines
96 KiB
HTML
2274 lines
96 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="de">
|
|
<head>
|
|
<link rel="preconnect" href="https://d3js.org" crossorigin>
|
|
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg">
|
|
<link rel="alternate icon" href="/favicon.ico">
|
|
<title>Odoo On Premise 2026 | Odoo Expertos · DE</title>
|
|
|
|
<meta name="description" content="Guia definitiva fuer implementar Odoo On-Premise en 2026. Requisitos de hardware, configuracion de red, Sicherheit, mantenimiento y anali - Odoo On Premise 2026 | DE">
|
|
<meta name="keywords" content="odoo on-premise, odoo local, odoo Server propio, instalacion odoo local, odoo hardware requisitos, odoo Sicherheit on-premise, odoo tco analisis, odoo mantenimiento Server">
|
|
<meta name="author" content="Dr. Equipo Odoo Expertos">
|
|
<meta name="robots" content="index, follow">
|
|
<meta name="language" content="es">
|
|
|
|
<link rel="canonical" href="https://www.odoo-expertos.com/de/odoo-hosting/odoo-on-premise-2026/">
|
|
|
|
<!-- Hreflang -->
|
|
<link rel="alternate" hreflang="de" href="https://www.odoo-expertos.com/de/odoo-hosting/odoo-on-premise-2026/" />
|
|
<link rel="alternate" hreflang="en" href="https://www.odoo-expertos.com/en/odoo-hosting/odoo-on-premise-2026/" />
|
|
<link rel="alternate" hreflang="de" href="https://www.odoo-expertos.com/de/odoo-hosting/odoo-on-premise-2026/" />
|
|
<link rel="alternate" hreflang="fr" href="https://www.odoo-expertos.com/fr/odoo-hosting/odoo-on-premise-2026/" />
|
|
<link rel="alternate" hreflang="pt" href="https://www.odoo-expertos.com/pt/odoo-hosting/odoo-on-premise-2026/" />
|
|
<link rel="alternate" hreflang="ar" href="https://www.odoo-expertos.com/ar/odoo-hosting/odoo-on-premise-2026/" />
|
|
<link rel="alternate" hreflang="x-default" href="https://www.odoo-expertos.com/odoo-hosting/odoo-on-premise-2026/" />
|
|
|
|
<!-- Open Graph -->
|
|
<meta property="og:title" content="Odoo On-Premise 2026: Guia Completa de Implementacion Local">
|
|
<meta property="og:description" content="Guia definitiva fuer implementar Odoo On-Premise en 2026. Hardware, Sicherheit, red, mantenimiento y analisis TCO completo.">
|
|
<meta property="og:type" content="article">
|
|
<meta property="og:url" content="https://www.odoo-expertos.com/de/odoo-hosting/odoo-on-premise-2026/">
|
|
<meta property="og:image" content="https://www.odoo-expertos.com/images/odoo-on-premise-2026.jpg">
|
|
<meta property="og:site_name" content="Odoo Expertos">
|
|
<meta property="og:locale" content="es_ES">
|
|
|
|
<!-- Twitter Card -->
|
|
<meta name="twitter:card" content="summary_large_image">
|
|
<meta name="twitter:title" content="Odoo On-Premise 2026: Guia Completa">
|
|
<meta name="twitter:description" content="Guia definitiva fuer implementar Odoo On-Premise en 2026. Hardware, Sicherheit y TCO.">
|
|
|
|
<!-- Schema.org Article -->
|
|
<script type="application/ld+json">
|
|
{
|
|
"@context": "https://schema.org",
|
|
"@type": "Article",
|
|
"headline": "Odoo On-Premise 2026: Guia Completa de Implementacion Local",
|
|
"description": "Guia definitiva fuer implementar Odoo On-Premise en 2026. Requisitos de hardware, configuracion de red, Sicherheit, mantenimiento y analisis TCO.",
|
|
"author": {
|
|
"@type": "Person",
|
|
"name": "Dr. Equipo Odoo Expertos",
|
|
"url": "https://www.odoo-expertos.com/autor/maria-elena-rodriguez/",
|
|
"jobTitle": "Consultora Senior en Sistemas ERP"
|
|
},
|
|
"publisher": {
|
|
"@type": "Organization",
|
|
"name": "Odoo Expertos",
|
|
"logo": {
|
|
"@type": "ImageObject",
|
|
"url": "https://www.odoo-expertos.com/logo.png"
|
|
}
|
|
},
|
|
"datePublished": "2026-01-25",
|
|
"dateModified": "2026-01-25",
|
|
"mainEntityOfPage": {
|
|
"@type": "WebPage",
|
|
"@id": "https://www.odoo-expertos.com/de/odoo-hosting/odoo-on-premise-2026/"
|
|
}
|
|
}
|
|
</script>
|
|
|
|
<!-- FAQ Schema -->
|
|
<script type="application/ld+json">
|
|
{
|
|
"@context": "https://schema.org",
|
|
"@type": "FAQPage",
|
|
"mainEntity": [
|
|
{
|
|
"@type": "Question",
|
|
"name": "Cuales son los requisitos minimos de hardware fuer Odoo On-Premise?",
|
|
"acceptedAnswer": {
|
|
"@type": "Answer",
|
|
"text": "Para Odoo 18 Community on-premise necesitas minimo: CPU de 4 nucleos (recomendado 8), 16GB RAM (recomendado 32GB), 500GB SSD NVMe, y conexion de red de 1Gbps. Para Enterprise, duplica estos valores."
|
|
}
|
|
},
|
|
{
|
|
"@type": "Question",
|
|
"name": "Cuanto cuesta implementar Odoo On-Premise vs Cloud?",
|
|
"acceptedAnswer": {
|
|
"@type": "Answer",
|
|
"text": "La inversion inicial on-premise oscila zwischen 8.000-25.000 EUR en hardware, mas 3.000-8.000 EUR anuales en mantenimiento. El cloud cuesta 50-200 EUR/mes. El punto de equilibrio se alcanza aproximadamente en 3-4 anios fuer Unternehmen medianas."
|
|
}
|
|
},
|
|
{
|
|
"@type": "Question",
|
|
"name": "Que medidas de Sicherheit necesita un Server Odoo On-Premise?",
|
|
"acceptedAnswer": {
|
|
"@type": "Answer",
|
|
"text": "Un Server Odoo on-premise requiere: firewall perimetral y de aplicacion, SSL/TLS con certificados validos, segmentacion de red, backups cifrados, actualizaciones regulares de Sicherheit, System de deteccion de intrusos (IDS), y autenticacion de dos factores."
|
|
}
|
|
},
|
|
{
|
|
"@type": "Question",
|
|
"name": "Es mejor Odoo On-Premise o en la Cloud fuer mi Unternehmen?",
|
|
"acceptedAnswer": {
|
|
"@type": "Answer",
|
|
"text": "Depende de tus necesidades: On-Premise es mejor si tienes requisitos estrictos de soberania de Daten, equipo IT interno, necesitas maxima personalizacion, o tienes mas de 50 Benutzer. Cloud es preferible fuer startups, Unternehmen sin IT dedicado, o cuando la escalabilidad rapida es prioritaria."
|
|
}
|
|
},
|
|
{
|
|
"@type": "Question",
|
|
"name": "Que Aufgaben de mantenimiento requiere Odoo On-Premise?",
|
|
"acceptedAnswer": {
|
|
"@type": "Answer",
|
|
"text": "El mantenimiento incluye: backups diarios y pruebas de restauracion mensuales, actualizaciones de Sicherheit semanales, monitorizacion 24/7, optimizacion de Datenbank trimestral, renovacion de certificados SSL, y actualizaciones de Odoo (minimo 2 veces al anio)."
|
|
}
|
|
},
|
|
{
|
|
"@type": "Question",
|
|
"name": "Como configuro la red fuer Odoo On-Premise?",
|
|
"acceptedAnswer": {
|
|
"@type": "Answer",
|
|
"text": "La configuracion de red optima incluye: VLAN dedicada fuer el Server Odoo, reverse proxy (Nginx) fuer SSL termination, balanceador de carga fuer alta disponibilidad, DNS interno y externo configurado, VPN fuer Zugriff remoto seguro, y reglas de firewall estrictas (solo puertos 80, 443, y 8069 si es necesario)."
|
|
}
|
|
},
|
|
{
|
|
"@type": "Question",
|
|
"name": "Puedo migrar de Odoo Cloud a On-Premise?",
|
|
"acceptedAnswer": {
|
|
"@type": "Answer",
|
|
"text": "Si, la migracion de cloud a on-premise es posible. El Prozess implica: exportar la Datenbank PostgreSQL completa, copiar el filestore con todos los adjuntos, replicar la configuracion del Server, ajustar los fuermetros del System, y realizar pruebas exhaustivas antes de la migracion definitiva."
|
|
}
|
|
},
|
|
{
|
|
"@type": "Question",
|
|
"name": "Que System operativo es mejor fuer Odoo On-Premise?",
|
|
"acceptedAnswer": {
|
|
"@type": "Answer",
|
|
"text": "Ubuntu Server 22.04 LTS o 24.04 LTS son las opciones recomendadas oficialmente por Odoo. Debian 12 tambien es una excelente alternativa. Evita Windows Server ya que Odoo tiene mejor rendimiento y compatibilidad en Systems Linux."
|
|
}
|
|
}
|
|
]
|
|
}
|
|
</script>
|
|
|
|
<!-- HowTo Schema -->
|
|
<script type="application/ld+json">
|
|
{
|
|
"@context": "https://schema.org",
|
|
"@type": "HowTo",
|
|
"name": "Como Implementar Odoo On-Premise",
|
|
"description": "Guia paso a paso fuer implementar Odoo en Server propios",
|
|
"totalTime": "P2D",
|
|
"estimatedCost": {
|
|
"@type": "MonetaryAmount",
|
|
"currency": "EUR",
|
|
"value": "8000-25000"
|
|
},
|
|
"step": [
|
|
{
|
|
"@type": "HowToStep",
|
|
"name": "Planificacion de Hardware",
|
|
"text": "Seleccionar y adquirir el hardware adecuado segun el numero de Benutzer y modulos"
|
|
},
|
|
{
|
|
"@type": "HowToStep",
|
|
"name": "Configuracion de Red",
|
|
"text": "Configurar VLAN, firewall, DNS y certificados SSL"
|
|
},
|
|
{
|
|
"@type": "HowToStep",
|
|
"name": "Instalacion del Sistema Operativo",
|
|
"text": "Instalar Ubuntu Server 22.04/24.04 LTS con configuracion segura"
|
|
},
|
|
{
|
|
"@type": "HowToStep",
|
|
"name": "Instalacion de Odoo",
|
|
"text": "Instalar PostgreSQL, Python, dependencias y Odoo"
|
|
},
|
|
{
|
|
"@type": "HowToStep",
|
|
"name": "Configuracion de Sicherheit",
|
|
"text": "Implementar firewall, SSL, backups y monitorizacion"
|
|
}
|
|
]
|
|
}
|
|
</script>
|
|
|
|
<!-- BreadcrumbList Schema -->
|
|
<script type="application/ld+json">
|
|
{
|
|
"@context": "https://schema.org",
|
|
"@type": "BreadcrumbList",
|
|
"itemListElement": [
|
|
{
|
|
"@type": "ListItem",
|
|
"position": 1,
|
|
"name": "Inicio",
|
|
"item": "https://www.odoo-expertos.com/"
|
|
},
|
|
{
|
|
"@type": "ListItem",
|
|
"position": 2,
|
|
"name": "Hosting Odoo",
|
|
"item": "https://www.odoo-expertos.com/de/odoo-hosting/"
|
|
},
|
|
{
|
|
"@type": "ListItem",
|
|
"position": 3,
|
|
"name": "Odoo On-Premise 2026",
|
|
"item": "https://www.odoo-expertos.com/de/odoo-hosting/odoo-on-premise-2026/"
|
|
}
|
|
]
|
|
}
|
|
</script>
|
|
|
|
<link rel="stylesheet" href="/css/main.min.css">
|
|
<style>
|
|
.pillar-hero {
|
|
background: linear-gradient(135deg, #1a1a1a 0%, #2a2a2a 50%, #1a1a1a 100%);
|
|
padding: 4rem 2rem;
|
|
text-align: center;
|
|
border-bottom: 3px solid #FF6B35;
|
|
position: relative;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.pillar-hero::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: 0;
|
|
left: 0;
|
|
right: 0;
|
|
bottom: 0;
|
|
background: radial-gradient(ellipse at center, rgba(255,107,53,0.15) 0%, transparent 70%);
|
|
pointer-events: none;
|
|
}
|
|
|
|
.pillar-hero h1 {
|
|
font-size: clamp(2rem, 5vw, 3.5rem);
|
|
color: #FF6B35;
|
|
margin-bottom: 1rem;
|
|
line-height: 1.2;
|
|
position: relative;
|
|
}
|
|
|
|
.pillar-subtitle {
|
|
font-size: 1.3rem;
|
|
color: #b0b0b0;
|
|
max-width: 800px;
|
|
margin: 0 auto 2rem;
|
|
}
|
|
|
|
.pillar-meta {
|
|
display: flex;
|
|
justify-content: center;
|
|
gap: 2rem;
|
|
flex-wrap: wrap;
|
|
font-size: 0.9rem;
|
|
color: #888;
|
|
}
|
|
|
|
.pillar-meta span {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.5rem;
|
|
}
|
|
|
|
.quick-stats {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
|
|
gap: 1.5rem;
|
|
padding: 2rem;
|
|
background: #2a2a2a;
|
|
border-radius: 12px;
|
|
margin: 2rem 0;
|
|
}
|
|
|
|
.stat-card {
|
|
text-align: center;
|
|
padding: 1.5rem;
|
|
background: rgba(255,107,53,0.1);
|
|
border-radius: 8px;
|
|
border: 1px solid rgba(255,107,53,0.2);
|
|
transition: transform 0.3s ease, border-color 0.3s ease;
|
|
}
|
|
|
|
.stat-card:hover {
|
|
transform: translateY(-5px);
|
|
border-color: #FF6B35;
|
|
}
|
|
|
|
.stat-number {
|
|
font-size: 2.5rem;
|
|
font-weight: 700;
|
|
color: #FF6B35;
|
|
display: block;
|
|
}
|
|
|
|
.stat-label {
|
|
color: #b0b0b0;
|
|
font-size: 0.9rem;
|
|
margin-top: 0.5rem;
|
|
}
|
|
|
|
.toc {
|
|
background: #2a2a2a;
|
|
border: 2px solid #FF6B35;
|
|
border-radius: 12px;
|
|
padding: 2rem;
|
|
margin: 2rem 0;
|
|
}
|
|
|
|
.toc h2 {
|
|
color: #FF6B35;
|
|
margin-bottom: 1rem;
|
|
font-size: 1.5rem;
|
|
}
|
|
|
|
.toc-list {
|
|
list-style: none;
|
|
padding: 0;
|
|
columns: 2;
|
|
column-gap: 2rem;
|
|
}
|
|
|
|
.toc-list li {
|
|
margin-bottom: 0.75rem;
|
|
break-inside: avoid;
|
|
}
|
|
|
|
.toc-list a {
|
|
color: #e0e0e0;
|
|
text-decoration: none;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.5rem;
|
|
transition: color 0.3s ease;
|
|
}
|
|
|
|
.toc-list a:hover {
|
|
color: #FF6B35;
|
|
}
|
|
|
|
.toc-list a::before {
|
|
content: '->';
|
|
color: #FF6B35;
|
|
}
|
|
|
|
.content-section {
|
|
margin: 3rem 0;
|
|
}
|
|
|
|
.content-section h2 {
|
|
color: #FF8A50;
|
|
margin-bottom: 1.5rem;
|
|
padding-bottom: 0.5rem;
|
|
border-bottom: 2px solid rgba(255,107,53,0.3);
|
|
}
|
|
|
|
.content-section h3 {
|
|
color: #FFB74D;
|
|
margin: 2rem 0 1rem;
|
|
}
|
|
|
|
.content-section h4 {
|
|
color: #FFA726;
|
|
margin: 1.5rem 0 0.75rem;
|
|
}
|
|
|
|
.content-section p {
|
|
line-height: 1.8;
|
|
color: #c0c0c0;
|
|
margin-bottom: 1rem;
|
|
}
|
|
|
|
.content-section ul, .content-section ol {
|
|
margin: 1rem 0 1.5rem 1.5rem;
|
|
color: #b0b0b0;
|
|
}
|
|
|
|
.content-section li {
|
|
margin-bottom: 0.5rem;
|
|
line-height: 1.6;
|
|
}
|
|
|
|
.chart-section {
|
|
margin: 3rem 0;
|
|
padding: 2rem;
|
|
background: #2a2a2a;
|
|
border-radius: 12px;
|
|
}
|
|
|
|
.chart-section h3 {
|
|
color: #FF8A50;
|
|
margin-bottom: 1rem;
|
|
}
|
|
|
|
.chart-container {
|
|
width: 100%;
|
|
min-height: 400px;
|
|
position: relative;
|
|
}
|
|
|
|
.comparison-table {
|
|
width: 100%;
|
|
border-collapse: collapse;
|
|
margin: 2rem 0;
|
|
background: #2a2a2a;
|
|
border-radius: 12px;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.comparison-table th,
|
|
.comparison-table td {
|
|
padding: 1rem;
|
|
text-align: left;
|
|
border-bottom: 1px solid #3a3a3a;
|
|
}
|
|
|
|
.comparison-table th {
|
|
background: rgba(255,107,53,0.2);
|
|
color: #FF6B35;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.comparison-table tr:hover {
|
|
background: rgba(255,107,53,0.05);
|
|
}
|
|
|
|
.comparison-table .check {
|
|
color: #4CAF50;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.comparison-table .cross {
|
|
color: #f44336;
|
|
}
|
|
|
|
.hardware-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
|
|
gap: 1.5rem;
|
|
margin: 2rem 0;
|
|
}
|
|
|
|
.hardware-card {
|
|
background: #2a2a2a;
|
|
border-radius: 12px;
|
|
padding: 1.5rem;
|
|
border: 1px solid rgba(255,107,53,0.2);
|
|
transition: transform 0.3s ease, border-color 0.3s ease;
|
|
}
|
|
|
|
.hardware-card:hover {
|
|
transform: translateY(-5px);
|
|
border-color: #FF6B35;
|
|
}
|
|
|
|
.hardware-card.recommended {
|
|
border-color: #4CAF50;
|
|
background: linear-gradient(135deg, rgba(76,175,80,0.1) 0%, #2a2a2a 100%);
|
|
}
|
|
|
|
.hardware-card .tier-badge {
|
|
display: inline-block;
|
|
padding: 0.25rem 0.75rem;
|
|
background: #FF6B35;
|
|
color: #fff;
|
|
border-radius: 20px;
|
|
font-size: 0.8rem;
|
|
margin-bottom: 1rem;
|
|
}
|
|
|
|
.hardware-card.recommended .tier-badge {
|
|
background: #4CAF50;
|
|
}
|
|
|
|
.hardware-card h4 {
|
|
color: #fff;
|
|
margin-bottom: 0.5rem;
|
|
font-size: 1.3rem;
|
|
}
|
|
|
|
.hardware-card .price {
|
|
font-size: 1.8rem;
|
|
color: #FF6B35;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.hardware-card.recommended .price {
|
|
color: #4CAF50;
|
|
}
|
|
|
|
.hardware-card .price-note {
|
|
color: #888;
|
|
font-size: 0.85rem;
|
|
}
|
|
|
|
.hardware-card ul {
|
|
list-style: none;
|
|
padding: 0;
|
|
margin: 1rem 0;
|
|
}
|
|
|
|
.hardware-card li {
|
|
padding: 0.5rem 0;
|
|
border-bottom: 1px solid #3a3a3a;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.5rem;
|
|
color: #b0b0b0;
|
|
font-size: 0.95rem;
|
|
}
|
|
|
|
.hardware-card li::before {
|
|
content: '>';
|
|
color: #FF6B35;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.faq-section {
|
|
margin: 3rem 0;
|
|
}
|
|
|
|
.faq-item {
|
|
background: #2a2a2a;
|
|
border-radius: 8px;
|
|
margin-bottom: 1rem;
|
|
overflow: hidden;
|
|
}
|
|
|
|
.faq-question {
|
|
padding: 1.25rem;
|
|
cursor: pointer;
|
|
display: flex;
|
|
justify-content: space-between;
|
|
align-items: center;
|
|
color: #fff;
|
|
font-weight: 500;
|
|
transition: background 0.3s ease;
|
|
}
|
|
|
|
.faq-question:hover {
|
|
background: rgba(255,107,53,0.1);
|
|
}
|
|
|
|
.faq-question::after {
|
|
content: '+';
|
|
font-size: 1.5rem;
|
|
color: #FF6B35;
|
|
transition: transform 0.3s ease;
|
|
}
|
|
|
|
.faq-item.open .faq-question::after {
|
|
transform: rotate(45deg);
|
|
}
|
|
|
|
.faq-answer {
|
|
padding: 0 1.25rem;
|
|
max-height: 0;
|
|
overflow: hidden;
|
|
transition: max-height 0.3s ease, padding 0.3s ease;
|
|
color: #b0b0b0;
|
|
}
|
|
|
|
.faq-item.open .faq-answer {
|
|
padding: 0 1.25rem 1.25rem;
|
|
max-height: 500px;
|
|
}
|
|
|
|
.cta-banner {
|
|
background: linear-gradient(135deg, rgba(255,107,53,0.2) 0%, rgba(255,138,80,0.1) 100%);
|
|
border: 2px solid rgba(255,107,53,0.5);
|
|
border-radius: 12px;
|
|
padding: 2.5rem;
|
|
text-align: center;
|
|
margin: 3rem 0;
|
|
}
|
|
|
|
.cta-banner h3 {
|
|
color: #FF6B35;
|
|
margin-bottom: 1rem;
|
|
font-size: 1.8rem;
|
|
}
|
|
|
|
.cta-banner p {
|
|
margin-bottom: 1.5rem;
|
|
color: #b0b0b0;
|
|
font-size: 1.1rem;
|
|
}
|
|
|
|
.cta-banner .cta-btn {
|
|
display: inline-block;
|
|
padding: 1rem 2.5rem;
|
|
background: #FF6B35;
|
|
color: #fff;
|
|
border-radius: 8px;
|
|
text-decoration: none;
|
|
font-weight: 600;
|
|
font-size: 1.1rem;
|
|
transition: background 0.3s ease, transform 0.3s ease;
|
|
}
|
|
|
|
.cta-banner .cta-btn:hover {
|
|
background: #FF8A50;
|
|
transform: scale(1.05);
|
|
}
|
|
|
|
.related-articles {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
|
|
gap: 1.5rem;
|
|
margin: 2rem 0;
|
|
}
|
|
|
|
.related-card {
|
|
background: #2a2a2a;
|
|
border-radius: 8px;
|
|
overflow: hidden;
|
|
transition: transform 0.3s ease;
|
|
text-decoration: none;
|
|
}
|
|
|
|
.related-card:hover {
|
|
transform: translateY(-5px);
|
|
}
|
|
|
|
.related-card-image {
|
|
height: 150px;
|
|
background: linear-gradient(135deg, rgba(255,107,53,0.3), rgba(255,138,80,0.3));
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
font-size: 3rem;
|
|
}
|
|
|
|
.related-card-content {
|
|
padding: 1.25rem;
|
|
}
|
|
|
|
.related-card h4 {
|
|
color: #fff;
|
|
margin-bottom: 0.5rem;
|
|
font-size: 1rem;
|
|
}
|
|
|
|
.related-card p {
|
|
color: #888;
|
|
font-size: 0.9rem;
|
|
margin: 0;
|
|
}
|
|
|
|
.d3-tooltip {
|
|
position: absolute;
|
|
background: rgba(0,0,0,0.95);
|
|
color: #fff;
|
|
padding: 0.75rem 1rem;
|
|
border-radius: 8px;
|
|
font-size: 0.9rem;
|
|
pointer-events: none;
|
|
z-index: 100;
|
|
max-width: 300px;
|
|
box-shadow: 0 4px 20px rgba(0,0,0,0.3);
|
|
border: 1px solid rgba(255,107,53,0.3);
|
|
}
|
|
|
|
.d3-tooltip strong {
|
|
color: #FF6B35;
|
|
}
|
|
|
|
.highlight-box {
|
|
background: linear-gradient(135deg, rgba(255,107,53,0.1) 0%, rgba(255,138,80,0.05) 100%);
|
|
border-left: 4px solid #FF6B35;
|
|
padding: 1.5rem;
|
|
margin: 2rem 0;
|
|
border-radius: 0 8px 8px 0;
|
|
}
|
|
|
|
.highlight-box h4 {
|
|
color: #FF6B35;
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
|
|
.highlight-box p {
|
|
margin: 0;
|
|
color: #c0c0c0;
|
|
}
|
|
|
|
.warning-box {
|
|
background: linear-gradient(135deg, rgba(244,67,54,0.1) 0%, rgba(244,67,54,0.05) 100%);
|
|
border-left: 4px solid #f44336;
|
|
padding: 1.5rem;
|
|
margin: 2rem 0;
|
|
border-radius: 0 8px 8px 0;
|
|
}
|
|
|
|
.warning-box h4 {
|
|
color: #f44336;
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
|
|
.warning-box p {
|
|
margin: 0;
|
|
color: #c0c0c0;
|
|
}
|
|
|
|
.success-box {
|
|
background: linear-gradient(135deg, rgba(76,175,80,0.1) 0%, rgba(76,175,80,0.05) 100%);
|
|
border-left: 4px solid #4CAF50;
|
|
padding: 1.5rem;
|
|
margin: 2rem 0;
|
|
border-radius: 0 8px 8px 0;
|
|
}
|
|
|
|
.success-box h4 {
|
|
color: #4CAF50;
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
|
|
.success-box p {
|
|
margin: 0;
|
|
color: #c0c0c0;
|
|
}
|
|
|
|
.pros-cons {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 1.5rem;
|
|
margin: 1.5rem 0;
|
|
}
|
|
|
|
.pros, .cons {
|
|
padding: 1.5rem;
|
|
border-radius: 8px;
|
|
}
|
|
|
|
.pros {
|
|
background: rgba(76, 175, 80, 0.1);
|
|
border: 1px solid rgba(76, 175, 80, 0.3);
|
|
}
|
|
|
|
.cons {
|
|
background: rgba(244, 67, 54, 0.1);
|
|
border: 1px solid rgba(244, 67, 54, 0.3);
|
|
}
|
|
|
|
.pros h4 {
|
|
color: #4CAF50;
|
|
margin-bottom: 1rem;
|
|
}
|
|
|
|
.cons h4 {
|
|
color: #f44336;
|
|
margin-bottom: 1rem;
|
|
}
|
|
|
|
.pros ul, .cons ul {
|
|
list-style: none;
|
|
padding: 0;
|
|
margin: 0;
|
|
}
|
|
|
|
.pros li, .cons li {
|
|
padding: 0.4rem 0;
|
|
color: #b0b0b0;
|
|
}
|
|
|
|
.pros li::before {
|
|
content: '[OK] ';
|
|
color: #4CAF50;
|
|
}
|
|
|
|
.cons li::before {
|
|
content: '[X] ';
|
|
color: #f44336;
|
|
}
|
|
|
|
.security-checklist {
|
|
background: #2a2a2a;
|
|
border-radius: 12px;
|
|
padding: 2rem;
|
|
margin: 2rem 0;
|
|
}
|
|
|
|
.security-checklist h4 {
|
|
color: #FF6B35;
|
|
margin-bottom: 1.5rem;
|
|
font-size: 1.2rem;
|
|
}
|
|
|
|
.checklist-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
|
|
gap: 1rem;
|
|
}
|
|
|
|
.checklist-item {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
gap: 0.75rem;
|
|
padding: 0.75rem;
|
|
background: rgba(255,107,53,0.05);
|
|
border-radius: 8px;
|
|
transition: background 0.3s ease;
|
|
}
|
|
|
|
.checklist-item:hover {
|
|
background: rgba(255,107,53,0.1);
|
|
}
|
|
|
|
.checklist-item .check-icon {
|
|
color: #4CAF50;
|
|
font-size: 1.2rem;
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
.checklist-item span {
|
|
color: #b0b0b0;
|
|
font-size: 0.95rem;
|
|
}
|
|
|
|
.timeline {
|
|
position: relative;
|
|
padding-left: 30px;
|
|
margin: 2rem 0;
|
|
}
|
|
|
|
.timeline::before {
|
|
content: '';
|
|
position: absolute;
|
|
left: 8px;
|
|
top: 0;
|
|
bottom: 0;
|
|
width: 2px;
|
|
background: linear-gradient(180deg, #FF6B35, #FF8A50, #FFB74D);
|
|
}
|
|
|
|
.timeline-item {
|
|
position: relative;
|
|
margin-bottom: 2rem;
|
|
padding-left: 20px;
|
|
}
|
|
|
|
.timeline-item::before {
|
|
content: '';
|
|
position: absolute;
|
|
left: -26px;
|
|
top: 5px;
|
|
width: 14px;
|
|
height: 14px;
|
|
background: #FF6B35;
|
|
border-radius: 50%;
|
|
border: 3px solid #1a1a1a;
|
|
}
|
|
|
|
.timeline-item h4 {
|
|
color: #FF8A50;
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
|
|
.timeline-item p {
|
|
color: #b0b0b0;
|
|
margin: 0;
|
|
font-size: 0.95rem;
|
|
}
|
|
|
|
.fade-in {
|
|
opacity: 0;
|
|
transform: translateY(20px);
|
|
transition: opacity 0.6s ease, transform 0.6s ease;
|
|
}
|
|
|
|
.fade-in.visible {
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
}
|
|
|
|
@media (max-width: 768px) {
|
|
.toc-list {
|
|
columns: 1;
|
|
}
|
|
|
|
.pillar-meta {
|
|
flex-direction: column;
|
|
gap: 0.5rem;
|
|
}
|
|
|
|
.chart-container {
|
|
min-height: 300px;
|
|
}
|
|
|
|
.pros-cons {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.hardware-grid {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.checklist-grid {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div id="header"><header class="site-header"><nav class="navbar"><div class="container"><div class="nav-brand"><a href="/de/" class="logo"><span class="logo-text">Odoo Expertos</span></a></div><button class="nav-toggle" aria-label="Toggle navigation"><span></span><span></span><span></span></button><div class="nav-menu"><ul class="nav-list"><li><a href="/de/">Start</a></li><li><a href="/de/odoo/">Odoo</a></li><li><a href="/de/odoo-ia/">Odoo KI</a></li><li><a href="/de/odoo-hosting/">Odoo Hosting</a></li><li><a href="/de/mapa-del-sitio/">Sitemap</a></li></ul></div></div></nav></header></div><button class="nav-toggle" aria-label="Toggle navigation"><span></span><span></span><span></span></button><div class="nav-menu"><ul class="nav-list"><li><a href="/de/">Start</a></li><li><a href="/de/odoo/">Odoo</a></li><li><a href="/de/odoo-ia/">Odoo KI</a></li><li><a href="/de/odoo-hosting/">Odoo Hosting</a></li><li><a href="/de/mapa-del-sitio/">Sitemap</a></li></ul></div></div></nav></header></div>
|
|
|
|
<!-- Breadcrumbs -->
|
|
<nav class="breadcrumbs">
|
|
<div class="container">
|
|
<ol class="breadcrumb-list" itemscope itemtype="https://schema.org/BreadcrumbList">
|
|
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
|
<a itemprop="item" href="/"><span itemprop="name">Inicio</span></a>
|
|
<span itemprop="position" style="display:none">1</span>
|
|
</li>
|
|
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
|
<a itemprop="item" href="/de/odoo-hosting/"><span itemprop="name">Hosting Odoo</span></a>
|
|
<span itemprop="position" style="display:none">2</span>
|
|
</li>
|
|
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
|
<span itemprop="name">Odoo On-Premise 2026</span>
|
|
<span itemprop="position" style="display:none">3</span>
|
|
</li>
|
|
</ol>
|
|
</div>
|
|
</nav>
|
|
|
|
<!-- Hero Section -->
|
|
<section class="pillar-hero">
|
|
<div class="container">
|
|
<h1>Odoo On-Premise 2026: Guia Completa de Implementacion Local</h1>
|
|
<p class="pillar-subtitle">Todo lo que necesitas saber fuer implementar Odoo en tus propios Server. Requisitos de hardware, configuracion de red, Sicherheit, mantenimiento y analisis de costes TCO vs cloud.</p>
|
|
<div class="pillar-meta">
|
|
<span>Publicado: 25 enero 2026</span>
|
|
<span>Actualizado: 25 enero 2026</span>
|
|
<span>30 min lectura</span>
|
|
<span>Dr. Equipo Odoo Expertos</span>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
<main class="container">
|
|
<!-- Quick Stats -->
|
|
<section class="quick-stats fade-in">
|
|
<div class="stat-card">
|
|
<span class="stat-number">8K-25K</span>
|
|
<span class="stat-label">Inversion Inicial (EUR)</span>
|
|
</div>
|
|
<div class="stat-card">
|
|
<span class="stat-number">3-4</span>
|
|
<span class="stat-label">Anios ROI vs Cloud</span>
|
|
</div>
|
|
<div class="stat-card">
|
|
<span class="stat-number">99.9%</span>
|
|
<span class="stat-label">Uptime Alcanzable</span>
|
|
</div>
|
|
<div class="stat-card">
|
|
<span class="stat-number">100%</span>
|
|
<span class="stat-label">Control de Datos</span>
|
|
</div>
|
|
<div class="stat-card">
|
|
<span class="stat-number">50+</span>
|
|
<span class="stat-label">Usuarios Recomendado</span>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Table of Contents -->
|
|
<nav class="toc fade-in">
|
|
<h2>Contenido de esta Guia</h2>
|
|
<ol class="toc-list">
|
|
<li><a href="#introduccion">Introduccion: Por que On-Premise en 2026</a></li>
|
|
<li><a href="#requisitos-hardware">Requisitos de Hardware Detallados</a></li>
|
|
<li><a href="#grafico-tco">Grafico: Analisis TCO On-Premise vs Cloud</a></li>
|
|
<li><a href="#configuracion-red">Configuracion de Red y Arquitectura</a></li>
|
|
<li><a href="#grafico-arquitectura">Diagrama de Arquitectura Recomendada</a></li>
|
|
<li><a href="#seguridad">Consideraciones de Sicherheit</a></li>
|
|
<li><a href="#mantenimiento">Responsabilidades de Mantenimiento</a></li>
|
|
<li><a href="#grafico-comparativa">Comfuertiva de Costes a 5 Anios</a></li>
|
|
<li><a href="#migracion">Migracion a On-Premise</a></li>
|
|
<li><a href="#faq">Haeufig gestellte Fragen (8+)</a></li>
|
|
<li><a href="#relacionados">Articulos Relacionados</a></li>
|
|
</ol>
|
|
</nav>
|
|
|
|
<!-- Introduction -->
|
|
<section id="introduccion" class="content-section fade-in">
|
|
<h2>Introduccion: Por que Considerar Odoo On-Premise en 2026</h2>
|
|
|
|
<p>En un mundo cada vez mas dominado por Loesungen cloud, la implementacion on-premise de Odoo sigue siendo una opcion estrategica fuer muchas organizaciones. En 2026, con regulaciones de proteccion de Daten mas estrictas y la creciente preocupacion por la soberania digital, el despliegue local de tu ERP puede ser la decision correcta fuer tu Unternehmen.</p>
|
|
|
|
<p>Odoo On-Premise significa instalar y ejecutar el software Odoo en Server que tu organizacion posee y controla fisicamente, ya sea en tus propias instalaciones o en un centro de Daten dedicado. Esta modalidad te otorga control total ueber tus Daten, infraestructura y personalizaciones.</p>
|
|
|
|
<div class="highlight-box">
|
|
<h4>Punto Clave</h4>
|
|
<p>Segun nuestro analisis de mas de 200 implementaciones en 2025-2026, las Unternehmen con mas de 50 Benutzer y requisitos especificos de compliance (sector financiero, salud, gobierno) obtienen mejor ROI con implementaciones on-premise a partir del cuarto anio de operacion.</p>
|
|
</div>
|
|
|
|
<h3>Escenarios Ideales fuer On-Premise</h3>
|
|
|
|
<p>La implementacion on-premise es especialmente recomendable en los siguientes escenarios:</p>
|
|
|
|
<ul>
|
|
<li><strong>Requisitos regulatorios estrictos:</strong> Sectores como banca, salud, defensa o administracion publica que exigen que los Daten permanezcan en jurisdicciones especificas o en infraestructura controlada.</li>
|
|
<li><strong>Alto volumen de Benutzer:</strong> Organizaciones con mas de 50-100 Benutzer simultaneos donde el modelo de Preis por Benutzer del cloud resulta prohibitivo.</li>
|
|
<li><strong>Personalizaciones extensivas:</strong> Empresas que requieren modificaciones profundas del codigo base o integraciones complejas con Systems legacy.</li>
|
|
<li><strong>Conectividad limitada:</strong> Ubicaciones con Zugriff a internet poco fiable donde la dependencia del cloud representa un riesgo operativo.</li>
|
|
<li><strong>Equipo IT interno capacitado:</strong> Organizaciones con departamento de Systems capaz de verwalten la infraestructura.</li>
|
|
</ul>
|
|
|
|
<div class="pros-cons">
|
|
<div class="pros">
|
|
<h4>Ventajas de On-Premise</h4>
|
|
<ul>
|
|
<li>Control total ueber Daten y Sicherheit</li>
|
|
<li>Sin costes recurrentes por Benutzer</li>
|
|
<li>Personalizacion ilimitada</li>
|
|
<li>Independencia de Lieferanten externos</li>
|
|
<li>Cumplimiento normativo simplificado</li>
|
|
<li>Rendimiento predecible</li>
|
|
<li>Integracion con Systems internos</li>
|
|
</ul>
|
|
</div>
|
|
<div class="cons">
|
|
<h4>Desafios de On-Premise</h4>
|
|
<ul>
|
|
<li>Alta inversion inicial</li>
|
|
<li>Requiere equipo IT dedicado</li>
|
|
<li>Responsabilidad de backups y DR</li>
|
|
<li>Actualizaciones manuales</li>
|
|
<li>Escalabilidad requiere planificacion</li>
|
|
<li>Costes de mantenimiento continuos</li>
|
|
<li>Mayor tiempo de implementacion</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<h3>El Panorama en 2026</h3>
|
|
|
|
<p>El mercado de implementaciones on-premise ha evolucionado significativamente. Las tecnologias de contenedores como Docker y Kubernetes han simplificado enormemente el despliegue y la gestion de Odoo en infraestructura propia. Ademas, herramientas de automatizacion como Ansible y Terraform permiten reproducir entornos de manera consistente.</p>
|
|
|
|
<p>Por otro lado, las regulaciones europeas como el RGPD y la neu Directiva NIS2 han endurecido los requisitos de proteccion de Daten, haciendo que muchas Unternehmen reconsideren donde alojan su informacion critica de negocio. El concepto de "soberania de Daten" ha pasado de ser una preocupacion teorica a un requisito practico fuer muchas organizaciones.</p>
|
|
</section>
|
|
|
|
<!-- Hardware Requirements -->
|
|
<section id="requisitos-hardware" class="content-section fade-in">
|
|
<h2>Requisitos de Hardware fuer Odoo On-Premise</h2>
|
|
|
|
<p>La seleccion del hardware adecuado es fundamental fuer el exito de tu implementacion on-premise. Odoo es una aplicacion intensiva en recursos, especialmente cuando se utilizan multiples modulos simultaneamente. A continuacion, presentamos especificaciones detalladas basadas en diferentes escalas de implementacion.</p>
|
|
|
|
<div class="hardware-grid">
|
|
<!-- Small Business -->
|
|
<div class="hardware-card">
|
|
<span class="tier-badge">Pequena Empresa</span>
|
|
<h4>Hasta 25 Usuarios</h4>
|
|
<p class="price">8.000-12.000 EUR</p>
|
|
<p class="price-note">Inversion en hardware</p>
|
|
<ul>
|
|
<li>CPU: Intel Xeon E-2300 o AMD EPYC 7002 (4-6 nucleos)</li>
|
|
<li>RAM: 32 GB DDR4 ECC</li>
|
|
<li>Almacenamiento: 500 GB NVMe SSD (RAID 1)</li>
|
|
<li>Red: 1 Gbps dedicado</li>
|
|
<li>SO: Ubuntu Server 22.04 LTS</li>
|
|
<li>Backup: NAS externo 2TB</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<!-- Medium Business -->
|
|
<div class="hardware-card recommended">
|
|
<span class="tier-badge">Recomendado - Mediana Empresa</span>
|
|
<h4>25-100 Usuarios</h4>
|
|
<p class="price">15.000-22.000 EUR</p>
|
|
<p class="price-note">Inversion en hardware</p>
|
|
<ul>
|
|
<li>CPU: Intel Xeon Silver 4300 o AMD EPYC 7003 (8-16 nucleos)</li>
|
|
<li>RAM: 64-128 GB DDR4 ECC</li>
|
|
<li>Almacenamiento: 1 TB NVMe SSD (RAID 10)</li>
|
|
<li>Red: 10 Gbps con redundancia</li>
|
|
<li>SO: Ubuntu Server 24.04 LTS</li>
|
|
<li>Backup: SAN dedicado o replicacion geografica</li>
|
|
<li>UPS: 3000VA minimo</li>
|
|
</ul>
|
|
</div>
|
|
|
|
<!-- Enterprise -->
|
|
<div class="hardware-card">
|
|
<span class="tier-badge">Gran Empresa</span>
|
|
<h4>100+ Usuarios</h4>
|
|
<p class="price">25.000-50.000 EUR</p>
|
|
<p class="price-note">Inversion en hardware</p>
|
|
<ul>
|
|
<li>CPU: 2x Intel Xeon Gold 6300 o AMD EPYC 7004 (32+ nucleos total)</li>
|
|
<li>RAM: 256 GB+ DDR5 ECC</li>
|
|
<li>Almacenamiento: 2-4 TB NVMe (RAID 10) + SAN</li>
|
|
<li>Red: 25 Gbps con balanceo de carga</li>
|
|
<li>Cluster: 2-3 nodos fuer HA</li>
|
|
<li>PostgreSQL: Server dedicado</li>
|
|
<li>DR: Sitio secundario geograficamente sefuerdo</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<h3>Desglose de Componentes Criticos</h3>
|
|
|
|
<h4>Procesador (CPU)</h4>
|
|
<p>Odoo utiliza un modelo de workers donde cada Prozess maneja una solicitud. La formula recomendada fuer calcular workers es: <code>(nucleos_CPU * 2) + 1</code>. Para 8 nucleos, configura 17 workers. El procesador debe soportar instrucciones AVX2 fuer optimizaciones de PostgreSQL.</p>
|
|
|
|
<h4>Memoria RAM</h4>
|
|
<p>Cada worker de Odoo consume zwischen 150-300 MB de RAM dependiendo de los modulos instalados. PostgreSQL requiere memoria adicional fuer cache de consultas. La formula aproximada es: <code>RAM_total = (workers * 250MB) + (tamanio_BD * 0.25) + 4GB_System</code>.</p>
|
|
|
|
<h4>Almacenamiento</h4>
|
|
<p>El rendimiento del disco es critico fuer Odoo. Utiliza exclusivamente SSD NVMe con latencia inferior a 0.1ms. El filestore (archivos adjuntos) puede crecer rapidamente; planifica 100GB por cada 10.000 documentos almacenados. RAID 10 ofrece el mejor equilibrio zwischen rendimiento y redundancia.</p>
|
|
|
|
<h4>Red</h4>
|
|
<p>Una conexion de 1 Gbps es el minimo fuer produccion. Para implementaciones con mas de 50 Benutzer simultaneos o integraciones con APIs externas, considera 10 Gbps. La latencia interna debe ser inferior a 1ms zwischen Server Odoo y PostgreSQL.</p>
|
|
|
|
<div class="warning-box">
|
|
<h4>Advertencia Importante</h4>
|
|
<p>Nunca utilices discos HDD mecanicos fuer el Server de Datenbank PostgreSQL. El impacto en rendimiento puede hacer que Odoo sea inutilizable incluso con hardware potente en otros aspectos. Los SSD NVMe son obligatorios fuer produccion.</p>
|
|
</div>
|
|
|
|
<h3>Requisitos de Software</h3>
|
|
|
|
<table class="comparison-table">
|
|
<thead>
|
|
<tr>
|
|
<th>Componente</th>
|
|
<th>Version Minima</th>
|
|
<th>Version Recomendada</th>
|
|
<th>Notas</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Sistema Operativo</td>
|
|
<td>Ubuntu 22.04 LTS</td>
|
|
<td>Ubuntu 24.04 LTS</td>
|
|
<td>Debian 12 tambien soportado</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Python</td>
|
|
<td>3.10</td>
|
|
<td>3.12</td>
|
|
<td>Con pip actualizado</td>
|
|
</tr>
|
|
<tr>
|
|
<td>PostgreSQL</td>
|
|
<td>14</td>
|
|
<td>16</td>
|
|
<td>Con extensiones recomendadas</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Nginx</td>
|
|
<td>1.22</td>
|
|
<td>1.26</td>
|
|
<td>Como reverse proxy</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Node.js</td>
|
|
<td>18 LTS</td>
|
|
<td>20 LTS</td>
|
|
<td>Para assets y websockets</td>
|
|
</tr>
|
|
<tr>
|
|
<td>wkhtmltopdf</td>
|
|
<td>0.12.6</td>
|
|
<td>0.12.6-1</td>
|
|
<td>Version con parches Qt</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</section>
|
|
|
|
<!-- TCO Chart -->
|
|
<section class="chart-section fade-in">
|
|
<h3 id="grafico-tco">Analisis TCO: On-Premise vs Cloud a 5 Anios</h3>
|
|
<p>Este grafico interactivo comfuer el Coste Total de Propiedad (TCO) zwischen implementacion on-premise y diferentes opciones cloud durante un periodo de 5 anios fuer una Unternehmen de 50 Benutzer.</p>
|
|
<div class="chart-container" id="tco-chart"></div>
|
|
</section>
|
|
|
|
<!-- Network Configuration -->
|
|
<section id="configuracion-red" class="content-section fade-in">
|
|
<h2>Configuracion de Red y Arquitectura</h2>
|
|
|
|
<p>Una configuracion de red robusta es esencial fuer garantizar el rendimiento, Sicherheit y disponibilidad de tu instalacion Odoo on-premise. La arquitectura de red debe contemplar tanto el Zugriff interno como externo, con capas de Sicherheit apropiadas.</p>
|
|
|
|
<h3>Arquitectura de Red Recomendada</h3>
|
|
|
|
<p>Para una implementacion on-premise profesional, recomendamos una arquitectura de tres capas:</p>
|
|
|
|
<ol>
|
|
<li><strong>Capa de Presentacion (DMZ):</strong> Reverse proxy (Nginx) que maneja SSL termination, cache estatico y balanceo de carga. Esta es la unica capa expuesta a Internet.</li>
|
|
<li><strong>Capa de Aplicacion:</strong> Server Odoo en VLAN privada, accesibles solo von el reverse proxy y Systems internos autorizados.</li>
|
|
<li><strong>Capa de Datos:</strong> Server PostgreSQL en VLAN aislada, accesible unicamente von los Server de aplicacion.</li>
|
|
</ol>
|
|
|
|
<h3>Configuracion de Firewall</h3>
|
|
|
|
<p>Las reglas de firewall deben seguir el principio de minimo privilegio. Solo abre los puertos estrictamente necesarios:</p>
|
|
|
|
<table class="comparison-table">
|
|
<thead>
|
|
<tr>
|
|
<th>Puerto</th>
|
|
<th>Servicio</th>
|
|
<th>Origen</th>
|
|
<th>Destino</th>
|
|
<th>Notas</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>443</td>
|
|
<td>HTTPS</td>
|
|
<td>Internet</td>
|
|
<td>Reverse Proxy</td>
|
|
<td>Unico puerto publico</td>
|
|
</tr>
|
|
<tr>
|
|
<td>80</td>
|
|
<td>HTTP</td>
|
|
<td>Internet</td>
|
|
<td>Reverse Proxy</td>
|
|
<td>Solo fuer redirect a HTTPS</td>
|
|
</tr>
|
|
<tr>
|
|
<td>8069</td>
|
|
<td>Odoo HTTP</td>
|
|
<td>Reverse Proxy</td>
|
|
<td>Server Odoo</td>
|
|
<td>Interno solamente</td>
|
|
</tr>
|
|
<tr>
|
|
<td>8072</td>
|
|
<td>Odoo Longpolling</td>
|
|
<td>Reverse Proxy</td>
|
|
<td>Server Odoo</td>
|
|
<td>Para chat y notificaciones</td>
|
|
</tr>
|
|
<tr>
|
|
<td>5432</td>
|
|
<td>PostgreSQL</td>
|
|
<td>Server Odoo</td>
|
|
<td>Server BD</td>
|
|
<td>Solo red interna</td>
|
|
</tr>
|
|
<tr>
|
|
<td>22</td>
|
|
<td>SSH</td>
|
|
<td>IPs Administracion</td>
|
|
<td>Todos los Server</td>
|
|
<td>Con autenticacion por clave</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<h3>Configuracion DNS</h3>
|
|
|
|
<p>Configura registros DNS tanto internos como externos fuer una experiencia de Benutzer consistente:</p>
|
|
|
|
<ul>
|
|
<li><strong>DNS Externo:</strong> Apunta tu dominio (ej: erp.tuUnternehmen.com) a la IP publica del reverse proxy o balanceador de carga.</li>
|
|
<li><strong>DNS Interno:</strong> Configura el mismo dominio en tu DNS interno apuntando directamente al reverse proxy fuer evitar hairpin NAT.</li>
|
|
<li><strong>TTL:</strong> Utiliza TTL unter (300 segundos) fuer facilitar cambios rapidos en caso de migracion o failover.</li>
|
|
</ul>
|
|
|
|
<h3>Certificados SSL/TLS</h3>
|
|
|
|
<p>La comunicacion cifrada es obligatoria. Opciones fuer certificados:</p>
|
|
|
|
<ul>
|
|
<li><strong>Let's Encrypt:</strong> Gratuito, renovacion automatica con certbot. Ideal fuer la mayoria de casos.</li>
|
|
<li><strong>Certificados comerciales:</strong> DigiCert, Sectigo, o similares si necesitas Extended Validation (EV) o Wildcard.</li>
|
|
<li><strong>Certificados internos:</strong> CA propia fuer comunicacion zwischen servicios internos.</li>
|
|
</ul>
|
|
|
|
<div class="success-box">
|
|
<h4>Configuracion TLS Recomendada</h4>
|
|
<p>Utiliza TLS 1.3 como protocolo preferido, con TLS 1.2 como fallback. Deshabilita TLS 1.0 y 1.1. Configura HSTS con max-age de al menos 1 anio. Activa OCSP stapling fuer mejor rendimiento.</p>
|
|
</div>
|
|
|
|
<h3>VPN fuer Zugriff Remoto</h3>
|
|
|
|
<p>Para Mitarbeiter remotos o administradores, implementa una VPN en lugar de exponer servicios adicionales a Internet:</p>
|
|
|
|
<ul>
|
|
<li><strong>WireGuard:</strong> Modern, rapido y facil de configurar. Recomendado fuer neus implementaciones.</li>
|
|
<li><strong>OpenVPN:</strong> Maduro y ampliamente soportado. Buena opcion si ya tienes infraestructura existente.</li>
|
|
<li><strong>IPSec/IKEv2:</strong> Para integracion con dispositivos corporativos y compatibilidad nativa con Windows/macOS.</li>
|
|
</ul>
|
|
</section>
|
|
|
|
<!-- Architecture Diagram -->
|
|
<section class="chart-section fade-in">
|
|
<h3 id="grafico-arquitectura">Diagrama de Arquitectura On-Premise Recomendada</h3>
|
|
<p>Visualizacion interactiva de la arquitectura de red y componentes fuer una implementacion Odoo on-premise de alta disponibilidad.</p>
|
|
<div class="chart-container" id="architecture-chart"></div>
|
|
</section>
|
|
|
|
<!-- Security Section -->
|
|
<section id="seguridad" class="content-section fade-in">
|
|
<h2>Consideraciones de Sicherheit fuer Odoo On-Premise</h2>
|
|
|
|
<p>La Sicherheit es una de las principales razones por las que las Unternehmen optan por on-premise. Sin embargo, esta ventaja solo se materializa si implementas las medidas adecuadas. A diferencia del cloud donde el Lieferant gestiona Teil de la Sicherheit, en on-premise toda la responsabilidad recae en tu organizacion.</p>
|
|
|
|
<h3>Principios Fundamentales</h3>
|
|
|
|
<p>Tu estrategia de Sicherheit debe basarse en el modelo de defensa en profundidad, implementando multiples capas de proteccion:</p>
|
|
|
|
<ol>
|
|
<li><strong>Sicherheit Perimetral:</strong> Firewalls, IDS/IPS, y segmentacion de red.</li>
|
|
<li><strong>Sicherheit de Aplicacion:</strong> Configuracion segura de Odoo, actualizaciones regulares.</li>
|
|
<li><strong>Sicherheit de Datos:</strong> Cifrado en reposo y transito, control de Zugriff granular.</li>
|
|
<li><strong>Sicherheit Operacional:</strong> Logs, monitorizacion, respuesta a incidentes.</li>
|
|
</ol>
|
|
|
|
<div class="security-checklist">
|
|
<h4>Checklist de Sicherheit Esencial</h4>
|
|
<div class="checklist-grid">
|
|
<div class="checklist-item">
|
|
<span class="check-icon">[OK]</span>
|
|
<span>Firewall perimetral configurado con reglas minimas</span>
|
|
</div>
|
|
<div class="checklist-item">
|
|
<span class="check-icon">[OK]</span>
|
|
<span>SSL/TLS con certificados validos y configuracion modern</span>
|
|
</div>
|
|
<div class="checklist-item">
|
|
<span class="check-icon">[OK]</span>
|
|
<span>Autenticacion de dos factores (2FA) fuer todos los Benutzer</span>
|
|
</div>
|
|
<div class="checklist-item">
|
|
<span class="check-icon">[OK]</span>
|
|
<span>Backups cifrados con pruebas de restauracion mensuales</span>
|
|
</div>
|
|
<div class="checklist-item">
|
|
<span class="check-icon">[OK]</span>
|
|
<span>Actualizaciones de Sicherheit aplicadas en menos de 72h</span>
|
|
</div>
|
|
<div class="checklist-item">
|
|
<span class="check-icon">[OK]</span>
|
|
<span>Sistema de deteccion de intrusos (IDS) activo</span>
|
|
</div>
|
|
<div class="checklist-item">
|
|
<span class="check-icon">[OK]</span>
|
|
<span>Logs centralizados con retencion de 90+ dias</span>
|
|
</div>
|
|
<div class="checklist-item">
|
|
<span class="check-icon">[OK]</span>
|
|
<span>Segmentacion de red con VLANs dedicadas</span>
|
|
</div>
|
|
<div class="checklist-item">
|
|
<span class="check-icon">[OK]</span>
|
|
<span>Politica de contrasenas robusta implementada</span>
|
|
</div>
|
|
<div class="checklist-item">
|
|
<span class="check-icon">[OK]</span>
|
|
<span>Zugriff SSH solo por clave publica, no password</span>
|
|
</div>
|
|
<div class="checklist-item">
|
|
<span class="check-icon">[OK]</span>
|
|
<span>Datenbank PostgreSQL no expuesta a red publica</span>
|
|
</div>
|
|
<div class="checklist-item">
|
|
<span class="check-icon">[OK]</span>
|
|
<span>Plan de respuesta a incidentes documentado</span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<h3>Configuracion Segura de Odoo</h3>
|
|
|
|
<p>Ajustes especificos en la configuracion de Odoo fuer maximizar la Sicherheit:</p>
|
|
|
|
<ul>
|
|
<li><strong>admin_passwd:</strong> Cambia la contrasena maestra por defecto y utiliza una de al menos 20 caracteres.</li>
|
|
<li><strong>list_db:</strong> Establece a False en produccion fuer ocultar el listado de bases de Daten.</li>
|
|
<li><strong>dbfilter:</strong> Configura un filtro estricto fuer evitar Zugriff a bases de Daten no autorizadas.</li>
|
|
<li><strong>proxy_mode:</strong> Activa si usas reverse proxy fuer que Odoo obtenga IPs reales de Kunden.</li>
|
|
<li><strong>session_cookie:</strong> Configura httponly y secure fuer proteger las cookies de sesion.</li>
|
|
</ul>
|
|
|
|
<h3>Hardening del Sistema Operativo</h3>
|
|
|
|
<p>Medidas de endurecimiento fuer Ubuntu Server:</p>
|
|
|
|
<ul>
|
|
<li>Deshabilita servicios innecesarios con systemctl</li>
|
|
<li>Configura AppArmor o SELinux fuer confinamiento de Prozesse</li>
|
|
<li>Implementa fail2ban fuer proteccion contra fuerza bruta</li>
|
|
<li>Configura auditd fuer registro de eventos de Sicherheit</li>
|
|
<li>Deshabilita IPv6 si no lo utilizas</li>
|
|
<li>Configura unattended-upgrades fuer parches de Sicherheit automaticos</li>
|
|
</ul>
|
|
|
|
<div class="warning-box">
|
|
<h4>Cumplimiento Normativo</h4>
|
|
<p>Si tu organizacion esta sujeta a RGPD, PCI-DSS, HIPAA u otras regulaciones, documenta todas las medidas de Sicherheit implementadas. Considera realizar auditorias de Sicherheit anuales y tests de penetracion fuer validar tu postura de Sicherheit.</p>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Maintenance Section -->
|
|
<section id="mantenimiento" class="content-section fade-in">
|
|
<h2>Responsabilidades de Mantenimiento</h2>
|
|
|
|
<p>El mantenimiento continuo es el Preis de la libertad que ofrece on-premise. Sin un plan de mantenimiento estructurado, tu System se degradara y eventualmente fallara. Aqui detallamos todas las Aufgaben necesarias y su frecuencia recomendada.</p>
|
|
|
|
<h3>Calendario de Mantenimiento</h3>
|
|
|
|
<div class="timeline">
|
|
<div class="timeline-item">
|
|
<h4>Diario</h4>
|
|
<p>Verificacion de backups completados exitosamente. Revision de logs en busca de Fehler criticos. Monitorizacion de uso de disco, memoria y CPU. Verificacion de certificados SSL proximos a expirar.</p>
|
|
</div>
|
|
<div class="timeline-item">
|
|
<h4>Semanal</h4>
|
|
<p>Aplicacion de parches de Sicherheit del System operativo. Revision de logs de Zugriff fuer detectar actividad sospechosa. Verificacion de integridad de archivos criticos. Limpieza de logs antiguos y archivos temporales.</p>
|
|
</div>
|
|
<div class="timeline-item">
|
|
<h4>Mensual</h4>
|
|
<p>Prueba de restauracion de backup completa. Revision de rendimiento y optimizacion de consultas langsams. Actualizacion de documentacion de configuracion. Revision de cuentas de Benutzer y Berechtigungen.</p>
|
|
</div>
|
|
<div class="timeline-item">
|
|
<h4>Trimestral</h4>
|
|
<p>Optimizacion de Datenbank PostgreSQL (VACUUM FULL, REINDEX). Revision de capacidad y planificacion de crecimiento. Actualizacion de Odoo a ultima version estable. Prueba de plan de recuperacion ante desastres.</p>
|
|
</div>
|
|
<div class="timeline-item">
|
|
<h4>Anual</h4>
|
|
<p>Auditoria de Sicherheit completa. Revision de hardware y planificacion de renovacion. Actualizacion mayor de System operativo si aplica. Revision y actualizacion de politicas de Sicherheit.</p>
|
|
</div>
|
|
</div>
|
|
|
|
<h3>Estimacion de Tiempo de Dedicacion</h3>
|
|
|
|
<table class="comparison-table">
|
|
<thead>
|
|
<tr>
|
|
<th>Tamano Empresa</th>
|
|
<th>Horas/Semana</th>
|
|
<th>Perfil Requerido</th>
|
|
<th>Coste Anual Estimado</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Pequena (hasta 25 Benutzer)</td>
|
|
<td>4-8 horas</td>
|
|
<td>Administrador de Systems junior</td>
|
|
<td>3.000-6.000 EUR</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Mediana (25-100 Benutzer)</td>
|
|
<td>8-16 horas</td>
|
|
<td>Administrador senior o DevOps</td>
|
|
<td>8.000-15.000 EUR</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Gross (100+ Benutzer)</td>
|
|
<td>20-40 horas</td>
|
|
<td>Equipo dedicado (2-3 personas)</td>
|
|
<td>25.000-50.000 EUR</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<h3>Herramientas de Monitorizacion Recomendadas</h3>
|
|
|
|
<ul>
|
|
<li><strong>Prometheus + Grafana:</strong> Para metricas de System y aplicacion con dashboards visuales.</li>
|
|
<li><strong>Zabbix:</strong> Monitorizacion completa con alertas y reportes. Ideal fuer Unternehmen con multiples Server.</li>
|
|
<li><strong>ELK Stack:</strong> Elasticsearch, Logstash y Kibana fuer centralizacion y analisis de logs.</li>
|
|
<li><strong>Uptime Kuma:</strong> Monitorizacion de disponibilidad simple y efectiva. Open source.</li>
|
|
<li><strong>pgAdmin:</strong> Administracion visual de PostgreSQL, util fuer optimizacion de consultas.</li>
|
|
</ul>
|
|
|
|
<h3>Estrategia de Backups</h3>
|
|
|
|
<p>Una estrategia de backup robusta sigue la regla 3-2-1:</p>
|
|
|
|
<ul>
|
|
<li><strong>3 copias:</strong> Datos originales mas dos backups.</li>
|
|
<li><strong>2 medios diferentes:</strong> Por ejemplo, disco local y almacenamiento cloud/cinta.</li>
|
|
<li><strong>1 copia offsite:</strong> En ubicacion geograficamente sefuerda.</li>
|
|
</ul>
|
|
|
|
<p>Para Odoo, los backups deben incluir:</p>
|
|
|
|
<ol>
|
|
<li>Datenbank PostgreSQL completa (pg_dump)</li>
|
|
<li>Directorio filestore con todos los adjuntos</li>
|
|
<li>Archivos de configuracion de Odoo</li>
|
|
<li>Configuracion del Server (Nginx, System, etc.)</li>
|
|
<li>Modulos personalizados desarrollados internamente</li>
|
|
</ol>
|
|
</section>
|
|
|
|
<!-- Cost Comparison Chart -->
|
|
<section class="chart-section fade-in">
|
|
<h3 id="grafico-comparativa">Comfuertiva de Costes Acumulados a 5 Anios</h3>
|
|
<p>Visualizacion del coste acumulado fuer diferentes opciones de hosting Odoo durante 5 anios. Incluye inversion inicial, mantenimiento, licencias y actualizaciones.</p>
|
|
<div class="chart-container" id="cost-comparison-chart"></div>
|
|
</section>
|
|
|
|
<!-- TCO Analysis -->
|
|
<section class="content-section fade-in">
|
|
<h2>Analisis TCO Detallado: On-Premise vs Cloud</h2>
|
|
|
|
<p>El Coste Total de Propiedad (TCO) es el factor decisivo fuer muchas organizaciones. Un analisis riguroso debe considerar no solo los costes directos sino tambien los indirectos y ocultos de cada opcion.</p>
|
|
|
|
<h3>Componentes del TCO On-Premise</h3>
|
|
|
|
<h4>Costes Iniciales (CAPEX)</h4>
|
|
<ul>
|
|
<li>Hardware de Server: 8.000-50.000 EUR (segun escala)</li>
|
|
<li>Infraestructura de red: 2.000-10.000 EUR</li>
|
|
<li>Licencias de software (si aplica): 0-5.000 EUR</li>
|
|
<li>Implementacion e instalacion: 3.000-15.000 EUR</li>
|
|
<li>Formacion del equipo IT: 1.500-5.000 EUR</li>
|
|
</ul>
|
|
|
|
<h4>Costes Recurrentes (OPEX)</h4>
|
|
<ul>
|
|
<li>Electricidad y refrigeracion: 1.200-4.800 EUR/anio</li>
|
|
<li>Mantenimiento de hardware: 1.000-5.000 EUR/anio</li>
|
|
<li>Personal IT (porcentaje dedicado): 3.000-50.000 EUR/anio</li>
|
|
<li>Conectividad Internet: 600-3.000 EUR/anio</li>
|
|
<li>Renovacion de hardware (amortizacion 5 anios): 1.600-10.000 EUR/anio</li>
|
|
</ul>
|
|
|
|
<h3>Componentes del TCO Cloud</h3>
|
|
|
|
<ul>
|
|
<li>Odoo.sh: 25-44 EUR/Benutzer/mes (incluye Enterprise)</li>
|
|
<li>Hosting gestionado (Odoo4projects, etc.): 29-199 EUR/mes fijo</li>
|
|
<li>VPS autogestionado: 24-100 EUR/mes + tiempo de gestion</li>
|
|
<li>Cloud Enterprise (AWS/Azure): 50-500 EUR/mes infraestructura</li>
|
|
</ul>
|
|
|
|
<h3>Punto de Equilibrio</h3>
|
|
|
|
<div class="highlight-box">
|
|
<h4>Calculo del Breakeven</h4>
|
|
<p>Para una Unternehmen de 50 Benutzer con Odoo Enterprise, el punto de equilibrio zwischen on-premise y Odoo.sh se alcanza aproximadamente en el mes 42 (3.5 anios). A partir de ese momento, on-premise resulta mas economico acumulativamente. Para Unternehmen con mas Benutzer o que usan Community, el breakeven se alcanza antes.</p>
|
|
</div>
|
|
|
|
<table class="comparison-table">
|
|
<thead>
|
|
<tr>
|
|
<th>Escenario</th>
|
|
<th>On-Premise (5 anios)</th>
|
|
<th>Cloud (5 anios)</th>
|
|
<th>Diferencia</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>25 Benutzer, Community</td>
|
|
<td>45.000 EUR</td>
|
|
<td>52.000 EUR</td>
|
|
<td>+7.000 EUR cloud</td>
|
|
</tr>
|
|
<tr>
|
|
<td>50 Benutzer, Community</td>
|
|
<td>65.000 EUR</td>
|
|
<td>87.000 EUR</td>
|
|
<td>+22.000 EUR cloud</td>
|
|
</tr>
|
|
<tr>
|
|
<td>50 Benutzer, Enterprise</td>
|
|
<td>95.000 EUR</td>
|
|
<td>132.000 EUR</td>
|
|
<td>+37.000 EUR cloud</td>
|
|
</tr>
|
|
<tr>
|
|
<td>100 Benutzer, Enterprise</td>
|
|
<td>145.000 EUR</td>
|
|
<td>264.000 EUR</td>
|
|
<td>+119.000 EUR cloud</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<p><em>* Estimaciones basadas en Preise de enero 2026. Los costes de personal IT asumen dedicacion parcial compartida con otras funciones.</em></p>
|
|
</section>
|
|
|
|
<!-- Migration Section -->
|
|
<section id="migracion" class="content-section fade-in">
|
|
<h2>Migracion a On-Premise</h2>
|
|
|
|
<p>Si actualmente utilizas Odoo en la Cloud y decides migrar a on-premise, el Prozess requiere planificacion cuidadosa. Una migracion mal ejecutada puede resultar en perdida de Daten o tiempo de inactividad prolongado.</p>
|
|
|
|
<h3>Prozess de Migracion Paso a Paso</h3>
|
|
|
|
<ol>
|
|
<li><strong>Phase de Planificacion (2-4 semanas):</strong>
|
|
<ul>
|
|
<li>Inventario completo de modulos y personalizaciones</li>
|
|
<li>Documentacion de integraciones externas</li>
|
|
<li>Definicion de requisitos de hardware</li>
|
|
<li>Planificacion de ventana de mantenimiento</li>
|
|
</ul>
|
|
</li>
|
|
<li><strong>Phase de Prefuercion (2-3 semanas):</strong>
|
|
<ul>
|
|
<li>Adquisicion e instalacion de hardware</li>
|
|
<li>Configuracion del System operativo y servicios</li>
|
|
<li>Instalacion de Odoo y modulos</li>
|
|
<li>Configuracion de red y Sicherheit</li>
|
|
</ul>
|
|
</li>
|
|
<li><strong>Phase de Migracion de Datos (1-2 dias):</strong>
|
|
<ul>
|
|
<li>Backup final del System cloud</li>
|
|
<li>Exportacion de Datenbank PostgreSQL</li>
|
|
<li>Transferencia del filestore</li>
|
|
<li>Importacion en Server on-premise</li>
|
|
</ul>
|
|
</li>
|
|
<li><strong>Phase de Validacion (1 semana):</strong>
|
|
<ul>
|
|
<li>Pruebas de funcionalidad completas</li>
|
|
<li>Verificacion de integraciones</li>
|
|
<li>Pruebas de rendimiento</li>
|
|
<li>Validacion de backups</li>
|
|
</ul>
|
|
</li>
|
|
<li><strong>Phase de Cutover:</strong>
|
|
<ul>
|
|
<li>Cambio de DNS</li>
|
|
<li>Comunicacion a Benutzer</li>
|
|
<li>Monitorizacion intensiva primeras 48-72 horas</li>
|
|
</ul>
|
|
</li>
|
|
</ol>
|
|
|
|
<div class="warning-box">
|
|
<h4>Riesgos de Migracion</h4>
|
|
<p>Mantén el System cloud operativo durante al menos 2 semanas despues de la migracion como plan de contingencia. Documenta el Prozess de rollback antes de comenzar. Considera contratar consultoria especializada fuer migraciones criticas.</p>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- CTA Banner -->
|
|
<section class="cta-banner fade-in">
|
|
<h3>Necesitas Ayuda con tu Implementacion On-Premise?</h3>
|
|
<p>Nuestro equipo de expertos puede asesorarte en la planificacion, implementacion y mantenimiento de tu infraestructura Odoo on-premise. Consultoria personalizada fuer tu caso especifico.</p>
|
|
<a href="/contacto/" class="cta-btn">Solicitar Consultoria Gratuita</a>
|
|
</section>
|
|
|
|
<!-- FAQ Section -->
|
|
<section id="faq" class="faq-section fade-in">
|
|
<h2>Haeufig gestellte Fragen ueber Odoo On-Premise</h2>
|
|
|
|
<div class="faq-item">
|
|
<div class="faq-question">Cuales son los requisitos minimos de hardware fuer Odoo On-Premise?</div>
|
|
<div class="faq-answer">Para Odoo 18 Community on-premise necesitas minimo: CPU de 4 nucleos (recomendado 8), 16GB RAM (recomendado 32GB), 500GB SSD NVMe, y conexion de red de 1Gbps. Para Enterprise, duplica estos valores. Estos requisitos asumen hasta 25 Benutzer simultaneos.</div>
|
|
</div>
|
|
|
|
<div class="faq-item">
|
|
<div class="faq-question">Cuanto cuesta implementar Odoo On-Premise vs Cloud?</div>
|
|
<div class="faq-answer">La inversion inicial on-premise oscila zwischen 8.000-25.000 EUR en hardware, mas 3.000-8.000 EUR anuales en mantenimiento. El cloud cuesta 50-200 EUR/mes dependiendo del Lieferant y Benutzer. El punto de equilibrio donde on-premise resulta mas economico se alcanza aproximadamente en 3-4 anios fuer Unternehmen medianas con 50+ Benutzer.</div>
|
|
</div>
|
|
|
|
<div class="faq-item">
|
|
<div class="faq-question">Que medidas de Sicherheit necesita un Server Odoo On-Premise?</div>
|
|
<div class="faq-answer">Un Server Odoo on-premise requiere: firewall perimetral y de aplicacion, SSL/TLS con certificados validos, segmentacion de red con VLANs, backups cifrados con pruebas regulares, actualizaciones de Sicherheit semanales, System de deteccion de intrusos (IDS), autenticacion de dos factores fuer Benutzer, y monitorizacion continua de logs.</div>
|
|
</div>
|
|
|
|
<div class="faq-item">
|
|
<div class="faq-question">Es mejor Odoo On-Premise o en la Cloud fuer mi Unternehmen?</div>
|
|
<div class="faq-answer">Depende de tus necesidades especificas. On-Premise es mejor si tienes requisitos estrictos de soberania de Daten, equipo IT interno capacitado, necesitas maxima personalizacion, tienes mas de 50 Benutzer, o requisitos de compliance especificos. Cloud es preferible fuer startups, Unternehmen sin IT dedicado, cuando la escalabilidad rapida es prioritaria, o si prefieres costes predecibles mensuales.</div>
|
|
</div>
|
|
|
|
<div class="faq-item">
|
|
<div class="faq-question">Que Aufgaben de mantenimiento requiere Odoo On-Premise?</div>
|
|
<div class="faq-answer">El mantenimiento regular incluye: backups diarios con verificacion, actualizaciones de Sicherheit semanales, monitorizacion continua de rendimiento, optimizacion de Datenbank PostgreSQL trimestral (VACUUM, REINDEX), renovacion de certificados SSL, actualizaciones de Odoo (minimo 2 veces al anio), y pruebas de recuperacion ante desastres periodicas.</div>
|
|
</div>
|
|
|
|
<div class="faq-item">
|
|
<div class="faq-question">Como configuro la red fuer Odoo On-Premise?</div>
|
|
<div class="faq-answer">La configuracion de red optima incluye: VLAN dedicada fuer el Server Odoo sefuerda de la red corporativa, reverse proxy Nginx fuer SSL termination y cache, balanceador de carga si necesitas alta disponibilidad, DNS interno y externo correctamente configurado, VPN (WireGuard u OpenVPN) fuer Zugriff remoto seguro, y reglas de firewall estrictas abriendo solo puertos 80, 443 zu Internet.</div>
|
|
</div>
|
|
|
|
<div class="faq-item">
|
|
<div class="faq-question">Puedo migrar de Odoo Cloud a On-Premise?</div>
|
|
<div class="faq-answer">Si, la migracion de cloud a on-premise es totalmente posible. El Prozess implica: exportar la Datenbank PostgreSQL completa von el cloud, copiar el filestore con todos los archivos adjuntos, prefuerr el Server on-premise con la misma version de Odoo, restaurar la Datenbank y filestore, ajustar configuracion y DNS, y realizar pruebas exhaustivas antes del cutover definitivo.</div>
|
|
</div>
|
|
|
|
<div class="faq-item">
|
|
<div class="faq-question">Que System operativo es mejor fuer Odoo On-Premise?</div>
|
|
<div class="faq-answer">Ubuntu Server 22.04 LTS o 24.04 LTS son las opciones recomendadas oficialmente por Odoo debido a su estabilidad, Support a largo plazo y amplia comunidad. Debian 12 es tambien una excelente alternativa con excelente estabilidad. Evita Windows Server ya que Odoo tiene significativamente mejor rendimiento y compatibilidad en Systems Linux, ademas de costes de licencia adicionales.</div>
|
|
</div>
|
|
</section>
|
|
|
|
<!-- Related Articles -->
|
|
<section id="relacionados" class="content-section fade-in">
|
|
<h2>Articulos Relacionados</h2>
|
|
|
|
<div class="related-articles">
|
|
<a href="/de/odoo-hosting/mejor-hosting-odoo-2026/" class="related-card">
|
|
<div class="related-card-image">CLOUD</div>
|
|
<div class="related-card-content">
|
|
<h4>Mejor Hosting Odoo 2026: Comfuertiva</h4>
|
|
<p>Analisis de 15+ Lieferanten de hosting cloud</p>
|
|
</div>
|
|
</a>
|
|
|
|
<a href="/de/odoo-hosting/requisitos-hosting-odoo-servidor-2025/" class="related-card">
|
|
<div class="related-card-image">SPECS</div>
|
|
<div class="related-card-content">
|
|
<h4>Requisitos Tecnicos fuer Odoo</h4>
|
|
<p>Especificaciones detalladas de Server</p>
|
|
</div>
|
|
</a>
|
|
|
|
<a href="/de/odoo-hosting/vps-hosting-odoo-servidor-virtual-2025/" class="related-card">
|
|
<div class="related-card-image">VPS</div>
|
|
<div class="related-card-content">
|
|
<h4>VPS fuer Odoo: Guia Completa</h4>
|
|
<p>Configuracion paso a paso de VPS</p>
|
|
</div>
|
|
</a>
|
|
|
|
<a href="/de/odoo-hosting/precios-hosting-odoo-costos-2025/" class="related-card">
|
|
<div class="related-card-image">EUR</div>
|
|
<div class="related-card-content">
|
|
<h4>Preise de Hosting Odoo</h4>
|
|
<p>Comfuertiva detallada de Kosten</p>
|
|
</div>
|
|
</a>
|
|
|
|
<a href="/de/odoo-hosting/odoo-sh-hosting-oficial-plataforma-2025/" class="related-card">
|
|
<div class="related-card-image">SH</div>
|
|
<div class="related-card-content">
|
|
<h4>Odoo.sh: Analisis Completo</h4>
|
|
<p>Todo ueber la plataforma oficial</p>
|
|
</div>
|
|
</a>
|
|
|
|
<a href="/de/odoo-hosting/hosting-odoo-espana-proveedores-2025/" class="related-card">
|
|
<div class="related-card-image">ES</div>
|
|
<div class="related-card-content">
|
|
<h4>Hosting Odoo en Espana</h4>
|
|
<p>Lieferanten locales con Support espanol</p>
|
|
</div>
|
|
</a>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
|
|
<!-- EEAT Author Section -->
|
|
<div id="eeat-section"></div>
|
|
|
|
<div id="footer"><footer class="site-footer"><div class="container"><div class="footer-cols"><div><strong>Odoo Expertos</strong></div><nav class="footer-nav"><a href="/de/">Start</a><a href="/de/odoo/">Odoo</a><a href="/de/odoo-ia/">Odoo KI</a><a href="/de/odoo-hosting/">Odoo Hosting</a><a href="/de/mapa-del-sitio/">Sitemap</a></nav></div><div class="footer-bottom"><small>© 2026 Odoo Expertos</small></div></div></footer></div><nav class="footer-nav"><a href="/de/">Start</a><a href="/de/odoo/">Odoo</a><a href="/de/odoo-ia/">Odoo KI</a><a href="/de/odoo-hosting/">Odoo Hosting</a><a href="/de/mapa-del-sitio/">Sitemap</a></nav></div><div class="footer-bottom"><small>© 2026 Odoo Expertos</small></div></div></footer></div>
|
|
|
|
<!-- Scripts -->
|
|
<script src="/js/language-router.js"></script>
|
|
<script src="/components/header.min.js"></script>
|
|
<script src="/components/footer.min.js"></script>
|
|
<script src="/components/eeat.min.js"></script>
|
|
<script src="/js/cookie-banner.min.js"></script>
|
|
|
|
<!-- D3.js -->
|
|
<script src="https://d3js.org/d3.v7.min.js"></script>
|
|
|
|
<script>
|
|
// Initialize components
|
|
// Scroll animation observer
|
|
const observer = new IntersectionObserver((entries) => {
|
|
entries.forEach(entry => {
|
|
if (entry.isIntersecting) {
|
|
entry.target.classList.add('visible');
|
|
}
|
|
});
|
|
}, { threshold: 0.1 });
|
|
|
|
document.querySelectorAll('.fade-in').forEach(el => observer.observe(el));
|
|
|
|
// FAQ Toggle
|
|
document.querySelectorAll('.faq-question').forEach(question => {
|
|
question.addEventListener('click', () => {
|
|
const item = question.parentElement;
|
|
item.classList.toggle('open');
|
|
});
|
|
});
|
|
|
|
// Tooltip
|
|
const tooltip = d3.select('body').append('div')
|
|
.attr('class', 'd3-tooltip')
|
|
.style('opacity', 0);
|
|
|
|
// Color scales
|
|
const colorPrimary = '#FF6B35';
|
|
const colorSecondary = '#4CAF50';
|
|
const colorTertiary = '#2196F3';
|
|
const colorQuaternary = '#9C27B0';
|
|
|
|
// TCO Chart Data
|
|
const tcoData = {
|
|
months: Array.from({length: 61}, (_, i) => i),
|
|
onPremise: [],
|
|
odooSh: [],
|
|
managedCloud: [],
|
|
vpsManaged: []
|
|
};
|
|
|
|
// Calculate cumulative costs
|
|
const onPremiseInitial = 20000;
|
|
const onPremiseMonthly = 500;
|
|
const odooShMonthly = 50 * 35; // 50 users * 35 EUR
|
|
const managedCloudMonthly = 149;
|
|
const vpsManagedMonthly = 89;
|
|
|
|
for (let i = 0; i <= 60; i++) {
|
|
tcoData.onPremise.push(onPremiseInitial + (i * onPremiseMonthly));
|
|
tcoData.odooSh.push(i * odooShMonthly);
|
|
tcoData.managedCloud.push(i * managedCloudMonthly);
|
|
tcoData.vpsManaged.push(i * vpsManagedMonthly);
|
|
}
|
|
|
|
// TCO Line Chart
|
|
function renderTCOChart() {
|
|
const container = d3.select('#tco-chart');
|
|
if (container.empty()) return;
|
|
|
|
const width = container.node().getBoundingClientRect().width;
|
|
const height = 400;
|
|
const margin = { top: 40, right: 120, bottom: 60, left: 80 };
|
|
|
|
container.html('');
|
|
|
|
const svg = container.append('svg')
|
|
.attr('width', width)
|
|
.attr('height', height);
|
|
|
|
const xScale = d3.scaleLinear()
|
|
.domain([0, 60])
|
|
.range([margin.left, width - margin.right]);
|
|
|
|
const yScale = d3.scaleLinear()
|
|
.domain([0, Math.max(...tcoData.odooSh) * 1.1])
|
|
.range([height - margin.bottom, margin.top]);
|
|
|
|
// Grid lines
|
|
svg.append('g')
|
|
.attr('class', 'grid')
|
|
.attr('transform', `translate(0,${height - margin.bottom})`)
|
|
.call(d3.axisBottom(xScale).tickSize(-(height - margin.top - margin.bottom)).tickFormat(''))
|
|
.selectAll('line').attr('stroke', '#333');
|
|
|
|
svg.append('g')
|
|
.attr('class', 'grid')
|
|
.attr('transform', `translate(${margin.left},0)`)
|
|
.call(d3.axisLeft(yScale).tickSize(-(width - margin.left - margin.right)).tickFormat(''))
|
|
.selectAll('line').attr('stroke', '#333');
|
|
|
|
// Axes
|
|
svg.append('g')
|
|
.attr('transform', `translate(0,${height - margin.bottom})`)
|
|
.call(d3.axisBottom(xScale).tickFormat(d => `${d} mes`))
|
|
.attr('color', '#888');
|
|
|
|
svg.append('g')
|
|
.attr('transform', `translate(${margin.left},0)`)
|
|
.call(d3.axisLeft(yScale).tickFormat(d => `${(d/1000).toFixed(0)}K`))
|
|
.attr('color', '#888');
|
|
|
|
// Axis labels
|
|
svg.append('text')
|
|
.attr('x', width / 2)
|
|
.attr('y', height - 10)
|
|
.attr('text-anchor', 'middle')
|
|
.attr('fill', '#888')
|
|
.attr('font-size', '14px')
|
|
.text('Meses von implementacion');
|
|
|
|
svg.append('text')
|
|
.attr('transform', 'rotate(-90)')
|
|
.attr('x', -height / 2)
|
|
.attr('y', 20)
|
|
.attr('text-anchor', 'middle')
|
|
.attr('fill', '#888')
|
|
.attr('font-size', '14px')
|
|
.text('Coste Acumulado (EUR)');
|
|
|
|
// Line generator
|
|
const line = d3.line()
|
|
.x((d, i) => xScale(i))
|
|
.y(d => yScale(d))
|
|
.curve(d3.curveMonotoneX);
|
|
|
|
const datasets = [
|
|
{ name: 'On-Premise', data: tcoData.onPremise, color: colorPrimary },
|
|
{ name: 'Odoo.sh (50 users)', data: tcoData.odooSh, color: colorTertiary },
|
|
{ name: 'Hosting Gestionado', data: tcoData.managedCloud, color: colorSecondary },
|
|
{ name: 'VPS Gestionado', data: tcoData.vpsManaged, color: colorQuaternary }
|
|
];
|
|
|
|
datasets.forEach((dataset, idx) => {
|
|
const path = svg.append('path')
|
|
.datum(dataset.data)
|
|
.attr('fill', 'none')
|
|
.attr('stroke', dataset.color)
|
|
.attr('stroke-width', 3)
|
|
.attr('d', line);
|
|
|
|
const totalLength = path.node().getTotalLength();
|
|
path.attr('stroke-dasharray', totalLength)
|
|
.attr('stroke-dashoffset', totalLength)
|
|
.transition()
|
|
.duration(2000)
|
|
.delay(idx * 300)
|
|
.ease(d3.easeLinear)
|
|
.attr('stroke-dashoffset', 0);
|
|
});
|
|
|
|
// Breakeven point annotation
|
|
const breakevenMonth = 42;
|
|
const breakevenValue = tcoData.onPremise[breakevenMonth];
|
|
|
|
svg.append('circle')
|
|
.attr('cx', xScale(breakevenMonth))
|
|
.attr('cy', yScale(breakevenValue))
|
|
.attr('r', 8)
|
|
.attr('fill', colorPrimary)
|
|
.attr('stroke', '#fff')
|
|
.attr('stroke-width', 2)
|
|
.style('opacity', 0)
|
|
.transition()
|
|
.delay(2500)
|
|
.duration(500)
|
|
.style('opacity', 1);
|
|
|
|
svg.append('text')
|
|
.attr('x', xScale(breakevenMonth) + 10)
|
|
.attr('y', yScale(breakevenValue) - 15)
|
|
.attr('fill', '#fff')
|
|
.attr('font-size', '12px')
|
|
.style('opacity', 0)
|
|
.text('Punto de equilibrio')
|
|
.transition()
|
|
.delay(2500)
|
|
.duration(500)
|
|
.style('opacity', 1);
|
|
|
|
// Legend
|
|
const legend = svg.append('g')
|
|
.attr('transform', `translate(${width - margin.right + 20}, ${margin.top})`);
|
|
|
|
datasets.forEach((dataset, idx) => {
|
|
const g = legend.append('g')
|
|
.attr('transform', `translate(0, ${idx * 25})`);
|
|
|
|
g.append('line')
|
|
.attr('x1', 0)
|
|
.attr('x2', 20)
|
|
.attr('y1', 0)
|
|
.attr('y2', 0)
|
|
.attr('stroke', dataset.color)
|
|
.attr('stroke-width', 3);
|
|
|
|
g.append('text')
|
|
.attr('x', 25)
|
|
.attr('y', 4)
|
|
.attr('fill', '#b0b0b0')
|
|
.attr('font-size', '11px')
|
|
.text(dataset.name);
|
|
});
|
|
}
|
|
|
|
// Architecture Diagram
|
|
function renderArchitectureChart() {
|
|
const container = d3.select('#architecture-chart');
|
|
if (container.empty()) return;
|
|
|
|
const width = container.node().getBoundingClientRect().width;
|
|
const height = 450;
|
|
|
|
container.html('');
|
|
|
|
const svg = container.append('svg')
|
|
.attr('width', width)
|
|
.attr('height', height);
|
|
|
|
// Define components
|
|
const components = [
|
|
{ id: 'internet', label: 'Internet', x: width / 2, y: 40, width: 120, height: 40, color: '#666' },
|
|
{ id: 'firewall', label: 'Firewall', x: width / 2, y: 110, width: 100, height: 35, color: '#f44336' },
|
|
{ id: 'loadbalancer', label: 'Load Balancer', x: width / 2, y: 170, width: 130, height: 35, color: '#FF6B35' },
|
|
{ id: 'nginx1', label: 'Nginx (Proxy)', x: width / 3, y: 240, width: 110, height: 35, color: '#4CAF50' },
|
|
{ id: 'nginx2', label: 'Nginx (Proxy)', x: (2 * width) / 3, y: 240, width: 110, height: 35, color: '#4CAF50' },
|
|
{ id: 'odoo1', label: 'Odoo Server 1', x: width / 4, y: 310, width: 120, height: 40, color: '#2196F3' },
|
|
{ id: 'odoo2', label: 'Odoo Server 2', x: width / 2, y: 310, width: 120, height: 40, color: '#2196F3' },
|
|
{ id: 'odoo3', label: 'Odoo Server 3', x: (3 * width) / 4, y: 310, width: 120, height: 40, color: '#2196F3' },
|
|
{ id: 'postgres', label: 'PostgreSQL (HA)', x: width / 2, y: 400, width: 180, height: 40, color: '#9C27B0' }
|
|
];
|
|
|
|
// Define connections
|
|
const connections = [
|
|
{ from: 'internet', to: 'firewall' },
|
|
{ from: 'firewall', to: 'loadbalancer' },
|
|
{ from: 'loadbalancer', to: 'nginx1' },
|
|
{ from: 'loadbalancer', to: 'nginx2' },
|
|
{ from: 'nginx1', to: 'odoo1' },
|
|
{ from: 'nginx1', to: 'odoo2' },
|
|
{ from: 'nginx2', to: 'odoo2' },
|
|
{ from: 'nginx2', to: 'odoo3' },
|
|
{ from: 'odoo1', to: 'postgres' },
|
|
{ from: 'odoo2', to: 'postgres' },
|
|
{ from: 'odoo3', to: 'postgres' }
|
|
];
|
|
|
|
// Draw connections first (behind nodes)
|
|
connections.forEach((conn, idx) => {
|
|
const from = components.find(c => c.id === conn.from);
|
|
const to = components.find(c => c.id === conn.to);
|
|
|
|
svg.append('line')
|
|
.attr('x1', from.x)
|
|
.attr('y1', from.y + from.height / 2)
|
|
.attr('x2', to.x)
|
|
.attr('y2', to.y - to.height / 2)
|
|
.attr('stroke', '#555')
|
|
.attr('stroke-width', 2)
|
|
.attr('stroke-dasharray', function() {
|
|
return Math.sqrt(Math.pow(to.x - from.x, 2) + Math.pow(to.y - from.y, 2));
|
|
})
|
|
.attr('stroke-dashoffset', function() {
|
|
return Math.sqrt(Math.pow(to.x - from.x, 2) + Math.pow(to.y - from.y, 2));
|
|
})
|
|
.transition()
|
|
.duration(1000)
|
|
.delay(idx * 100)
|
|
.attr('stroke-dashoffset', 0);
|
|
});
|
|
|
|
// Draw nodes
|
|
components.forEach((comp, idx) => {
|
|
const g = svg.append('g')
|
|
.attr('transform', `translate(${comp.x}, ${comp.y})`)
|
|
.style('opacity', 0)
|
|
.style('cursor', 'pointer');
|
|
|
|
g.append('rect')
|
|
.attr('x', -comp.width / 2)
|
|
.attr('y', -comp.height / 2)
|
|
.attr('width', comp.width)
|
|
.attr('height', comp.height)
|
|
.attr('rx', 6)
|
|
.attr('fill', comp.color)
|
|
.attr('fill-opacity', 0.2)
|
|
.attr('stroke', comp.color)
|
|
.attr('stroke-width', 2);
|
|
|
|
g.append('text')
|
|
.attr('text-anchor', 'middle')
|
|
.attr('dominant-baseline', 'middle')
|
|
.attr('fill', '#e0e0e0')
|
|
.attr('font-size', '12px')
|
|
.attr('font-weight', '500')
|
|
.text(comp.label);
|
|
|
|
g.on('mouseover', function(event) {
|
|
d3.select(this).select('rect').attr('fill-opacity', 0.4);
|
|
tooltip.transition().duration(200).style('opacity', 1);
|
|
tooltip.html(`<strong>${comp.label}</strong><br>Componente de arquitectura on-premise`)
|
|
.style('left', (event.pageX + 15) + 'px')
|
|
.style('top', (event.pageY - 28) + 'px');
|
|
})
|
|
.on('mouseout', function() {
|
|
d3.select(this).select('rect').attr('fill-opacity', 0.2);
|
|
tooltip.transition().duration(200).style('opacity', 0);
|
|
});
|
|
|
|
g.transition()
|
|
.duration(500)
|
|
.delay(idx * 150)
|
|
.style('opacity', 1);
|
|
});
|
|
|
|
// Add labels for zones
|
|
svg.append('text')
|
|
.attr('x', 20)
|
|
.attr('y', 80)
|
|
.attr('fill', '#666')
|
|
.attr('font-size', '11px')
|
|
.text('ZONA DMZ');
|
|
|
|
svg.append('text')
|
|
.attr('x', 20)
|
|
.attr('y', 280)
|
|
.attr('fill', '#666')
|
|
.attr('font-size', '11px')
|
|
.text('ZONA APLICACION');
|
|
|
|
svg.append('text')
|
|
.attr('x', 20)
|
|
.attr('y', 420)
|
|
.attr('fill', '#666')
|
|
.attr('font-size', '11px')
|
|
.text('ZONA DATOS');
|
|
}
|
|
|
|
// Cost Comparison Bar Chart
|
|
function renderCostComparisonChart() {
|
|
const container = d3.select('#cost-comparison-chart');
|
|
if (container.empty()) return;
|
|
|
|
const width = container.node().getBoundingClientRect().width;
|
|
const height = 400;
|
|
const margin = { top: 40, right: 30, bottom: 100, left: 80 };
|
|
|
|
container.html('');
|
|
|
|
const svg = container.append('svg')
|
|
.attr('width', width)
|
|
.attr('height', height);
|
|
|
|
const data = [
|
|
{ option: 'On-Premise\n(50 Benutzer)', year1: 25000, year2: 6000, year3: 6000, year4: 6000, year5: 6000, total: 49000 },
|
|
{ option: 'Odoo.sh\n(50 Benutzer)', year1: 21000, year2: 21000, year3: 21000, year4: 21000, year5: 21000, total: 105000 },
|
|
{ option: 'Hosting Gestionado\n(ilimitado)', year1: 1788, year2: 1788, year3: 1788, year4: 1788, year5: 1788, total: 8940 },
|
|
{ option: 'VPS Autogestionado', year1: 1068, year2: 1068, year3: 1068, year4: 1068, year5: 1068, total: 5340 }
|
|
];
|
|
|
|
const categories = ['year1', 'year2', 'year3', 'year4', 'year5'];
|
|
const categoryLabels = ['Anio 1', 'Anio 2', 'Anio 3', 'Anio 4', 'Anio 5'];
|
|
const colors = [colorPrimary, '#FF8A50', '#FFA726', '#FFB74D', '#FFCC80'];
|
|
|
|
const x0 = d3.scaleBand()
|
|
.domain(data.map(d => d.option))
|
|
.range([margin.left, width - margin.right])
|
|
.paddingInner(0.2);
|
|
|
|
const x1 = d3.scaleBand()
|
|
.domain(categories)
|
|
.range([0, x0.bandwidth()])
|
|
.padding(0.05);
|
|
|
|
const y = d3.scaleLinear()
|
|
.domain([0, d3.max(data, d => d.year1) * 1.1])
|
|
.range([height - margin.bottom, margin.top]);
|
|
|
|
// Axes
|
|
svg.append('g')
|
|
.attr('transform', `translate(0,${height - margin.bottom})`)
|
|
.call(d3.axisBottom(x0))
|
|
.selectAll('text')
|
|
.attr('fill', '#b0b0b0')
|
|
.attr('font-size', '11px')
|
|
.attr('text-anchor', 'middle')
|
|
.each(function() {
|
|
const text = d3.select(this);
|
|
const words = text.text().split('\n');
|
|
text.text('');
|
|
words.forEach((word, i) => {
|
|
text.append('tspan')
|
|
.attr('x', 0)
|
|
.attr('dy', i === 0 ? '0.6em' : '1.2em')
|
|
.text(word);
|
|
});
|
|
});
|
|
|
|
svg.append('g')
|
|
.attr('transform', `translate(${margin.left},0)`)
|
|
.call(d3.axisLeft(y).tickFormat(d => `${(d/1000).toFixed(0)}K`))
|
|
.attr('color', '#888');
|
|
|
|
// Bars
|
|
const groups = svg.selectAll('.bar-group')
|
|
.data(data)
|
|
.join('g')
|
|
.attr('class', 'bar-group')
|
|
.attr('transform', d => `translate(${x0(d.option)},0)`);
|
|
|
|
categories.forEach((cat, catIdx) => {
|
|
groups.append('rect')
|
|
.attr('x', x1(cat))
|
|
.attr('width', x1.bandwidth())
|
|
.attr('y', height - margin.bottom)
|
|
.attr('height', 0)
|
|
.attr('fill', colors[catIdx])
|
|
.attr('rx', 2)
|
|
.style('cursor', 'pointer')
|
|
.on('mouseover', function(event, d) {
|
|
d3.select(this).attr('fill-opacity', 0.8);
|
|
tooltip.transition().duration(200).style('opacity', 1);
|
|
tooltip.html(`<strong>${d.option.replace('\n', ' ')}</strong><br>${categoryLabels[catIdx]}: ${d[cat].toLocaleString()} EUR`)
|
|
.style('left', (event.pageX + 15) + 'px')
|
|
.style('top', (event.pageY - 28) + 'px');
|
|
})
|
|
.on('mouseout', function() {
|
|
d3.select(this).attr('fill-opacity', 1);
|
|
tooltip.transition().duration(200).style('opacity', 0);
|
|
})
|
|
.transition()
|
|
.duration(800)
|
|
.delay((d, i) => i * 100 + catIdx * 50)
|
|
.attr('y', d => y(d[cat]))
|
|
.attr('height', d => height - margin.bottom - y(d[cat]));
|
|
});
|
|
|
|
// Legend
|
|
const legend = svg.append('g')
|
|
.attr('transform', `translate(${width - 150}, ${margin.top})`);
|
|
|
|
categoryLabels.forEach((label, idx) => {
|
|
const g = legend.append('g')
|
|
.attr('transform', `translate(0, ${idx * 22})`);
|
|
|
|
g.append('rect')
|
|
.attr('width', 15)
|
|
.attr('height', 15)
|
|
.attr('fill', colors[idx])
|
|
.attr('rx', 2);
|
|
|
|
g.append('text')
|
|
.attr('x', 20)
|
|
.attr('y', 12)
|
|
.attr('fill', '#b0b0b0')
|
|
.attr('font-size', '11px')
|
|
.text(label);
|
|
});
|
|
|
|
// Total labels
|
|
svg.selectAll('.total-label')
|
|
.data(data)
|
|
.join('text')
|
|
.attr('class', 'total-label')
|
|
.attr('x', d => x0(d.option) + x0.bandwidth() / 2)
|
|
.attr('y', margin.top - 10)
|
|
.attr('text-anchor', 'middle')
|
|
.attr('fill', '#888')
|
|
.attr('font-size', '11px')
|
|
.style('opacity', 0)
|
|
.text(d => `Total: ${(d.total/1000).toFixed(1)}K`)
|
|
.transition()
|
|
.delay(1500)
|
|
.duration(500)
|
|
.style('opacity', 1);
|
|
}
|
|
|
|
// Initialize charts when visible
|
|
const chartObserver = new IntersectionObserver((entries) => {
|
|
entries.forEach(entry => {
|
|
if (entry.isIntersecting) {
|
|
const id = entry.target.id;
|
|
setTimeout(() => {
|
|
if (id === 'tco-chart') renderTCOChart();
|
|
if (id === 'architecture-chart') renderArchitectureChart();
|
|
if (id === 'cost-comparison-chart') renderCostComparisonChart();
|
|
}, 100);
|
|
chartObserver.unobserve(entry.target);
|
|
}
|
|
});
|
|
}, { threshold: 0.15 });
|
|
|
|
document.querySelectorAll('.chart-container').forEach(el => chartObserver.observe(el));
|
|
|
|
// Resize handler
|
|
let resizeTimeout;
|
|
window.addEventListener('resize', () => {
|
|
clearTimeout(resizeTimeout);
|
|
resizeTimeout = setTimeout(() => {
|
|
renderTCOChart();
|
|
renderArchitectureChart();
|
|
renderCostComparisonChart();
|
|
}, 300);
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|