Structure: - control-plane/: Registries, SIMCO directives, CI/CD templates - projects/: Gamilit, ERP-Suite, Trading-Platform, Betting-Analytics - shared/: Libs catalog, knowledge-base Key features: - Centralized port, domain, database, and service registries - 23 SIMCO directives + 6 fundamental principles - NEXUS agent profiles with delegation rules - Validation scripts for workspace integrity - Dockerfiles for all services - Path aliases for quick reference 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
418 lines
7.6 KiB
Markdown
418 lines
7.6 KiB
Markdown
# FASE 3 - TAREAS DE IMPLEMENTACION
|
|
|
|
**Fase:** 3 - Shared Infrastructure
|
|
**Estado:** Planificado
|
|
**Responsable:** DevOps-Agent
|
|
|
|
---
|
|
|
|
## RESUMEN DE TAREAS
|
|
|
|
| Grupo | Tareas | Esfuerzo Total |
|
|
|-------|--------|----------------|
|
|
| T3.1 Docker Networks | 3 | 3 horas |
|
|
| T3.2 Traefik | 4 | 6 horas |
|
|
| T3.3 Templates | 4 | 5 horas |
|
|
| T3.4 Environment | 3 | 3 horas |
|
|
| T3.5 Scripts | 3 | 3 horas |
|
|
| **TOTAL** | **17** | **20 horas** |
|
|
|
|
---
|
|
|
|
## T3.1 DOCKER NETWORKS
|
|
|
|
### T3.1.1 Crear networks.yml
|
|
|
|
**Esfuerzo:** 1 hora
|
|
|
|
**Ubicacion:** control-plane/devtools/docker/networks/networks.yml
|
|
|
|
**Contenido:**
|
|
```yaml
|
|
# networks.yml - Definicion de redes Docker
|
|
version: "1.0.0"
|
|
|
|
networks:
|
|
# Infraestructura compartida
|
|
infra:
|
|
name: infra_shared
|
|
driver: bridge
|
|
description: "Red para servicios de infraestructura (Traefik, monitoring)"
|
|
|
|
# Por proyecto - patron: {proyecto}_{ambiente}
|
|
projects:
|
|
gamilit:
|
|
environments: [local, dev, staging, prod]
|
|
pattern: "gamilit_{env}"
|
|
|
|
erp_suite:
|
|
environments: [local, dev, staging, prod]
|
|
pattern: "erp_{env}"
|
|
|
|
trading:
|
|
environments: [local, dev, staging, prod]
|
|
pattern: "trading_{env}"
|
|
|
|
betting:
|
|
environments: [local, dev, staging, prod]
|
|
pattern: "betting_{env}"
|
|
```
|
|
|
|
### T3.1.2 Crear create-networks.sh
|
|
|
|
**Esfuerzo:** 1 hora
|
|
|
|
**Ubicacion:** control-plane/devtools/docker/networks/create-networks.sh
|
|
|
|
**Funcionalidad:**
|
|
- Lee networks.yml
|
|
- Crea redes Docker especificadas
|
|
- Idempotente (no falla si red existe)
|
|
|
|
### T3.1.3 Documentar uso de redes
|
|
|
|
**Esfuerzo:** 1 hora
|
|
|
|
**Ubicacion:** control-plane/devtools/docker/networks/README.md
|
|
|
|
---
|
|
|
|
## T3.2 TRAEFIK CONFIGURATION
|
|
|
|
### T3.2.1 Crear traefik.yml
|
|
|
|
**Esfuerzo:** 2 horas
|
|
|
|
**Ubicacion:** control-plane/devtools/docker/traefik/traefik.yml
|
|
|
|
**Contenido:**
|
|
```yaml
|
|
# traefik.yml - Configuracion principal
|
|
api:
|
|
dashboard: true
|
|
insecure: true # Solo para desarrollo
|
|
|
|
entryPoints:
|
|
web:
|
|
address: ":80"
|
|
websecure:
|
|
address: ":443"
|
|
|
|
providers:
|
|
docker:
|
|
endpoint: "unix:///var/run/docker.sock"
|
|
exposedByDefault: false
|
|
network: infra_shared
|
|
file:
|
|
directory: /etc/traefik/dynamic
|
|
watch: true
|
|
|
|
log:
|
|
level: INFO
|
|
```
|
|
|
|
### T3.2.2 Crear routers.yml
|
|
|
|
**Esfuerzo:** 1.5 horas
|
|
|
|
**Ubicacion:** control-plane/devtools/docker/traefik/dynamic/routers.yml
|
|
|
|
**Contenido base:**
|
|
```yaml
|
|
# routers.yml - Routers dinamicos
|
|
http:
|
|
routers:
|
|
# Gamilit
|
|
gamilit-api:
|
|
rule: "Host(`api.gamilit.localhost`)"
|
|
service: gamilit-api
|
|
entryPoints:
|
|
- web
|
|
|
|
gamilit-web:
|
|
rule: "Host(`gamilit.localhost`)"
|
|
service: gamilit-web
|
|
entryPoints:
|
|
- web
|
|
|
|
# ERP Suite - Core
|
|
erp-api:
|
|
rule: "Host(`api.erp.localhost`)"
|
|
service: erp-api
|
|
entryPoints:
|
|
- web
|
|
|
|
# ... mas routers segun domains.registry.yml
|
|
```
|
|
|
|
### T3.2.3 Crear middlewares.yml
|
|
|
|
**Esfuerzo:** 1 hora
|
|
|
|
**Ubicacion:** control-plane/devtools/docker/traefik/dynamic/middlewares.yml
|
|
|
|
**Contenido:**
|
|
```yaml
|
|
# middlewares.yml - Middlewares comunes
|
|
http:
|
|
middlewares:
|
|
# Rate limiting
|
|
rate-limit:
|
|
rateLimit:
|
|
average: 100
|
|
burst: 50
|
|
|
|
# CORS
|
|
cors-headers:
|
|
headers:
|
|
accessControlAllowMethods:
|
|
- GET
|
|
- POST
|
|
- PUT
|
|
- DELETE
|
|
- OPTIONS
|
|
accessControlAllowOriginList:
|
|
- "*"
|
|
accessControlAllowHeaders:
|
|
- "*"
|
|
|
|
# Security headers
|
|
security-headers:
|
|
headers:
|
|
frameDeny: true
|
|
browserXssFilter: true
|
|
contentTypeNosniff: true
|
|
```
|
|
|
|
### T3.2.4 Crear docker-compose.traefik.yml
|
|
|
|
**Esfuerzo:** 1.5 horas
|
|
|
|
**Ubicacion:** control-plane/devtools/docker/traefik/docker-compose.traefik.yml
|
|
|
|
**Contenido:**
|
|
```yaml
|
|
version: "3.8"
|
|
|
|
services:
|
|
traefik:
|
|
image: traefik:v2.10
|
|
container_name: traefik
|
|
restart: unless-stopped
|
|
ports:
|
|
- "80:80"
|
|
- "443:443"
|
|
- "8080:8080" # Dashboard
|
|
volumes:
|
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
- ./traefik.yml:/etc/traefik/traefik.yml:ro
|
|
- ./dynamic:/etc/traefik/dynamic:ro
|
|
networks:
|
|
- infra_shared
|
|
|
|
networks:
|
|
infra_shared:
|
|
external: true
|
|
```
|
|
|
|
---
|
|
|
|
## T3.3 DOCKER COMPOSE TEMPLATES
|
|
|
|
### T3.3.1 Crear docker-compose.base.yml
|
|
|
|
**Esfuerzo:** 1.5 horas
|
|
|
|
**Contenido base para todos los servicios:**
|
|
```yaml
|
|
# docker-compose.base.yml
|
|
# Template base - NO usar directamente
|
|
|
|
x-logging: &default-logging
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
x-healthcheck: &default-healthcheck
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 10s
|
|
```
|
|
|
|
### T3.3.2 Crear docker-compose.backend.yml
|
|
|
|
**Esfuerzo:** 1.5 horas
|
|
|
|
**Template para servicios backend:**
|
|
```yaml
|
|
# docker-compose.backend.yml
|
|
# Template para backend services
|
|
|
|
version: "3.8"
|
|
|
|
services:
|
|
{{SERVICE_NAME}}:
|
|
build:
|
|
context: .
|
|
dockerfile: Dockerfile
|
|
container_name: {{SERVICE_NAME}}
|
|
restart: unless-stopped
|
|
expose:
|
|
- "{{PORT}}"
|
|
environment:
|
|
- NODE_ENV=${NODE_ENV:-development}
|
|
- PORT={{PORT}}
|
|
- DATABASE_URL=${DATABASE_URL}
|
|
healthcheck:
|
|
test: ["CMD", "curl", "-f", "http://localhost:{{PORT}}/health"]
|
|
<<: *default-healthcheck
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.{{SERVICE_NAME}}.rule=Host(`{{DOMAIN}}`)"
|
|
- "traefik.http.services.{{SERVICE_NAME}}.loadbalancer.server.port={{PORT}}"
|
|
networks:
|
|
- {{PROJECT}}_${ENV:-local}
|
|
- infra_shared
|
|
logging:
|
|
<<: *default-logging
|
|
|
|
networks:
|
|
{{PROJECT}}_${ENV:-local}:
|
|
external: true
|
|
infra_shared:
|
|
external: true
|
|
```
|
|
|
|
### T3.3.3 Crear docker-compose.frontend.yml
|
|
|
|
**Esfuerzo:** 1 hora
|
|
|
|
### T3.3.4 Crear docker-compose.fullstack.yml
|
|
|
|
**Esfuerzo:** 1 hora
|
|
|
|
---
|
|
|
|
## T3.4 ENVIRONMENT CONFIGURATION
|
|
|
|
### T3.4.1 Crear .env.template
|
|
|
|
**Esfuerzo:** 1 hora
|
|
|
|
**Contenido:**
|
|
```bash
|
|
# .env.template - Variables comunes
|
|
# Copiar a .env.{ambiente} y completar valores
|
|
|
|
# Ambiente
|
|
NODE_ENV=development
|
|
ENV=local
|
|
|
|
# Database
|
|
DATABASE_HOST=localhost
|
|
DATABASE_PORT=5432
|
|
DATABASE_NAME=
|
|
DATABASE_USER=
|
|
DATABASE_PASSWORD=
|
|
|
|
# Redis
|
|
REDIS_HOST=localhost
|
|
REDIS_PORT=6379
|
|
|
|
# JWT
|
|
JWT_SECRET=
|
|
JWT_EXPIRES_IN=1d
|
|
|
|
# Logging
|
|
LOG_LEVEL=info
|
|
LOG_FORMAT=json
|
|
```
|
|
|
|
### T3.4.2 Crear .env.local.template
|
|
|
|
**Esfuerzo:** 0.5 horas
|
|
|
|
### T3.4.3 Crear generate-env.sh
|
|
|
|
**Esfuerzo:** 1.5 horas
|
|
|
|
**Script que genera .env desde template:**
|
|
```bash
|
|
#!/bin/bash
|
|
# generate-env.sh
|
|
# Genera archivo .env desde template
|
|
|
|
TEMPLATE="$1"
|
|
OUTPUT="$2"
|
|
VALUES_FILE="$3"
|
|
|
|
if [ -z "$TEMPLATE" ] || [ -z "$OUTPUT" ]; then
|
|
echo "Uso: generate-env.sh <template> <output> [values-file]"
|
|
exit 1
|
|
fi
|
|
|
|
# Copiar template
|
|
cp "$TEMPLATE" "$OUTPUT"
|
|
|
|
# Si hay archivo de valores, sustituir
|
|
if [ -n "$VALUES_FILE" ] && [ -f "$VALUES_FILE" ]; then
|
|
while IFS='=' read -r key value; do
|
|
sed -i "s|{{$key}}|$value|g" "$OUTPUT"
|
|
done < "$VALUES_FILE"
|
|
fi
|
|
|
|
echo "Generado: $OUTPUT"
|
|
```
|
|
|
|
---
|
|
|
|
## T3.5 SCRIPTS DE SETUP
|
|
|
|
### T3.5.1 Crear init-workspace.sh
|
|
|
|
**Esfuerzo:** 1 hora
|
|
|
|
**Funcionalidad:**
|
|
- Crea redes Docker
|
|
- Levanta Traefik
|
|
- Verifica prerequisitos
|
|
|
|
### T3.5.2 Crear init-project.sh
|
|
|
|
**Esfuerzo:** 1 hora
|
|
|
|
**Funcionalidad:**
|
|
- Genera docker-compose desde template
|
|
- Genera .env desde template
|
|
- Conecta a redes correspondientes
|
|
|
|
### T3.5.3 Documentacion de uso
|
|
|
|
**Esfuerzo:** 1 hora
|
|
|
|
---
|
|
|
|
## CRONOGRAMA SUGERIDO
|
|
|
|
```
|
|
DIA 1:
|
|
- T3.1.1-T3.1.3 Docker Networks
|
|
- T3.2.1-T3.2.2 Traefik base
|
|
|
|
DIA 2:
|
|
- T3.2.3-T3.2.4 Traefik completo
|
|
- T3.3.1-T3.3.2 Templates base y backend
|
|
|
|
DIA 3:
|
|
- T3.3.3-T3.3.4 Templates frontend y fullstack
|
|
- T3.4.1-T3.4.3 Environment configs
|
|
- T3.5.1-T3.5.3 Scripts
|
|
- Validacion
|
|
```
|
|
|
|
---
|
|
|
|
**Documento generado por:** DevOps-Agent
|