Saltar al contenido principal

Borrador en Vista Previa

"Consejos de DevOps que Aprendí a Golpes (Y Tú No Tienes Que)" no está publicado públicamente

Consejos de DevOps que Aprendí a Golpes (Y Tú No Tienes Que)

Publicado:jue, 28 de diciembre de 2023
Consejos para DevOps
Consejos para DevOps

“¿Quién fue el genio que hizo deploy un viernes a las 6 PM?” Esa pregunta resonó en el Slack de la empresa mientras yo, sudando frío, trataba de arreglar el desastre que había causado. Era mi segundo mes como DevOps Engineer y acababa de aprender la regla número uno de manera muy dolorosa.

Después de 4 años en este mundo, he cometido prácticamente todos los errores posibles. Pero también he aprendido lecciones valiosas que me han convertido en un mejor profesional. Te voy a compartir los consejos más importantes que me hubiera gustado conocer desde el día uno.

1. Nunca, JAMÁS, Hagas Deploy los Viernes

[PLACEHOLDER: Agregar la historia completa del deploy del viernes - qué salió mal, cómo lo arreglaste, cuánto tiempo tomó, qué aprendiste]

Esta regla existe por una razón. Los viernes por la tarde tu cerebro ya está en modo weekend, el equipo se está yendo, y si algo sale mal, vas a pasar tu fin de semana arreglándolo.

Mi Regla Personal de Deploys:

  • Lunes-Miércoles: Deploy libre (con precaución)
  • Jueves: Solo si es crítico y tienes backup plan
  • Viernes: Solo si quieres arruinar tu fin de semana
  • Sábado-Domingo: Ni lo pienses

2. Automatiza Todo (Pero Hazlo Gradualmente)

Al principio pensé que tenía que automatizar todo de una vez. Error garrafal. Terminé con scripts súper complejos que nadie entendía, ni siquiera yo después de unas semanas.

Mi Enfoque Actual:

# Empecé simple - script para backup de base de datos
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
pg_dump myapp_db > backup_$DATE.sql
echo "Backup completado: backup_$DATE.sql"

[PLACEHOLDER: Agregar cómo evolucionó este script - tal vez agregaste compresión, subida a S3, notificaciones, etc.]

Herramientas que Realmente Uso:

  1. Ansible: Para configuración de servidores
  2. Terraform: Para infraestructura como código
  3. GitHub Actions: Para CI/CD
  4. Docker: Para containerización
  5. Taskfile: Para comandos locales (porque soy perezoso)

[PLACEHOLDER: Para cada herramienta, agregar un ejemplo específico de cómo la usas y por qué la elegiste]

3. Monitoreo: Si No Lo Mides, No Existe

Mi primer gran outage me enseñó esto de la manera más dura. La aplicación estuvo caída por 2 horas y no nos dimos cuenta hasta que un cliente nos escribió.

Mi Stack de Monitoreo Actual:

# docker-compose.yml para mi stack de monitoreo
version: '3.8'
services:
  prometheus:
    image: prom/prometheus
    ports:
      - '9090:9090'
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
 
  grafana:
    image: grafana/grafana
    ports:
      - '3000:3000'
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin123
    volumes:
      - grafana-storage:/var/lib/grafana
 
  alertmanager:
    image: prom/alertmanager
    ports:
      - '9093:9093'

[PLACEHOLDER: Agregar detalles sobre qué métricas específicas monitoras, qué alertas tienes configuradas, algún incidente que el monitoreo te ayudó a detectar temprano]

4. Infraestructura como Código: Tu Mejor Amigo

Antes de IaC, configurar un servidor nuevo me tomaba medio día y siempre me olvidaba de algo. Ahora:

# main.tf - Mi template básico para un servidor web
resource "aws_instance" "web_server" {
  ami           = "ami-0c55b159cbfafe1d0"
  instance_type = "t3.micro"
 
  user_data = file("${path.module}/setup.sh")
 
  tags = {
    Name = "web-server-${var.environment}"
    Environment = var.environment
  }
}

[PLACEHOLDER: Agregar ejemplo de cómo este approach te salvó tiempo, o alguna situación donde tuviste que recrear infraestructura rápidamente]

5. Backups: Reza Para Nunca Necesitarlos, Pero Tenlos

[PLACEHOLDER: Agregar historia sobre alguna vez que necesitaste un backup - qué pasó, cómo te salvó, qué hubiera pasado sin él]

Mi Estrategia de Backup 3-2-1:

  • 3 copias de los datos
  • 2 tipos de medios diferentes
  • 1 copia offsite
# Mi script de backup diario
#!/bin/bash
# Backup de base de datos
pg_dump myapp | gzip > /backups/db_$(date +%Y%m%d).sql.gz
 
# Subir a S3
aws s3 cp /backups/db_$(date +%Y%m%d).sql.gz s3://my-backups/
 
# Limpiar backups locales antiguos (mantener 7 días)
find /backups -name "db_*.sql.gz" -mtime +7 -delete

6. Seguridad: No Es Opcional

Mi primer security audit fue… traumático. Tenía passwords hardcodeados, puertos abiertos innecesariamente, y certificados SSL vencidos.

Checklist de Seguridad Básica:

  • Usar variables de entorno para secrets
  • Cerrar puertos innecesarios
  • Mantener certificados SSL actualizados
  • Actualizaciones regulares de sistema
  • Acceso SSH solo con llaves
  • Firewall configurado correctamente

[PLACEHOLDER: Agregar ejemplo específico de algún problema de seguridad que encontraste y cómo lo solucionaste]

7. Documentación: Tu Yo del Futuro Te Lo Agradecerá

[PLACEHOLDER: Agregar anécdota sobre alguna vez que no documentaste algo y después te costó trabajo recordar cómo funcionaba]

Mi Template de Documentación:

# Proyecto: [Nombre]
 
## ¿Qué hace?
 
Descripción simple en una línea
 
## ¿Cómo correrlo?
 
```bash
docker-compose up -d
```

¿Cómo hacer deploy?

./deploy.sh production

¿Qué hacer si se rompe?

  1. Revisar logs: docker logs app
  2. Revisar métricas en Grafana
  3. Si todo falla, rollback: ./rollback.sh

## 8. **Testing: Mejor Prevenir que Lamentar**

*[PLACEHOLDER: Agregar historia sobre algún bug que llegó a producción porque no había tests, o cómo los tests te salvaron de un desastre]*

### Mi Pipeline de Testing:

```yaml
# .github/workflows/ci.yml
name: CI/CD Pipeline
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Run Unit Tests
        run: npm test
      - name: Run Integration Tests
        run: npm run test:integration
      - name: Security Scan
        run: npm audit

9. Comunicación: El Skill Más Subestimado

DevOps no es solo tecnología, es también comunicación. He visto proyectos fallar no por problemas técnicos, sino por falta de comunicación.

[PLACEHOLDER: Agregar ejemplo de algún malentendido que causó problemas, o cómo la buena comunicación salvó un proyecto]

Mis Reglas de Comunicación:

  • Documenta las decisiones importantes
  • Explica el “por qué”, no solo el “qué”
  • Usa diagramas cuando sea posible
  • Mantén a todos informados sobre cambios críticos

10. Aprende de los Errores (Propios y Ajenos)

Cada outage, cada error, cada “oops” es una oportunidad de aprender. Mantengo un “failure log” donde documento:

  • ¿Qué salió mal?
  • ¿Por qué pasó?
  • ¿Cómo lo arreglamos?
  • ¿Cómo prevenirlo en el futuro?

[PLACEHOLDER: Agregar ejemplo de algún error que cometiste, qué aprendiste, y cómo cambió tu forma de trabajar]

Herramientas que Realmente Valen la Pena

Después de probar cientos de herramientas, estas son las que realmente uso:

Para Automatización:

  • Ansible: Configuración de servidores
  • Terraform: Infraestructura como código
  • GitHub Actions: CI/CD simple y efectivo

Para Monitoreo:

  • Prometheus + Grafana: Métricas y dashboards
  • Uptime Kuma: Monitoreo de uptime simple
  • Sentry: Error tracking en aplicaciones

Para Contenedores:

  • Docker: Containerización
  • Docker Compose: Orquestación local
  • Portainer: UI para Docker (cuando soy perezoso)

[PLACEHOLDER: Para cada herramienta, agregar por qué la elegiste sobre las alternativas]

Mi Consejo Final

DevOps es un viaje, no un destino. Vas a cometer errores, vas a tumbar cosas, vas a tener noches sin dormir arreglando problemas. Es normal.

Lo importante es:

  1. Aprender de cada error
  2. Automatizar para no repetir errores
  3. Documentar todo
  4. Mantener la calma bajo presión
  5. Nunca dejar de aprender

[PLACEHOLDER: Agregar reflexión personal sobre cómo ha cambiado tu perspectiva sobre DevOps, qué consejo le darías a alguien que está empezando]


¿Tienes alguna historia de terror de DevOps que quieras compartir? ¡Déjala en los comentarios! Todos hemos pasado por esos momentos y es terapéutico compartirlos.

¿Qué tema de DevOps te gustaría que cubra en el próximo post? Estoy pensando en escribir sobre Docker, Kubernetes, o tal vez sobre cómo configurar un homelab desde cero.



Quieres apoyarme para seguir creando contenido? Puedes invitarme un café (o una cerveza) en mi página de Ko-Fi, es totalmente voluntario y tu ayuda me serviría de mucho para seguir haciendo lo que amo.


Cargando historial...

¿Te gustó este artículo?