-
Notifications
You must be signed in to change notification settings - Fork 1
Home
Anderson Fabian Garcia Nieto edited this page Jul 9, 2026
·
6 revisions
Curso: Modelo Operativo de la Nube y Software Resiliente
Universidad: Escuela Colombiana de Ingeniería Julio Garavito
Equipo: @AnderssonProgramming · @Anderfg13 · @daniel-pm19 · @esteban0903 · @Juan-Jose-D
Repositorio: co-eiv-devsecops/linker1
Producción: https://1.n-la-c.app
Linker1 es un acortador de URLs diseñado como laboratorio práctico para aplicar principios de software resiliente, DevSecOps y operación en la nube. La aplicación permite a los usuarios:
-
Acortar URLs: ingresa una URL larga y obtén un identificador corto de 8 caracteres (e.g.
https://1.n-la-c.app/a3f2b1c0). -
Aliases personalizados: opcionalmente define un alias legible (e.g.
https://1.n-la-c.app/mi-enlace). - Redirección 301: al visitar un enlace corto, el usuario es redirigido permanentemente a la URL original.
Más allá de la funcionalidad, el verdadero objetivo es la infraestructura, el pipeline y las prácticas operativas que lo rodean.
Construir y operar una aplicación web en un entorno cloud real, aplicando los principios fundamentales del curso:
| Área | Objetivo |
|---|---|
| 12-Factor App | Diseñar la aplicación siguiendo las 12 mejores prácticas para software nativo en la nube |
| CI/CD | Pipeline automatizado completo: build → test → package → deploy → validate → rollback |
| Cloud Architecture | Despliegue en OCI con Bastion, Nginx reverse proxy y systemd |
| Observability | Telemetría completa (logs, métricas, traces) con OpenTelemetry → Grafana Cloud |
| Feature Flags | Releases controlados con LaunchDarkly, desacoplando deploy de release |
| DevSecOps | Secrets management, branch protection, CODEOWNERS, security policies |
| Resilience | Rollback automático, health checks, graceful degradation |
| Tecnología | Versión | Propósito |
|---|---|---|
| Java | 21 (Temurin) | Lenguaje principal |
| Javalin | 6.5.0 | Framework HTTP ligero |
| SQLite | 3.49.1 | Base de datos embebida para almacenamiento de links |
| MySQL Connector/J | 9.7.0 | Healthcheck de backing service (SELECT 1) |
| Jackson | 2.22.0 | Serialización/deserialización JSON |
| Tecnología | Versión | Propósito |
|---|---|---|
| OpenTelemetry SDK | 1.63.0 | Instrumentación manual (métricas, traces, logs) |
| OpenTelemetry OTLP Exporter | — | Exportación vía protocolo http/protobuf
|
| Logback | 1.5.18 | Framework de logging (SLF4J binding) |
| OTel Logback Appender | 2.29.0-alpha | Bridge de logs Logback → OpenTelemetry |
| Grafana Cloud | — | Backend de observabilidad (Loki, Mimir, Tempo) |
| Tecnología | Versión | Propósito |
|---|---|---|
| LaunchDarkly Java SDK | 7.8.0 | Feature flags en tiempo real |
| Tecnología | Propósito |
|---|---|
| Oracle Cloud Infrastructure (OCI) | Proveedor de nube (región sa-bogota-1) |
| Terraform | Infraestructura como Código (IaC) |
| Nginx | Reverse proxy (puerto 80 → 8080) |
| systemd | Gestión del proceso de la aplicación |
| OCI Bastion | Acceso SSH seguro a la VM (sin IP pública) |
| Tecnología | Propósito |
|---|---|
| GitHub Actions | Workflows de CI/CD |
| Maven | Build system y gestión de dependencias |
| JUnit 5 | Framework de testing |
| Mockito | Mocking para tests unitarios |
| JaCoCo | Cobertura de código (umbral: 100% en líneas) |
| Newman (Postman) | Tests de API automatizados contra producción |
| GitHub Packages | Registro de artefactos Maven |
Main (Composition Root)
├── Telemetry.createFromEnvironment()
│ │
│ ▼
│ OpenTelemetry SDK (OTEL_* env vars → OTLP export)
│
├── LinkRepository(conn) ──→ SQLite
├── LinkService(repository)
├── FeatureFlags(ldClient) ──→ LaunchDarkly
│
├── RequestMetrics(meter) ──┐
├── LinkSpans(tracer, meter) ├──→ LinkRoutes
├── SystemMetrics(meter) ──┘
│
├── HealthCheck(tracer, mysqlConn) ──→ HealthRoutes
│
├── StaticRoutes(featureFlags)
└── Javalin → start(port)
| Página | Descripción |
|---|---|
| 12 Factor App | Cómo el proyecto implementa cada uno de los 12 factores |
| CI CD Pipeline | Flujo completo de integración y despliegue continuo |
| Cloud Architecture | Arquitectura cloud en OCI, diagrama y componentes |
| Continuous Learning | Aprendizaje continuo y experimentación del equipo |
| DevSecOps Practices | Prácticas de seguridad integradas en el ciclo de desarrollo |
| Feature Flags | Gestión de releases con LaunchDarkly |
| Observability | Logs, métricas y traces con OpenTelemetry + Grafana |
| Postmortems | Análisis post-incidente de problemas reales encontrados |
| Testing Strategy | Estrategia de testing y cobertura de código |