317 lines
6.0 KiB
Markdown
317 lines
6.0 KiB
Markdown
# DEVOPS - ERP CONSTRUCCION
|
|
|
|
**Fecha:** 2025-11-25
|
|
**Version:** 1.0.0
|
|
|
|
---
|
|
|
|
## Vision General
|
|
|
|
Este directorio contiene la documentacion y configuracion de DevOps para el ERP de Construccion, incluyendo:
|
|
|
|
- Contenedores Docker
|
|
- CI/CD Pipeline
|
|
- Guias de deployment
|
|
- Monitoreo y logging
|
|
|
|
---
|
|
|
|
## Estructura de Directorio
|
|
|
|
```
|
|
05-devops/
|
|
+-- README.md (este archivo)
|
|
+-- docker/
|
|
| +-- docker-compose.yml
|
|
| +-- docker-compose.dev.yml
|
|
| +-- docker-compose.prod.yml
|
|
| +-- Dockerfile.backend
|
|
| +-- Dockerfile.frontend
|
|
+-- ci-cd/
|
|
| +-- github-actions.yml
|
|
| +-- PIPELINE.md
|
|
+-- deployment/
|
|
| +-- DEPLOYMENT-GUIDE.md
|
|
| +-- ROLLBACK-GUIDE.md
|
|
+-- monitoring/
|
|
| +-- MONITORING.md
|
|
| +-- ALERTS.md
|
|
```
|
|
|
|
---
|
|
|
|
## Stack de Infraestructura
|
|
|
|
### Desarrollo Local
|
|
|
|
| Servicio | Tecnologia | Puerto |
|
|
|----------|------------|--------|
|
|
| Backend | Node.js 20 | 3000 |
|
|
| Frontend | React/Vite | 5173 |
|
|
| Database | PostgreSQL 15 + PostGIS | 5432 |
|
|
| Cache | Redis | 6379 |
|
|
| Storage | MinIO (S3) | 9000 |
|
|
|
|
### Produccion
|
|
|
|
| Servicio | Tecnologia | Proveedor |
|
|
|----------|------------|-----------|
|
|
| Backend | Node.js | Railway / Render |
|
|
| Frontend | React SPA | Vercel / Cloudflare |
|
|
| Database | PostgreSQL | Supabase / Neon |
|
|
| Cache | Redis | Upstash |
|
|
| Storage | S3 | AWS / Cloudflare R2 |
|
|
|
|
---
|
|
|
|
## Docker Compose (Desarrollo)
|
|
|
|
```yaml
|
|
# docker-compose.dev.yml
|
|
version: '3.8'
|
|
|
|
services:
|
|
postgres:
|
|
image: postgis/postgis:15-3.3
|
|
environment:
|
|
POSTGRES_USER: erp_user
|
|
POSTGRES_PASSWORD: erp_dev_password
|
|
POSTGRES_DB: erp_construccion_dev
|
|
ports:
|
|
- "5432:5432"
|
|
volumes:
|
|
- postgres_data:/var/lib/postgresql/data
|
|
- ./database/init:/docker-entrypoint-initdb.d
|
|
|
|
redis:
|
|
image: redis:7-alpine
|
|
ports:
|
|
- "6379:6379"
|
|
|
|
minio:
|
|
image: minio/minio
|
|
environment:
|
|
MINIO_ROOT_USER: minioadmin
|
|
MINIO_ROOT_PASSWORD: minioadmin
|
|
ports:
|
|
- "9000:9000"
|
|
- "9001:9001"
|
|
command: server /data --console-address ":9001"
|
|
volumes:
|
|
- minio_data:/data
|
|
|
|
backend:
|
|
build:
|
|
context: ./apps/backend
|
|
dockerfile: Dockerfile.dev
|
|
environment:
|
|
DATABASE_URL: postgresql://erp_user:erp_dev_password@postgres:5432/erp_construccion_dev
|
|
REDIS_URL: redis://redis:6379
|
|
S3_ENDPOINT: http://minio:9000
|
|
ports:
|
|
- "3000:3000"
|
|
volumes:
|
|
- ./apps/backend:/app
|
|
- /app/node_modules
|
|
depends_on:
|
|
- postgres
|
|
- redis
|
|
- minio
|
|
|
|
frontend:
|
|
build:
|
|
context: ./apps/frontend
|
|
dockerfile: Dockerfile.dev
|
|
environment:
|
|
VITE_API_URL: http://localhost:3000
|
|
ports:
|
|
- "5173:5173"
|
|
volumes:
|
|
- ./apps/frontend:/app
|
|
- /app/node_modules
|
|
|
|
volumes:
|
|
postgres_data:
|
|
minio_data:
|
|
```
|
|
|
|
---
|
|
|
|
## CI/CD Pipeline
|
|
|
|
### GitHub Actions Workflow
|
|
|
|
```yaml
|
|
# .github/workflows/ci.yml
|
|
name: CI Pipeline
|
|
|
|
on:
|
|
push:
|
|
branches: [main, develop]
|
|
pull_request:
|
|
branches: [main, develop]
|
|
|
|
jobs:
|
|
lint:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: '20'
|
|
- run: npm ci
|
|
- run: npm run lint
|
|
|
|
test:
|
|
runs-on: ubuntu-latest
|
|
services:
|
|
postgres:
|
|
image: postgis/postgis:15-3.3
|
|
env:
|
|
POSTGRES_USER: test
|
|
POSTGRES_PASSWORD: test
|
|
POSTGRES_DB: erp_test
|
|
ports:
|
|
- 5432:5432
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: '20'
|
|
- run: npm ci
|
|
- run: npm run test:ci
|
|
env:
|
|
DATABASE_URL: postgresql://test:test@localhost:5432/erp_test
|
|
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
needs: [lint, test]
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- uses: actions/setup-node@v4
|
|
with:
|
|
node-version: '20'
|
|
- run: npm ci
|
|
- run: npm run build
|
|
```
|
|
|
|
---
|
|
|
|
## Deployment
|
|
|
|
### Ambientes
|
|
|
|
| Ambiente | Branch | URL | Base de Datos |
|
|
|----------|--------|-----|---------------|
|
|
| Development | develop | dev.erp.example.com | erp_dev |
|
|
| Staging | staging | staging.erp.example.com | erp_staging |
|
|
| Production | main | erp.example.com | erp_prod |
|
|
|
|
### Proceso de Deployment
|
|
|
|
1. **Merge a main/develop** triggers CI
|
|
2. **CI pasa** -> Build y tests
|
|
3. **Deploy automatico** a ambiente correspondiente
|
|
4. **Health checks** verifican deployment
|
|
5. **Rollback automatico** si health check falla
|
|
|
|
---
|
|
|
|
## Variables de Entorno
|
|
|
|
### Backend
|
|
|
|
```bash
|
|
# Database
|
|
DATABASE_URL=postgresql://user:password@host:5432/database
|
|
DATABASE_POOL_SIZE=10
|
|
|
|
# Auth
|
|
JWT_SECRET=your-secret-key
|
|
JWT_EXPIRES_IN=1d
|
|
REFRESH_TOKEN_EXPIRES_IN=7d
|
|
|
|
# Redis
|
|
REDIS_URL=redis://localhost:6379
|
|
|
|
# Storage
|
|
S3_ENDPOINT=https://s3.amazonaws.com
|
|
S3_BUCKET=erp-construccion
|
|
S3_ACCESS_KEY=xxx
|
|
S3_SECRET_KEY=xxx
|
|
|
|
# App
|
|
NODE_ENV=production
|
|
PORT=3000
|
|
LOG_LEVEL=info
|
|
```
|
|
|
|
### Frontend
|
|
|
|
```bash
|
|
VITE_API_URL=https://api.erp.example.com
|
|
VITE_WS_URL=wss://api.erp.example.com
|
|
VITE_SENTRY_DSN=xxx
|
|
```
|
|
|
|
---
|
|
|
|
## Monitoreo
|
|
|
|
### Metricas Clave
|
|
|
|
| Metrica | Umbral Warning | Umbral Critical |
|
|
|---------|----------------|-----------------|
|
|
| Response Time (p95) | > 500ms | > 1000ms |
|
|
| Error Rate | > 1% | > 5% |
|
|
| CPU Usage | > 70% | > 90% |
|
|
| Memory Usage | > 70% | > 90% |
|
|
| DB Connections | > 80% | > 95% |
|
|
|
|
### Herramientas
|
|
|
|
- **APM:** Sentry / New Relic
|
|
- **Logs:** Datadog / CloudWatch
|
|
- **Uptime:** UptimeRobot / Better Uptime
|
|
- **Alertas:** PagerDuty / Slack
|
|
|
|
---
|
|
|
|
## Scripts Utiles
|
|
|
|
```bash
|
|
# Iniciar ambiente de desarrollo
|
|
./scripts/dev-start.sh
|
|
|
|
# Reset de base de datos
|
|
./scripts/reset-database.sh
|
|
|
|
# Backup de produccion
|
|
./scripts/backup-prod.sh
|
|
|
|
# Rollback de deployment
|
|
./scripts/rollback.sh <version>
|
|
```
|
|
|
|
---
|
|
|
|
## Proximos Pasos
|
|
|
|
1. [ ] Crear Dockerfile.backend
|
|
2. [ ] Crear Dockerfile.frontend
|
|
3. [ ] Configurar GitHub Actions
|
|
4. [ ] Configurar Sentry
|
|
5. [ ] Crear scripts de deployment
|
|
|
|
---
|
|
|
|
## Referencias
|
|
|
|
- [ADR-001: Stack Tecnologico](../adr/ADR-001-stack-tecnologico.md)
|
|
- [ERP Generico - DevOps](/projects/erp-generic/docs/05-devops/)
|
|
|
|
---
|
|
|
|
**Ultima actualizacion:** 2025-11-25
|
|
**Version:** 1.0.0
|