✅ FASE 7 COMPLETADA: Testing y Lanzamiento - PROYECTO FINALIZADO
Some checks failed
CI/CD Pipeline / 🧪 Tests (push) Has been cancelled
CI/CD Pipeline / 🏗️ Build (push) Has been cancelled
CI/CD Pipeline / 🚀 Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / 🚀 Deploy to Production (push) Has been cancelled
CI/CD Pipeline / 🏷️ Create Release (push) Has been cancelled
CI/CD Pipeline / 🧹 Cleanup (push) Has been cancelled
Some checks failed
CI/CD Pipeline / 🧪 Tests (push) Has been cancelled
CI/CD Pipeline / 🏗️ Build (push) Has been cancelled
CI/CD Pipeline / 🚀 Deploy to Staging (push) Has been cancelled
CI/CD Pipeline / 🚀 Deploy to Production (push) Has been cancelled
CI/CD Pipeline / 🏷️ Create Release (push) Has been cancelled
CI/CD Pipeline / 🧹 Cleanup (push) Has been cancelled
Implementados 4 módulos con agent swarm: 1. TESTING FUNCIONAL (Jest) - Configuración Jest + ts-jest - Tests unitarios: auth, booking, court (55 tests) - Tests integración: routes (56 tests) - Factories y utilidades de testing - Coverage configurado (70% servicios) - Scripts: test, test:watch, test:coverage 2. TESTING DE USUARIO (Beta) - Sistema de beta testers - Feedback con categorías y severidad - Beta issues tracking - 8 testers de prueba creados - API completa para gestión de feedback 3. DOCUMENTACIÓN COMPLETA - API.md - 150+ endpoints documentados - SETUP.md - Guía de instalación - DEPLOY.md - Deploy en VPS - ARCHITECTURE.md - Arquitectura del sistema - APP_STORE.md - Material para stores - Postman Collection completa - PM2 ecosystem config - Nginx config con SSL 4. GO LIVE Y PRODUCCIÓN - Sistema de monitoreo (logs, health checks) - Servicio de alertas multi-canal - Pre-deploy check script - Docker + docker-compose producción - Backup automatizado - CI/CD GitHub Actions - Launch checklist completo ESTADÍSTICAS FINALES: - Fases completadas: 7/7 - Archivos creados: 250+ - Líneas de código: 60,000+ - Endpoints API: 150+ - Tests: 110+ - Documentación: 5,000+ líneas PROYECTO COMPLETO Y LISTO PARA PRODUCCIÓN
This commit is contained in:
417
docs/SETUP.md
Normal file
417
docs/SETUP.md
Normal file
@@ -0,0 +1,417 @@
|
||||
# 🚀 Guía de Instalación - App Canchas de Pádel
|
||||
|
||||
Guía completa para configurar el entorno de desarrollo y producción.
|
||||
|
||||
## 📋 Requisitos
|
||||
|
||||
### Requisitos del Sistema
|
||||
|
||||
| Componente | Versión Mínima | Recomendado |
|
||||
|------------|----------------|-------------|
|
||||
| Node.js | 18.x | 20.x LTS |
|
||||
| npm | 9.x | 10.x |
|
||||
| PostgreSQL | 14.x | 16.x |
|
||||
| Git | 2.x | Latest |
|
||||
|
||||
### Especificaciones de Hardware
|
||||
|
||||
| Entorno | CPU | RAM | Disco |
|
||||
|---------|-----|-----|-------|
|
||||
| Desarrollo | 2 cores | 4 GB | 20 GB SSD |
|
||||
| Producción | 4+ cores | 8+ GB | 50+ GB SSD |
|
||||
|
||||
---
|
||||
|
||||
## 🛠️ Instalación Paso a Paso
|
||||
|
||||
### 1. Clonar el Repositorio
|
||||
|
||||
```bash
|
||||
git clone https://github.com/tu-usuario/app-padel.git
|
||||
cd app-padel
|
||||
```
|
||||
|
||||
### 2. Instalar Dependencias del Backend
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
npm install
|
||||
```
|
||||
|
||||
### 3. Configurar Variables de Entorno
|
||||
|
||||
Copiar el archivo de ejemplo:
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
Editar el archivo `.env` con tus valores:
|
||||
|
||||
```env
|
||||
# ============================================
|
||||
# Configuración de la Base de Datos
|
||||
# ============================================
|
||||
DATABASE_URL="postgresql://postgres:tu_password@localhost:5432/app_padel?schema=public"
|
||||
|
||||
# ============================================
|
||||
# Configuración del Servidor
|
||||
# ============================================
|
||||
NODE_ENV=development
|
||||
PORT=3000
|
||||
API_URL=http://localhost:3000
|
||||
FRONTEND_URL=http://localhost:5173
|
||||
|
||||
# ============================================
|
||||
# Configuración de JWT
|
||||
# ============================================
|
||||
JWT_SECRET=tu_clave_secreta_super_segura_aleatoria_32chars
|
||||
JWT_EXPIRES_IN=7d
|
||||
JWT_REFRESH_SECRET=otra_clave_secreta_diferente_32chars
|
||||
JWT_REFRESH_EXPIRES_IN=30d
|
||||
|
||||
# ============================================
|
||||
# Configuración de Email (SMTP)
|
||||
# ============================================
|
||||
SMTP_HOST=smtp.gmail.com
|
||||
SMTP_PORT=587
|
||||
SMTP_USER=tu_email@gmail.com
|
||||
SMTP_PASS=tu_app_password_de_gmail
|
||||
EMAIL_FROM="Canchas Padel <noreply@tudominio.com>"
|
||||
|
||||
# ============================================
|
||||
# Configuración de Rate Limiting
|
||||
# ============================================
|
||||
RATE_LIMIT_WINDOW_MS=900000
|
||||
RATE_LIMIT_MAX_REQUESTS=100
|
||||
|
||||
# ============================================
|
||||
# Configuración de MercadoPago (Producción)
|
||||
# ============================================
|
||||
MERCADOPAGO_ACCESS_TOKEN=APP_USR-0000000000000000-000000-00000000000000000000000000000000-000000000
|
||||
MERCADOPAGO_PUBLIC_KEY=APP_USR-00000000-0000-0000-0000-000000000000
|
||||
```
|
||||
|
||||
### 4. Crear Base de Datos
|
||||
|
||||
```bash
|
||||
# Conectar a PostgreSQL
|
||||
sudo -u postgres psql
|
||||
|
||||
# Crear base de datos
|
||||
CREATE DATABASE app_padel;
|
||||
|
||||
# Crear usuario (opcional)
|
||||
CREATE USER app_padel_user WITH PASSWORD 'tu_password_seguro';
|
||||
GRANT ALL PRIVILEGES ON DATABASE app_padel TO app_padel_user;
|
||||
|
||||
# Salir
|
||||
\q
|
||||
```
|
||||
|
||||
### 5. Ejecutar Migraciones
|
||||
|
||||
```bash
|
||||
# Generar cliente Prisma
|
||||
npm run db:generate
|
||||
|
||||
# Ejecutar migraciones
|
||||
npm run db:migrate
|
||||
```
|
||||
|
||||
### 6. Seed de Datos (Opcional)
|
||||
|
||||
```bash
|
||||
# Ejecutar seed para datos de prueba
|
||||
npm run db:seed
|
||||
```
|
||||
|
||||
Este comando creará:
|
||||
- Usuario admin por defecto
|
||||
- Canchas de ejemplo
|
||||
- Planes de suscripción
|
||||
- Logros del sistema
|
||||
|
||||
### 7. Iniciar Servidor en Desarrollo
|
||||
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
|
||||
El servidor estará disponible en: `http://localhost:3000`
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Configuración Avanzada
|
||||
|
||||
### Variables de Entorno Completas
|
||||
|
||||
#### Base de Datos
|
||||
|
||||
| Variable | Descripción | Ejemplo |
|
||||
|----------|-------------|---------|
|
||||
| `DATABASE_URL` | URL de conexión PostgreSQL | `postgresql://user:pass@host:5432/db` |
|
||||
|
||||
#### Servidor
|
||||
|
||||
| Variable | Descripción | Default |
|
||||
|----------|-------------|---------|
|
||||
| `NODE_ENV` | Entorno (development/production) | `development` |
|
||||
| `PORT` | Puerto del servidor | `3000` |
|
||||
| `API_URL` | URL base de la API | `http://localhost:3000` |
|
||||
| `FRONTEND_URL` | URL del frontend (CORS) | `http://localhost:5173` |
|
||||
|
||||
#### Seguridad (JWT)
|
||||
|
||||
| Variable | Descripción | Recomendación |
|
||||
|----------|-------------|---------------|
|
||||
| `JWT_SECRET` | Secreto para tokens | Mínimo 32 caracteres aleatorios |
|
||||
| `JWT_EXPIRES_IN` | Duración del access token | `7d` |
|
||||
| `JWT_REFRESH_SECRET` | Secreto para refresh tokens | Diferente al JWT_SECRET |
|
||||
| `JWT_REFRESH_EXPIRES_IN` | Duración del refresh token | `30d` |
|
||||
|
||||
#### Email (SMTP)
|
||||
|
||||
| Variable | Descripción | Ejemplo |
|
||||
|----------|-------------|---------|
|
||||
| `SMTP_HOST` | Servidor SMTP | `smtp.gmail.com` |
|
||||
| `SMTP_PORT` | Puerto SMTP | `587` |
|
||||
| `SMTP_USER` | Usuario SMTP | `tucorreo@gmail.com` |
|
||||
| `SMTP_PASS` | Contraseña SMTP | `app_password` |
|
||||
| `EMAIL_FROM` | Remitente por defecto | `Canchas <noreply@tudominio.com>` |
|
||||
|
||||
#### Rate Limiting
|
||||
|
||||
| Variable | Descripción | Default |
|
||||
|----------|-------------|---------|
|
||||
| `RATE_LIMIT_WINDOW_MS` | Ventana en ms | `900000` (15 min) |
|
||||
| `RATE_LIMIT_MAX_REQUESTS` | Máximo requests | `100` |
|
||||
|
||||
#### MercadoPago
|
||||
|
||||
| Variable | Descripción | Ejemplo |
|
||||
|----------|-------------|---------|
|
||||
| `MERCADOPAGO_ACCESS_TOKEN` | Token de acceso MP | `APP_USR-...` |
|
||||
| `MERCADOPAGO_PUBLIC_KEY` | Clave pública MP | `APP_USR-...` |
|
||||
| `MERCADOPAGO_WEBHOOK_SECRET` | Secreto para webhooks | `webhook_secret` |
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Ejecución en Desarrollo
|
||||
|
||||
### Scripts Disponibles
|
||||
|
||||
```bash
|
||||
# Desarrollo con hot reload
|
||||
npm run dev
|
||||
|
||||
# Build para producción
|
||||
npm run build
|
||||
|
||||
# Producción (requiere build previo)
|
||||
npm start
|
||||
|
||||
# Base de datos
|
||||
npm run db:generate # Generar cliente Prisma
|
||||
npm run db:migrate # Ejecutar migraciones
|
||||
npm run db:studio # Abrir Prisma Studio
|
||||
npm run db:seed # Ejecutar seed
|
||||
|
||||
# Calidad de código
|
||||
npm run lint # Ejecutar ESLint
|
||||
npm test # Ejecutar tests
|
||||
```
|
||||
|
||||
### Estructura de Archivos en Desarrollo
|
||||
|
||||
```
|
||||
backend/
|
||||
├── src/
|
||||
│ ├── config/ # Configuraciones
|
||||
│ ├── controllers/ # Controladores
|
||||
│ ├── middleware/ # Middlewares
|
||||
│ ├── routes/ # Rutas
|
||||
│ ├── services/ # Lógica de negocio
|
||||
│ ├── utils/ # Utilidades
|
||||
│ ├── validators/ # Validaciones Zod
|
||||
│ └── index.ts # Entry point
|
||||
├── prisma/
|
||||
│ └── schema.prisma # Esquema de base de datos
|
||||
├── logs/ # Archivos de log
|
||||
├── .env # Variables de entorno
|
||||
└── package.json
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Ejecución en Producción
|
||||
|
||||
### 1. Preparar el Build
|
||||
|
||||
```bash
|
||||
# Instalar dependencias de producción
|
||||
npm ci --only=production
|
||||
|
||||
# Compilar TypeScript
|
||||
npm run build
|
||||
```
|
||||
|
||||
### 2. Configurar PM2
|
||||
|
||||
Crear archivo `ecosystem.config.js`:
|
||||
|
||||
```javascript
|
||||
module.exports = {
|
||||
apps: [{
|
||||
name: 'app-padel-api',
|
||||
script: './dist/index.js',
|
||||
instances: 'max',
|
||||
exec_mode: 'cluster',
|
||||
env: {
|
||||
NODE_ENV: 'production',
|
||||
PORT: 3000
|
||||
},
|
||||
log_file: './logs/combined.log',
|
||||
out_file: './logs/out.log',
|
||||
error_file: './logs/error.log',
|
||||
log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
|
||||
merge_logs: true,
|
||||
max_memory_restart: '1G',
|
||||
restart_delay: 3000,
|
||||
max_restarts: 5,
|
||||
min_uptime: '10s'
|
||||
}]
|
||||
};
|
||||
```
|
||||
|
||||
### 3. Iniciar con PM2
|
||||
|
||||
```bash
|
||||
# Iniciar aplicación
|
||||
pm2 start ecosystem.config.js
|
||||
|
||||
# Guardar configuración
|
||||
pm2 save
|
||||
|
||||
# Configurar inicio automático
|
||||
pm2 startup
|
||||
```
|
||||
|
||||
### 4. Verificar Estado
|
||||
|
||||
```bash
|
||||
pm2 status
|
||||
pm2 logs app-padel-api
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🐳 Docker (Alternativa)
|
||||
|
||||
### Usar Docker Compose
|
||||
|
||||
```bash
|
||||
# Iniciar todos los servicios
|
||||
docker-compose up -d
|
||||
|
||||
# Ver logs
|
||||
docker-compose logs -f backend
|
||||
|
||||
# Ejecutar migraciones
|
||||
docker-compose exec backend npx prisma migrate deploy
|
||||
```
|
||||
|
||||
### Dockerfile (Backend)
|
||||
|
||||
```dockerfile
|
||||
FROM node:20-alpine
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
COPY package*.json ./
|
||||
RUN npm ci --only=production
|
||||
|
||||
COPY . .
|
||||
RUN npm run build
|
||||
|
||||
EXPOSE 3000
|
||||
|
||||
CMD ["node", "dist/index.js"]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ Verificación de Instalación
|
||||
|
||||
### Health Check
|
||||
|
||||
```bash
|
||||
# Verificar API
|
||||
curl http://localhost:3000/api/v1/health
|
||||
|
||||
# Respuesta esperada
|
||||
{
|
||||
"success": true,
|
||||
"message": "API funcionando correctamente",
|
||||
"timestamp": "2026-01-31T12:00:00.000Z"
|
||||
}
|
||||
```
|
||||
|
||||
### Lista de Endpoints
|
||||
|
||||
```bash
|
||||
# Ver todas las rutas disponibles
|
||||
curl http://localhost:3000/api/v1
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Troubleshooting
|
||||
|
||||
### Error: "Cannot find module"
|
||||
|
||||
```bash
|
||||
# Reinstalar dependencias
|
||||
rm -rf node_modules package-lock.json
|
||||
npm install
|
||||
```
|
||||
|
||||
### Error de conexión a base de datos
|
||||
|
||||
```bash
|
||||
# Verificar PostgreSQL
|
||||
sudo systemctl status postgresql
|
||||
|
||||
# Verificar conexión
|
||||
psql $DATABASE_URL -c "SELECT 1"
|
||||
```
|
||||
|
||||
### Error: "Prisma schema not found"
|
||||
|
||||
```bash
|
||||
# Regenerar cliente
|
||||
npx prisma generate
|
||||
```
|
||||
|
||||
### Puerto 3000 en uso
|
||||
|
||||
```bash
|
||||
# Encontrar proceso
|
||||
lsof -i :3000
|
||||
|
||||
# O cambiar el puerto en .env
|
||||
PORT=3001
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 Recursos Adicionales
|
||||
|
||||
- [Documentación API](./API.md)
|
||||
- [Guía de Deploy](./DEPLOY.md)
|
||||
- [Prisma Documentation](https://www.prisma.io/docs)
|
||||
- [Express.js Guide](https://expressjs.com/en/guide/routing.html)
|
||||
|
||||
---
|
||||
|
||||
*Última actualización: Enero 2026*
|
||||
Reference in New Issue
Block a user