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
- 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>
6.9 KiB
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:
- Crear cuenta en Stripe Dashboard
- Obtener API keys de produccion
- Configurar webhook:
- URL:
https://api.miinventario.com/api/v1/payments/webhook/stripe - Eventos a escuchar:
payment_intent.succeededpayment_intent.payment_failedpayment_intent.processingcharge.succeededcharge.pending
- URL:
- 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:
- Crear proyecto en Firebase Console
- Ir a Project Settings > Service accounts
- Generar nueva private key
- Copiar los valores del JSON generado:
project_id->FIREBASE_PROJECT_IDclient_email->FIREBASE_CLIENT_EMAILprivate_key->FIREBASE_PRIVATE_KEY
Configuracion de Android:
- Agregar app Android en Firebase
- Descargar
google-services.json - Configurar en la app movil
Configuracion de iOS:
- Agregar app iOS en Firebase
- Descargar
GoogleService-Info.plist - 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-4opara 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 generalGET /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.