Sobre el Proyecto
El proyecto Digitalización Aplicada: PacketRoute S.L. consiste en una propuesta de transformación digital integral para una empresa de distribución local del sector logístico. El estudio aborda el rediseño completo de la infraestructura desde el nivel de hardware y cableado estructurado, pasando por la segmentación de red (VLANs), hasta el diseño del modelo de base de datos relacional y playbooks de automatización IT.
La metodología seguida se basa en el ciclo de análisis de sistemas: investigación preliminar de la infraestructura existente, modelado GAP para la identificación de ineficiencias de negocio, rediseño técnico a nivel físico y de aplicaciones bajo la norma de seguridad ISO 27001, e ingeniería de costes detallada para asegurar la viabilidad económica del proyecto.
Diagnóstico Tecnológico y Análisis DAFO
El punto de partida de PacketRoute S.L. revela una infraestructura de TI desorganizada y desactualizada. Tras auditar los sistemas y procesos de la compañía, se identifican problemas críticos de disponibilidad y seguridad informática.
Introducción al Caso de Estudio
La digitalización industrial ya no representa una ventaja competitiva opcional, sino una condición obligatoria para la supervivencia de las empresas de distribución. PacketRoute opera en un entorno logístico caracterizado por una gestión manual y descentralizada de la información (mediante hojas de cálculo dispersas), lo que provoca fallos constantes en la asignación de rutas y falta de trazabilidad de los envíos en tiempo real.
Diagnóstico Tecnológico Actual
La auditoría de sistemas revela las siguientes ineficiencias:
Red Plana e Insegura
Políticas de Acceso Inexistentes
Gestión Documental Descentralizada
Ausencia de Respaldos de Datos
Proceso de Entrega Analógico
Análisis DAFO Estratégico
A continuación se resume la matriz de diagnóstico estratégico del estado tecnológico de la empresa:
| Debilidades (Factores Internos) | Fortalezas (Factores Internos) |
|---|---|
| - Red plana y vulnerable sin cortafuegos. - Gestión de datos manual en hojas de cálculo. - Ausencia de copias de seguridad automatizadas. - Falta de un sistema centralizado de identidades. |
- Flota de vehículos propia y optimizada en la isla. - Personal logístico experimentado. - Clientela local fidelizada y estable. - Almacén en ubicación estratégica (Marratxí). |
| Amenazas (Factores Externos) | Oportunidades (Factores Externos) |
| - Sanciones legales por incumplimiento del RGPD. - Fugas de datos y ataques de Ransomware. - Competencia de grandes operadores digitalizados. - Pérdida de clientes por falta de tracking online. |
- Acceso a subvenciones estatales de digitalización. - Integración directa con las tiendas online de clientes. - Reducción sustancial del consumo de papel (Green IT). - Optimización de rutas mediante datos geográficos. |
Propuesta Técnica de CPD y Arquitectura de Red
Para solucionar de raíz las carencias operativas y de seguridad, se propone una arquitectura informática centralizada construida sobre principios de virtualización, segmentación lógica y alta disponibilidad.
Arquitectura de Red Corporativa (Segmentación VLAN)
Se propone segmentar la infraestructura de red lógica mediante un cortafuegos perimetral pfSense conectado a un switch gestionable de Capa 3. La segmentación se distribuye en las siguientes 5 VLANs independientes:
| VLAN | Nombre Subred | Rango de Red | Propósito de Seguridad |
|---|---|---|---|
| VLAN 10 | Administración y Oficina | 192.168.10.0/24 | Equipos de administración, facturación y dirección comercial. Acceso restringido. |
| VLAN 20 | Servidores corporativos | 192.168.20.0/24 | Máquinas virtuales (Proxmox), bases de datos y NAS. Acceso solo por puertos específicos. |
| VLAN 30 | Almacén y Lectoras | 192.168.30.0/24 | Pistolas PDA de lectura de códigos de barras en almacén. Red aislada de internet. |
| VLAN 40 | Reparto y Flota Móvil | 192.168.40.0/24 | Dispositivos móviles de conductores. Acceso exclusivo al backend del ERP. |
| VLAN 50 | Invitados y Clientes | 192.168.50.0/24 | Red abierta aislada con salida directa a Internet. Prohibido acceso a recursos locales. |
Infraestructura CPD e Hipervisor Virtual
Se proyecta un rack de servidores cerrado y climatizado en la central, equipado con un servidor central de última generación, un NAS redundante para almacenamiento masivo de backups, y un Sistema de Alimentación Ininterrumpida (SAI) inteligente de 1500VA.
El servidor principal ejecutará el hipervisor bare-metal Proxmox VE, alojando la infraestructura virtualizada en servidores virtuales aislados:
VM1 — Control de Dominio (Samba AD / LDAP)
VM2 — Servidor ERP (Odoo Enterprise)
VM3 — Servidor Base de Datos (PostgreSQL)
VM4 — Monitorización y Alertas (Zabbix & Grafana)
Modelo Relacional de Datos y Scripts de Automatización
Para dar soporte informático a la trazabilidad logística de PacketRoute, se diseña un modelo de base de datos relacional robusto y normalizado en PostgreSQL, acompañado de automatizaciones a nivel de sistema operativo e infraestructura.
Estructura de Archivos del Sistema
-
-
- schema.sql - Estructura de tablas y DDL
- triggers.sql - Triggers de auditoría automática
- procedures.sql - Procedimientos de devolución de pedidos
-
- backup.sh - Script de copia de seguridad diario
- deploy_playbook.yml - Playbook de Ansible para parches
-
Códigos y Scripts del Proyecto
A continuación, puedes desplegar cada uno de los archivos técnicos de base de datos y automatización de sistemas implementados en el proyecto:
Script 1 — Modelo SQL DDL (schema.sql)
-- Creación del esquema relacional en PostgreSQL para PacketRoute S.L.
CREATE TABLE cliente (
id_cliente SERIAL PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
cif_nif VARCHAR(20) UNIQUE NOT NULL,
direccion VARCHAR(200) NOT NULL,
telefono VARCHAR(15),
email VARCHAR(100) UNIQUE,
activo BOOLEAN DEFAULT TRUE
);
CREATE TABLE empleado (
id_empleado SERIAL PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
cargo VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE,
id_dominio_ad VARCHAR(50) UNIQUE -- Vinculación con Samba AD
);
CREATE TABLE producto (
id_producto SERIAL PRIMARY KEY,
codigo_barras VARCHAR(50) UNIQUE NOT NULL,
descripcion VARCHAR(150) NOT NULL,
stock_actual INT CHECK (stock_actual >= 0),
stock_minimo INT DEFAULT 5 CHECK (stock_minimo >= 0)
);
CREATE TABLE pedido (
id_pedido SERIAL PRIMARY KEY,
id_cliente INT REFERENCES cliente(id_cliente),
fecha_pedido TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
estado VARCHAR(30) DEFAULT 'Pendiente' CHECK (estado IN ('Pendiente', 'Preparando', 'En Ruta', 'Entregado', 'Devuelto'))
);
CREATE TABLE item_pedido (
id_item SERIAL PRIMARY KEY,
id_pedido INT REFERENCES pedido(id_pedido) ON DELETE CASCADE,
id_producto INT REFERENCES producto(id_producto),
cantidad INT CHECK (cantidad > 0)
);
CREATE TABLE registro_auditoria (
id_auditoria SERIAL PRIMARY KEY,
tabla_afectada VARCHAR(50) NOT NULL,
operacion VARCHAR(10) NOT NULL,
usuario_db VARCHAR(50) DEFAULT CURRENT_USER,
fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
valores_anteriores JSONB,
valores_nuevos JSONB
);Script 2 — Trigger de Auditoría (triggers.sql)
-- Trigger para auditoría automática de cambios en la tabla 'cliente'
CREATE OR REPLACE FUNCTION procesar_auditoria_clientes()
RETURNS TRIGGER AS $$
BEGIN
IF (TG_OP = 'UPDATE') THEN
INSERT INTO registro_auditoria (tabla_afectada, operacion, valores_anteriores, valores_nuevos)
VALUES ('cliente', TG_OP, row_to_json(OLD)::jsonb, row_to_json(NEW)::jsonb);
RETURN NEW;
ELSIF (TG_OP = 'DELETE') THEN
INSERT INTO registro_auditoria (tabla_afectada, operacion, valores_anteriores)
VALUES ('cliente', TG_OP, row_to_json(OLD)::jsonb);
RETURN OLD;
ELSIF (TG_OP = 'INSERT') THEN
INSERT INTO registro_auditoria (tabla_afectada, operacion, valores_nuevos)
VALUES ('cliente', TG_OP, row_to_json(NEW)::jsonb);
RETURN NEW;
END IF;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER trigger_auditoria_cliente
AFTER INSERT OR UPDATE OR DELETE ON cliente
FOR EACH ROW EXECUTE FUNCTION procesar_auditoria_clientes();Script 3 — Procedimiento Almacenado (procedures.sql)
-- Procedimiento almacenado para gestionar devoluciones de pedidos de forma íntegra
CREATE OR REPLACE PROCEDURE procesar_devolucion_pedido(
p_id_pedido INT,
p_motivo_devolucion TEXT
) AS $$
DECLARE
r_item RECORD;
BEGIN
-- Validar que el pedido exista y esté Entregado o En Ruta
IF NOT EXISTS (SELECT 1 FROM pedido WHERE id_pedido = p_id_pedido) THEN
RAISE EXCEPTION 'El pedido con ID % no existe.', p_id_pedido;
END IF;
-- Cambiar estado del pedido a Devuelto
UPDATE pedido
SET estado = 'Devuelto'
WHERE id_pedido = p_id_pedido;
-- Devolver stock de cada ítem del pedido al inventario de productos
FOR r_item IN
SELECT id_producto, cantidad
FROM item_pedido
WHERE id_pedido = p_id_pedido
LOOP
UPDATE producto
SET stock_actual = stock_actual + r_item.cantidad
WHERE id_producto = r_item.id_producto;
END LOOP;
RAISE NOTICE 'Devolución procesada con éxito para el pedido %. Inventario reabastecido.', p_id_pedido;
END;
$$ LANGUAGE plpgsql;Script 4 — Script Backup Bash (backup.sh)
#!/bin/bash
# Script de Backup Nocturno de Base de Datos para PacketRoute S.L.
# Rotación de copias de seguridad de 7 días hacia el almacenamiento NAS
BACKUP_DIR="/mnt/nas/backups/postgresql"
DB_NAME="packetroute_db"
DB_USER="postgres"
DATE=$(date +%Y-%m-%d_%H%M%S)
LOG_FILE="/var/log/db_backup.log"
# Asegurar que el directorio de backups existe
mkdir -p "$BACKUP_DIR"
echo "[$DATE] Iniciando copia de seguridad de $DB_NAME..." >> "$LOG_FILE"
# Generar volcado comprimido de la base de datos
pg_dump -U "$DB_USER" "$DB_NAME" | gzip > "$BACKUP_DIR/db_backup_${DB_NAME}_${DATE}.sql.gz"
if [ $? -eq 0 ]; then
echo "[$DATE] Copia de seguridad generada con éxito en $BACKUP_DIR" >> "$LOG_FILE"
else
echo "[$DATE] ERROR al generar la copia de seguridad" >> "$LOG_FILE"
exit 1
fi
# Eliminar copias de seguridad con más de 7 días (rotación de backup)
find "$BACKUP_DIR" -name "db_backup_${DB_NAME}_*" -mtime +7 -delete
echo "[$DATE] Proceso de backup nocturno y rotación finalizado." >> "$LOG_FILE"Script 5 — Playbook Ansible (deploy_playbook.yml)
# Playbook de Ansible para mantenimiento de seguridad y actualizaciones de software
# Se ejecuta mensualmente para asegurar el parcheo de todos los servidores
- name: Actualización de seguridad de infraestructura PacketRoute
hosts: servidores_internos
become: yes
tasks:
- name: Actualizar caché de paquetes APT (Debian/Ubuntu)
apt:
update_cache: yes
cache_valid_time: 3600
- name: Aplicar actualizaciones de seguridad del sistema operativo
apt:
upgrade: safe
autoremove: yes
autoclean: yes
- name: Comprobar si se requiere reiniciar después del parcheo
stat:
path: /var/run/reboot-required
register: reboot_required_file
- name: Reiniciar el servidor si es necesario
reboot:
msg: "Reinicio del sistema requerido por actualizaciones de seguridad"
connect_timeout: 5
reboot_timeout: 300
pre_reboot_delay: 0
when: reboot_required_file.stat.existsPlan de Implantación y Estimación Financiera
Para llevar a la práctica la propuesta de PacketRoute S.L. de forma ordenada, se diseña un cronograma detallado de actividades y se realiza un análisis de presupuesto y retorno de inversión.
Cronograma de Fases (12 semanas)
Fase 2: Conectividad y Perímetro (Semanas 3-4)
Configuración inicial de pfSense, definición de rutas estáticas, creación de las VLANs, asignación de puertos en el Switch y configuración del punto de acceso Wi-Fi del almacén con control de accesos.
Fase 3: Hipervisor y Servidores Virtuales (Semanas 5-6)
Instalación de Proxmox VE, despliegue y hardening de las cuatro máquinas virtuales Debian, configuración de Samba Active Directory y creación de GPOs para los usuarios de oficina.
Fase 4: Base de Datos y Despliegue de ERP (Semanas 7-8)
Inicialización de PostgreSQL, creación del esquema relacional e instalación de Odoo ERP Módulos Compras, Almacén, Ventas y Facturación. Migración de clientes e inventario desde Excel.
Fase 5: Pruebas, Monitorización y Formación (Semanas 9-10)
Pruebas unitarias de triggers, simulación de cortes de red y fallos de alimentación (SAI), configuración de alertas de Zabbix y formación del personal técnico y comercial.
Fase 6: Despliegue en Producción y Soporte (Semanas 11-12)
Apagado del sistema manual analógico, arranque definitivo en producción y soporte in-situ durante las primeras dos semanas de operaciones digitales.
Estimación Económica del Proyecto
A continuación se expone el desglose de costes necesarios para la implantación del plan de transformación digital:
| Concepto de Inversión | Detalle de Componentes / Servicios | Coste Estimado |
|---|---|---|
| Hardware Central (CAPEX) | Servidor Dell PowerEdge Rack Xeon 32GB RAM + NAS Synology 8TB + SAI APC 1500VA | 3.450 € |
| Electrónica de Red (CAPEX) | Cortafuegos Netgate pfSense + Switch Capa 3 TP-Link 24p + AP Wi-Fi Profesional | 1.150 € |
| Cableado e Instalación (CAPEX) | Armario Rack 12U + Cable UTP Cat6 + Tomas de pared + Mano de obra técnica de red | 1.800 € |
| Licencias de Software (OPEX) | Suscripción Odoo Enterprise (35 usuarios) - Coste Anual | 3.200 € / año |
| Mano de Obra e Implantación | Consultoría de sistemas, migración de datos, configuración de base de datos y formación | 4.500 € |
| Total Presupuesto Inicial | Inversión de Capital Inicial (CAPEX) + Mano de Obra | 10.900 € |
Objetivos del Proyecto
- Objetivo General: Diseñar un plan integral de digitalización técnica y operativa para PacketRoute S.L., dotando a la empresa de una arquitectura informática moderna, segura, y escalable que optimice sus procesos de picking, almacenamiento y entrega.
- Objetivos Específicos:
- Diseñar una red física y lógica segmentada en VLANs mediante switches de Capa 3 y un cortafuegos perimetral pfSense.
- Definir la arquitectura de servidores corporativos en Proxmox VE con gestión de identidades integrada en un dominio Active Directory (Samba AD).
- Modelar una base de datos corporativa normalizada en PostgreSQL que resuelva la trazabilidad de los envíos y de las auditorías de datos mediante triggers avanzados.
- Automatizar el mantenimiento del entorno con playbooks de Ansible y un sistema robusto de copias de seguridad de datos redundantes (locales y cloud).
- Estructurar el plan financiero y el calendario de implantación del proyecto en 12 semanas.