
Entender CI/CD, contenedores, reverse proxy y prácticas clave para dar el salto de desarrollador web a perfil DevOps junior.
¿Qué es DevOps y por qué importa?
- DevOps une desarrollo y operaciones para entregar software más rápido y con menos errores.
- El objetivo principal es automatizar: build, testing, despliegue y monitoreo.
- Un perfil DevOps junior debe dominar fundamentos de Linux, redes, Git y automatización.
CI/CD en proyectos reales
- CI (Integración Continua): cada push ejecuta lint, tests y validaciones automáticas.
- CD (Entrega/Despliegue Continuo): si CI pasa, se genera artefacto y se despliega.
- Pipelines bien diseñados reducen bugs en producción y aceleran releases.
Docker para estandarizar entornos
- Docker evita el típico problema de "en mi máquina sí funciona".
- Contenerizar frontend y backend facilita despliegues reproducibles.
- Conceptos base: imagen, contenedor, Dockerfile, volumen, red.
NGINX como puerta de entrada
- NGINX funciona como reverse proxy para enrutar tráfico a frontend y backend.
- Permite servir archivos estáticos, balancear carga y gestionar TLS/HTTPS.
- Es común en producción junto a Docker para exponer servicios de forma segura.
Infraestructura, observabilidad y seguridad
- Infraestructura como código (IaC) con Terraform en etapas más avanzadas.
- Observabilidad básica: logs, métricas y health checks.
- Seguridad mínima obligatoria: secretos fuera del repo, headers de seguridad, backups y principio de menor privilegio.
Plan de aprendizaje recomendado (8 semanas)
- Semana 1-2: Linux, procesos, permisos, bash y networking básico.
- Semana 3-4: Docker, Docker Compose y despliegue local multi-servicio.
- Semana 5-6: CI/CD con GitHub Actions y despliegues automáticos.
- Semana 7-8: NGINX, HTTPS, monitoreo básico y hardening inicial.
Ejemplos de Código
4 ejemplos
Workflow inicial de CI
yaml
1name: CI-CD
2
3on:
4 push:
5 branches: [main]
6 pull_request:
7 branches: [main]
8
9jobs:
10 test-and-build:
11 runs-on: ubuntu-latest
12 steps:
13 - name: Checkout
14 uses: actions/checkout@v4
15
16 - name: Setup Node
17 uses: actions/setup-node@v4
18 with:
19 node-version: 20
20
21 - name: Install
22 run: npm ci
23
24 - name: Test
25 run: npm test
26
27 - name: Build
28 run: npm run buildContenerización backend
other
1FROM node:20-alpine
2
3WORKDIR /app
4
5COPY package*.json ./
6RUN npm ci --omit=dev
7
8COPY . .
9
10EXPOSE 3000
11CMD ["node", "server.js"]Orquestación local
yaml
1version: "3.9"
2services:
3 app:
4 build: .
5 container_name: web-app
6 expose:
7 - "3000"
8
9 nginx:
10 image: nginx:stable-alpine
11 container_name: reverse-proxy
12 ports:
13 - "80:80"
14 volumes:
15 - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
16 depends_on:
17 - appReverse proxy para contenedor app
yaml
1server {
2 listen 80;
3 server_name _;
4
5 location / {
6 proxy_pass http://app:3000;
7 proxy_http_version 1.1;
8 proxy_set_header Host $host;
9 proxy_set_header X-Real-IP $remote_addr;
10 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
11 proxy_set_header X-Forwarded-Proto $scheme;
12 }
13}Recursos
3 recursos disponibles
Documentación Oficial
DocumentaciónPrincipiante
NGINX Admin Guide
Guía oficial para reverse proxy y configuración de servidores.
Documentación Oficial
DocumentaciónIntermedio0
GitHub Actions Docs
Referencia oficial para crear workflows de CI/CD.