Instalación y Configuración

2. Instalación y Configuración

Esta sección proporciona una guía completa para la instalación y configuración del sistema DTEM en diferentes entornos, incluyendo requisitos previos, instalación paso a paso y configuración post-instalación.

2.1. Requisitos del Sistema

2.1.1. Requisitos Mínimos de Hardware

Componente Mínimo Recomendado Producción
CPU 2 cores 4 cores 8+ cores
RAM 4 GB 8 GB 16+ GB
Storage 50 GB SSD 100 GB SSD 500+ GB SSD
Network 100 Mbps 1 Gbps 10+ Gbps

2.1.2. Requisitos de Software

Sistema Operativo

  • Linux: Ubuntu 20.04+ / CentOS 8+ / RHEL 8+
  • Windows: Windows Server 2019+ (solo para desarrollo)
  • macOS: 11.0+ (solo para desarrollo)

Software Base

# Docker & Docker Compose
docker --version  # >= 20.10.0
docker-compose --version  # >= 2.0.0

# Node.js (para desarrollo local)
node --version  # >= 18.0.0
npm --version   # >= 8.0.0

# Git
git --version   # >= 2.30.0

Dependencias Opcionales

  • PostgreSQL Client: Para administración directa de base de datos
  • Redis CLI: Para administración de caché
  • Kubernetes: Para despliegue en producción (kubectl >= 1.24)

2.1.3. Requisitos de Red

Puertos Requeridos

Puerto Protocolo Servicio Descripción
80 TCP HTTP Web server (redirección)
443 TCP HTTPS Web server principal
3000 TCP API Gateway API interna
5432 TCP PostgreSQL Base de datos
6379 TCP Redis Caché y sesiones
5672 TCP RabbitMQ Cola de mensajes
15672 TCP RabbitMQ UI Administración

Configuración DNS

  • Dominio principal: dtem.empresa.cl
  • API: api.dtem.empresa.cl
  • Admin: admin.dtem.empresa.cl
  • CDN: cdn.dtem.empresa.cl (opcional)

2.2. Instalación con Docker (Recomendado)

2.2.1. Preparación del Entorno

# 1. Clonar el repositorio
git clone https://github.com/empresa/dtem.git
cd dtem

# 2. Copiar archivo de configuración
cp .env.example .env

# 3. Editar configuración
nano .env

2.2.2. Configuración de Variables de Entorno

# .env - Variables de entorno principales

# Configuración General
NODE_ENV=production
APP_NAME=DTEM
APP_VERSION=3.0.0
APP_PORT=3000

# Configuración Base de Datos
DB_HOST=postgres
DB_PORT=5432
DB_NAME=dtem_prod
DB_USER=dtem_user
DB_PASSWORD=your_secure_password_here

# Configuración Redis
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=your_redis_password_here

# Configuración JWT
JWT_SECRET=your_jwt_secret_key_here
JWT_EXPIRES_IN=24h
REFRESH_TOKEN_SECRET=your_refresh_token_secret_here

# Configuración Email
SMTP_HOST=smtp.empresa.cl
SMTP_PORT=587
SMTP_USER=noreply@empresa.cl
SMTP_PASSWORD=your_smtp_password
SMTP_FROM=DTEM <noreply@empresa.cl>

# Configuración SII
SII_API_URL=https://palena.sii.cl
SII_CERT_PATH=/app/certs/sii_cert.pem
SII_KEY_PATH=/app/certs/sii_key.pem

# Configuración Storage
STORAGE_TYPE=local
STORAGE_PATH=/app/storage
# STORAGE_TYPE=s3 (opcional)
# AWS_ACCESS_KEY_ID=your_access_key
# AWS_SECRET_ACCESS_KEY=your_secret_key
# AWS_S3_BUCKET=dtem-documents

# Configuración Seguridad
CORS_ORIGIN=https://dtem.empresa.cl
RATE_LIMIT_WINDOW=15
RATE_LIMIT_MAX=100

# Configuración Monitoreo
LOG_LEVEL=info
METRICS_ENABLED=true
HEALTH_CHECK_ENABLED=true

2.2.3. Generación de Certificados

# Crear directorio de certificados
mkdir -p certs

# Generar certificado autofirmado para desarrollo
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout certs/server.key \
  -out certs/server.crt \
  -subj "/C=CL/ST=Region/L=City/O=Empresa/CN=dtem.empresa.cl"

# Para producción, usar certificados de una CA confiable
# o configurar Let's Encrypt con certbot

2.2.4. Docker Compose

# docker-compose.yml
version: '3.8'

services:
  # Base de Datos PostgreSQL
  postgres:
    image: postgres:14-alpine
    container_name: dtem-postgres
    environment:
      POSTGRES_DB: ${DB_NAME}
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./scripts/init-db.sql:/docker-entrypoint-initdb.d/init-db.sql
    ports:
      - "5432:5432"
    networks:
      - dtem-network
    restart: unless-stopped

  # Redis Cache
  redis:
    image: redis:7-alpine
    container_name: dtem-redis
    command: redis-server --requirepass ${REDIS_PASSWORD}
    volumes:
      - redis_data:/data
    ports:
      - "6379:6379"
    networks:
      - dtem-network
    restart: unless-stopped

  # RabbitMQ Message Queue
  rabbitmq:
    image: rabbitmq:3.11-management-alpine
    container_name: dtem-rabbitmq
    environment:
      RABBITMQ_DEFAULT_USER: admin
      RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD}
    volumes:
      - rabbitmq_data:/var/lib/rabbitmq
    ports:
      - "5672:5672"
      - "15672:15672"
    networks:
      - dtem-network
    restart: unless-stopped

  # API Gateway
  api-gateway:
    build:
      context: .
      dockerfile: Dockerfile.gateway
    container_name: dtem-api-gateway
    environment:
      - NODE_ENV=${NODE_ENV}
      - DB_HOST=postgres
      - REDIS_HOST=redis
      - JWT_SECRET=${JWT_SECRET}
    volumes:
      - ./certs:/app/certs:ro
      - ./logs:/app/logs
    ports:
      - "3000:3000"
    depends_on:
      - postgres
      - redis
    networks:
      - dtem-network
    restart: unless-stopped

  # DTE Service
  dte-service:
    build:
      context: .
      dockerfile: Dockerfile.dte
    container_name: dtem-dte-service
    environment:
      - NODE_ENV=${NODE_ENV}
      - DB_HOST=postgres
      - REDIS_HOST=redis
      - RABBITMQ_HOST=rabbitmq
    volumes:
      - ./certs:/app/certs:ro
      - ./storage:/app/storage
    depends_on:
      - postgres
      - redis
      - rabbitmq
    networks:
      - dtem-network
    restart: unless-stopped

  # Web Frontend
  web-frontend:
    build:
      context: ./frontend
      dockerfile: Dockerfile
    container_name: dtem-web
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./certs:/etc/nginx/certs:ro
    depends_on:
      - api-gateway
    networks:
      - dtem-network
    restart: unless-stopped

volumes:
  postgres_data:
  redis_data:
  rabbitmq_data:

networks:
  dtem-network:
    driver: bridge

2.2.5. Inicio del Sistema

# Construir y levantar todos los servicios
docker-compose up -d --build

# Verificar estado de los contenedores
docker-compose ps

# Ver logs de un servicio específico
docker-compose logs -f api-gateway

# Escalar servicios (si es necesario)
docker-compose up -d --scale dte-service=3

2.3. Instalación Manual

2.3.1. Instalación de Dependencias del Sistema

# Ubuntu/Debian
sudo apt update
sudo apt install -y postgresql-14 redis-server rabbitmq-server nginx

# CentOS/RHEL
sudo yum install -y postgresql14-server redis rabbitmq-server nginx

# Iniciar servicios
sudo systemctl enable postgresql redis rabbitmq-server nginx
sudo systemctl start postgresql redis rabbitmq-server nginx

2.3.2. Configuración de Base de Datos

# Configurar PostgreSQL
sudo -u postgres psql
CREATE DATABASE dtem_prod;
CREATE USER dtem_user WITH PASSWORD 'your_secure_password';
GRANT ALL PRIVILEGES ON DATABASE dtem_prod TO dtem_user;
\q

# Configurar PostgreSQL para conexiones remotas
sudo nano /etc/postgresql/14/main/postgresql.conf
# Descomentar y configurar:
# listen_addresses = 'localhost'
# port = 5432

sudo nano /etc/postgresql/14/main/pg_hba.conf
# Agregar línea:
# host dtem_prod dtem_user 127.0.0.1/32 md5

sudo systemctl restart postgresql

2.3.3. Configuración de Redis

# Configurar Redis con contraseña
sudo nano /etc/redis/redis.conf
# Configurar:
# requirepass your_redis_password
# bind 127.0.0.1

sudo systemctl restart redis-server

2.3.4. Configuración de RabbitMQ

# Crear usuario administrador
sudo rabbitmqctl add_user admin your_rabbitmq_password
sudo rabbitmqctl set_user_tags admin administrator
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

# Habilitar plugin de administración web
sudo rabbitmq-plugins enable rabbitmq_management
sudo systemctl restart rabbitmq-server

2.3.5. Instalación de Aplicación

# Clonar repositorio
git clone https://github.com/empresa/dtem.git
cd dtem

# Instalar dependencias de Node.js
npm install

# Construir aplicación
npm run build

# Configurar variables de entorno
cp .env.example .env
nano .env

# Ejecutar migraciones de base de datos
npm run migrate

# Iniciar aplicación en modo producción
npm run start:prod

2.4. Configuración Post-Instalación

2.4.1. Configuración Inicial del Sistema

# Acceder a la interfaz de administración
# URL: https://admin.dtem.empresa.cl
# Usuario por defecto: admin
# Contraseña por defecto: admin123

# Cambiar contraseña por defecto inmediatamente

2.4.2. Configuración de Certificados Digitales

Certificado SII

# Subir certificado digital del SII
scp sii_cert.pem server:/app/certs/
scp sii_key.pem server:/app/certs/

# Establecer permisos correctos
chmod 600 /app/certs/sii_*
chown app:app /app/certs/sii_*

Certificado SSL/TLS

# Usar Let's Encrypt para certificados válidos
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d dtem.empresa.cl -d api.dtem.empresa.cl

# Configurar renovación automática
sudo crontab -e
# Agregar línea:
# 0 12 * * * /usr/bin/certbot renew --quiet

2.4.3. Configuración de CAFs

# Subir CAFs al sistema
# 1. Acceder a la sección de CAFs en el panel de administración
# 2. Seleccionar tipo de documento
# 3. Subir archivo XML del CAF
# 4. Verificar firma del CAF
# 5. Activar CAF para uso

2.4.4. Configuración de Usuarios y Permisos

# Crear usuarios iniciales
curl -X POST https://api.dtem.empresa.cl/api/v1/users \
  -H "Authorization: Bearer YOUR_ADMIN_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "usuario@empresa.cl",
    "name": "Usuario Ejemplo",
    "profile_id": 2,
    "status": "active"
  }'

2.4.5. Configuración de Notificaciones

# Configurar SMTP
# 1. Acceder a Configuración > Notificaciones
# 2. Configurar servidor SMTP
# 3. Probar conexión
# 4. Configurar plantillas de email

2.5. Verificación de Instalación

2.5.1. Health Checks

# Verificar estado de servicios
curl https://api.dtem.empresa.cl/health

# Verificar conexión a base de datos
curl https://api.dtem.empresa.cl/health/db

# Verificar conexión a Redis
curl https://api.dtem.empresa.cl/health/redis

# Verificar conexión a RabbitMQ
curl https://api.dtem.empresa.cl/health/rabbitmq

2.5.2. Tests de Integración

# Ejecutar suite de tests automatizados
npm run test:integration

# Verificar endpoints principales
curl -X GET https://api.dtem.empresa.cl/api/v1/status
curl -X GET https://api.dtem.empresa.cl/api/v1/users
curl -X GET https://api.dtem.empresa.cl/api/v1/caf/status

2.5.3. Validación de Funcionalidad

  1. Creación de Usuario: Verificar creación de nuevos usuarios
  2. Login: Autenticación exitosa con credenciales válidas
  3. Carga de CAF: Subir y activar un CAF de prueba
  4. Emisión de DTE: Crear un DTE de prueba (Boleta)
  5. Envío al SII: Verificar comunicación con SII
  6. Notificaciones: Recibir email de confirmación

2.6. Resolución de Problemas Comunes

2.6.1. Problemas de Conexión

# Error: Connection refused
# Solución: Verificar que los servicios estén corriendo
docker-compose ps
sudo systemctl status postgresql redis rabbitmq-server

# Error: Authentication failed
# Solución: Verificar credenciales en .env
grep DB_ .env
grep REDIS_ .env

2.6.2. Problemas de Certificados

# Error: Certificate verification failed
# Solución: Verificar rutas y permisos de certificados
ls -la /app/certs/
openssl x509 -in /app/certs/sii_cert.pem -text -noout

2.6.3. Problemas de Rendimiento

# Error: Slow response times
# Solución: Verificar recursos del sistema
docker stats
free -h
df -h

2.6.4. Logs de Diagnóstico

# Logs de aplicación
docker-compose logs -f api-gateway
docker-compose logs -f dte-service

# Logs de sistema
sudo journalctl -u postgresql -f
sudo journalctl -u redis -f
sudo journalctl -u rabbitmq-server -f

2.7. Checklist de Instalación

2.7.1. Pre-Instalación

  • Requisitos de hardware verificados
  • Sistema operativo actualizado
  • Docker y Docker Compose instalados
  • Dominios DNS configurados
  • Certificados SSL obtenidos

2.7.2. Instalación

  • Repositorio clonado
  • Variables de entorno configuradas
  • Certificados digitales configurados
  • Servicios levantados correctamente
  • Base de datos inicializada

2.7.3. Post-Instalación

  • Health checks funcionando
  • Usuarios iniciales creados
  • CAFs cargados y activados
  • Notificaciones configuradas
  • Tests de integración pasados

2.7.4. Producción

  • Backup configurado
  • Monitoreo activado
  • Logs centralizados
  • Firewall configurado
  • Documentación actualizada

Próxima sección: 3. Infraestructura y Despliegue