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 de Firewall: Asegúrese de que los puertos 80 y 443 estén abiertos al público, mientras que los puertos de bases de datos y servicios internos deben estar restringidos a la red interna.
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
- Creación de Usuario: Verificar creación de nuevos usuarios
- Login: Autenticación exitosa con credenciales válidas
- Carga de CAF: Subir y activar un CAF de prueba
- Emisión de DTE: Crear un DTE de prueba (Boleta)
- Envío al SII: Verificar comunicación con SII
- 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