miinventario-v2/orchestration/_archive/90-transversal/PRODUCTION-CONFIG.md
Adrian Flores Cortes e101c7b94c
Some checks are pending
Build / Build Backend (push) Waiting to run
Build / Build Docker Image (push) Blocked by required conditions
Build / Build Mobile (TypeScript Check) (push) Waiting to run
Lint / Lint Backend (push) Waiting to run
Lint / Lint Mobile (push) Waiting to run
Test / Backend E2E Tests (push) Waiting to run
Test / Mobile Unit Tests (push) Waiting to run
[ESTANDAR-ORCHESTRATION] refactor: Consolidate to standard structure
- Move 5 non-standard folders to _archive/
- Archive 2 extra root files
- Update _MAP.md with standardized structure

Standard: SIMCO-ESTANDAR-ORCHESTRATION v1.0.0
Level: CONSUMER (L2)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-24 14:38:05 -06:00

6.9 KiB

Configuracion de Produccion - MiInventario

Este documento describe la configuracion necesaria para desplegar MiInventario en produccion.

Variables de Entorno Requeridas

Base de Datos (PostgreSQL)

DATABASE_HOST=your-postgres-host.com
DATABASE_PORT=5432
DATABASE_NAME=miinventario
DATABASE_USER=miinventario_user
DATABASE_PASSWORD=<strong-password>

Recomendaciones:

  • Usar PostgreSQL 14+
  • Habilitar SSL para conexiones
  • Configurar pool de conexiones (min: 5, max: 20)
  • Habilitar extension uuid-ossp

JWT (Autenticacion)

JWT_SECRET=<random-string-256-bits>
JWT_EXPIRES_IN=15m
JWT_REFRESH_SECRET=<different-random-string-256-bits>
JWT_REFRESH_EXPIRES_IN=7d

Generar secretos seguros:

openssl rand -base64 32

Redis (Colas y Cache)

REDIS_HOST=your-redis-host.com
REDIS_PORT=6379
REDIS_PASSWORD=<redis-password>

Recomendaciones:

  • Usar Redis 6+
  • Habilitar persistencia RDB
  • Configurar maxmemory-policy: allkeys-lru

AWS S3 / MinIO (Almacenamiento de Videos)

S3_ENDPOINT=https://s3.us-east-1.amazonaws.com
S3_ACCESS_KEY=<aws-access-key>
S3_SECRET_KEY=<aws-secret-key>
S3_BUCKET=miinventario-prod
S3_REGION=us-east-1

Para MinIO en produccion:

S3_ENDPOINT=https://your-minio-domain.com
S3_ACCESS_KEY=<minio-access-key>
S3_SECRET_KEY=<minio-secret-key>
S3_BUCKET=miinventario
S3_REGION=us-east-1

Recomendaciones:

  • Configurar lifecycle rules para eliminar videos despues de 30 dias
  • Habilitar versionado para backups
  • Configurar CORS para el dominio de la app

Stripe (Pagos)

STRIPE_SECRET_KEY=sk_live_...
STRIPE_WEBHOOK_SECRET=whsec_...

Pasos para configurar Stripe:

  1. Crear cuenta en Stripe Dashboard
  2. Obtener API keys de produccion
  3. Configurar webhook:
    • URL: https://api.miinventario.com/api/v1/payments/webhook/stripe
    • Eventos a escuchar:
      • payment_intent.succeeded
      • payment_intent.payment_failed
      • payment_intent.processing
      • charge.succeeded
      • charge.pending
  4. Copiar el Webhook signing secret

Metodos de pago soportados:

  • Tarjetas de credito/debito
  • OXXO (efectivo)
  • 7-Eleven (en desarrollo con Conekta)

Firebase (Notificaciones Push)

FIREBASE_PROJECT_ID=miinventario-prod
FIREBASE_CLIENT_EMAIL=firebase-adminsdk-xxxxx@miinventario-prod.iam.gserviceaccount.com
FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"

Pasos para configurar Firebase:

  1. Crear proyecto en Firebase Console
  2. Ir a Project Settings > Service accounts
  3. Generar nueva private key
  4. Copiar los valores del JSON generado:
    • project_id -> FIREBASE_PROJECT_ID
    • client_email -> FIREBASE_CLIENT_EMAIL
    • private_key -> FIREBASE_PRIVATE_KEY

Configuracion de Android:

  1. Agregar app Android en Firebase
  2. Descargar google-services.json
  3. Configurar en la app movil

Configuracion de iOS:

  1. Agregar app iOS en Firebase
  2. Descargar GoogleService-Info.plist
  3. Configurar en la app movil

IA Providers (Vision AI)

# Proveedor activo: 'openai' o 'claude'
IA_PROVIDER=openai

# OpenAI (GPT-4 Vision)
OPENAI_API_KEY=sk-...

# Anthropic (Claude Vision) - alternativo
ANTHROPIC_API_KEY=sk-ant-...

Notas:

  • Se requiere al menos una API key configurada
  • OpenAI usa el modelo gpt-4o para vision
  • Claude usa el modelo claude-sonnet-4-20250514
  • En desarrollo sin API keys, usa deteccion mock
  • Los frames se extraen del video cada 2 segundos (max 10 frames)

Costos aproximados:

  • OpenAI GPT-4o Vision: ~$0.01 por imagen
  • Claude Vision: ~$0.003 por imagen
  • Costo por video (10 frames): $0.03 - $0.10

Aplicacion

NODE_ENV=production
PORT=3142
CORS_ORIGINS=https://miinventario.com,https://app.miinventario.com

Ejemplo Completo de .env.production

# Database
DATABASE_HOST=prod-db.miinventario.com
DATABASE_PORT=5432
DATABASE_NAME=miinventario
DATABASE_USER=miinventario_prod
DATABASE_PASSWORD=super-secret-db-password

# JWT
JWT_SECRET=your-256-bit-random-string
JWT_EXPIRES_IN=15m
JWT_REFRESH_SECRET=another-256-bit-random-string
JWT_REFRESH_EXPIRES_IN=7d

# Redis
REDIS_HOST=prod-redis.miinventario.com
REDIS_PORT=6379
REDIS_PASSWORD=redis-password

# S3
S3_ENDPOINT=https://s3.us-east-1.amazonaws.com
S3_ACCESS_KEY=AKIAIOSFODNN7EXAMPLE
S3_SECRET_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
S3_BUCKET=miinventario-prod
S3_REGION=us-east-1

# Stripe
STRIPE_SECRET_KEY=sk_live_51...
STRIPE_WEBHOOK_SECRET=whsec_...

# Firebase
FIREBASE_PROJECT_ID=miinventario-prod
FIREBASE_CLIENT_EMAIL=firebase-adminsdk@miinventario-prod.iam.gserviceaccount.com
FIREBASE_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n"

# IA Provider
IA_PROVIDER=openai
OPENAI_API_KEY=sk-proj-...
ANTHROPIC_API_KEY=sk-ant-...

# App
NODE_ENV=production
PORT=3142
CORS_ORIGINS=https://miinventario.com

Checklist de Seguridad

  • Todas las claves secretas son unicas y generadas aleatoriamente
  • Base de datos solo accesible desde el servidor de la aplicacion
  • Redis protegido con password y no expuesto a internet
  • S3 bucket con acceso privado (no publico)
  • HTTPS habilitado en todos los endpoints
  • Rate limiting configurado en el API Gateway/Nginx
  • Logs de acceso habilitados
  • Backups automaticos de base de datos configurados
  • Monitoring y alertas configurados (e.g., Sentry, CloudWatch)

Despliegue

Con Docker

# Build
docker build -t miinventario-api:latest .

# Run
docker run -d \
  --name miinventario-api \
  --env-file .env.production \
  -p 3142:3142 \
  miinventario-api:latest

Con Docker Compose

version: '3.8'
services:
  api:
    build: ./apps/backend
    env_file: .env.production
    ports:
      - "3142:3142"
    depends_on:
      - postgres
      - redis
    restart: unless-stopped

  postgres:
    image: postgres:14-alpine
    environment:
      POSTGRES_DB: miinventario
      POSTGRES_USER: miinventario_prod
      POSTGRES_PASSWORD: ${DATABASE_PASSWORD}
    volumes:
      - postgres_data:/var/lib/postgresql/data
    restart: unless-stopped

  redis:
    image: redis:6-alpine
    command: redis-server --requirepass ${REDIS_PASSWORD}
    volumes:
      - redis_data:/data
    restart: unless-stopped

volumes:
  postgres_data:
  redis_data:

Migraciones en Produccion

# Ejecutar migraciones
npm run migration:run

# Verificar estado
npm run typeorm migration:show -d src/config/typeorm.config.ts

Monitoreo

Health Checks

  • GET /api/v1/health - Estado general
  • GET /api/v1/health/ready - Readiness check

Metricas Recomendadas

  • Request rate por endpoint
  • Latencia P50, P95, P99
  • Tasa de errores 4xx y 5xx
  • Uso de creditos por usuario
  • Pagos completados vs fallidos
  • Videos procesados por hora
  • FCM deliveries exitosos

Contacto

Para problemas de configuracion contactar al equipo de desarrollo.