workspace-v1/03-fase-shared-infra/PLANEACION/00-TAREAS.md
Adrian Flores Cortes 967ab360bb Initial commit: Workspace v1 with 3-layer architecture
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>
2025-12-23 00:35:19 -06:00

7.6 KiB

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:

# 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:

# 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:

# 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:

# 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:

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:

# 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:

# 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:

# .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:

#!/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