Infraestructura Clásica (Administración de Sistemas) y Avanzada (Cloud Engineers, SRE, Devops) - perfeccion-ar/infraestructura-clasica-y-avanzada GitHub Wiki

Grupo gratuito de estudio Bunker 4

Padawans 👶 corrijan, agreguen ↓↓↓↓↓ todo lo que quieran ↓↓↓↓↓ editando esta página en Markdown

Material de trabajo

Alumnos:

Profes:

Los profes mantienen los siguientes elementos para dar las clases

  • Repositorio con código, scripts y diagramas
  • Server físico ubicado en Hetzner, Helsinki (37.27.49.225). Contiene LXD. Lo usaremos en modalidad self-hosting para desplegar infra clásica, sin recurrir a Cpanel ni a Plesk.
  • Server físico ubicado en Fundación Islas Malvinas, accesible vía https://bunker4.perfeccion.ar:10050 - es un Proxmox instalado detrás de un Mikrotik, y de un modem Movistar. Propósito:
    • Sirve para aprender a desplegar manualmente Swarm, LXD, Kubernetes gratis, como Entorno de Pruebas o "Dev". También serán útiles los conceptos de Home Lab y ruteo desde el modem casero de Movistar: reenvío de puertos, cuidados, diferencias entre Bridge y NAT. Vea el video aquí.
  • Google Cloud, gratis por tres meses, luego Sergio lo banca - https://console.cloud.google.com - este entorno será para
    • Mostrar despliegue de VMs en Cloud
    • Crear Kubernetes otra vez, pero Productivo
      • Lo encenderemos el tiempo necesario para desplegar los mismos manifiestos que hemos creado en el Kubernetes Dev del Proxmox. Luego lo destruiremos.
      • Lo haremos varias veces, no solo por el costo, sino para practicar Terraform (un destructor / creador de Infraestructura por código)

Herramientas básicas que veremos todo el tiempo

  • Un multiplexador de Terminal: (Screen, Tmux) pero se prefiere Byobu que es el más fácil de usar.
  • SSH y sus GUI: Filezilla, winscp, mc (Midnight Commander)
  • Pastebin, snippets
  • El comando Git!
  • Visual Code Editor
    • TODO: clase sobre cómo "tunelearse" vía SSH hacia el servidor, e incluso hacia adentro de los containers, para programar like the boss 🕶️

Temario tentativo

Infraestructura clásica: setearse uno mismo el servidor con GNU Linux

Imagen: Tux y Savannah

En cada VPS del servidor, los alumnos deben

  • Configurar Apache (o un Nginx), un stack LAMP (Linux, Apache, PHP, MySQL)

  • Instalar un CMS (ej: Wordpress, Joomla, etc).

  • Crear usuarios (adduser), establecer permisos

    • Para los usuarios (chown),
    • Para Apache (usuario www-data)
  • Configurar DNS por afuera, para no complicarse en instalar Bind ni Active Directory

    • Opciones gratis: Hurricane Electric (dns.he.net), que es gratis.
    • DNS Dinamico (DDNS) como duckdns.org - acepta solo subdominios .duckdns.org
    • Cloudflare: el mejor: emite un certificado SSL por nosotros, de modo que no hace falta configurar ni 443 ni ssl
  • Configurar Virtualhost por cada sitio que traigan los alumnos. Ejemplos

    • catoto.duckdns.org -> /home/cristian/proyectos-wordpress/wordpress1/
    • alfaro-services.com.ar -> /home/oscar/Documentos/sitio1/
  • Configurar al menos dos RDBMS, y un NOSQL: usaremos

  • Administrar la VPS en forma remota con SSH

  • Subir y bajar archivos mediante

    • SCP, winscp, filezilla, Midnight Commander, etc.
    • FTP - es reviejo, pero es un clásico: algún cliente podría necesitarlo para subir sus cosas.
  • Aprender a hacer backups

    • del sitio
    • de la base
    • de /etc
  • Backups y tareas de mantenimiento más sofisticadas

    • Scripts en Shell
    • Scripts en otra cosa: Python, Ruby, PHP, etc
  • Automatizar vía Cron

    • scripts en /etc/cron/cron.daily
    • Comando crontab -e
    • Cronear un comando
    • Cronear un script shell
    • Cronear un backup
  • Storage: NFS, Ceph

  • Despliegue de frameworks populares.

    Antes de andar dockerizando por ahí, es bueno que usted haga un deploy en forma convencional de algunos frameworks conocidos.

    Si bien no son el objetivo de este taller, durante el mismo, para poder probar Bases de Datos y Virtualhosts, configuramos:

    • Python: Django
    • Ruby: Rails
    • PHP: Laravel: ¿quien se anima?
  • Java: tarde o temprano se encontrarán en la situación de tener que setear el JRE, o el JDK.Antes de pasar a containers, debemos tener algunos conocimientos súper básicos sobre este tema.

    • Instalar el Java de Oracle (para las muchas veces que no podemos usar OpenJDK)
    • Configurar la variable de entorno JAVA_HOME
    • Compilar una clase. Distinguir entre .java → .class → .jar → .war
    • Ejecutarla ajustando la memoria (ej: Xmx)
    • Instalar un web server de Java, como Tomcat
    • Desplegar adentro
      • Algún war, ej: Jenkins
      • Algún framework, ej: Spring

Infraestructura clásica, pero mas avanzada

No, todavía Docker no. Siga leyendo.

Paravirtualización liviana de Sistemas Operativos con LXD

Desde un punto de vista didáctico, antes de Docker, conviene pasar antes por LXD. Este proyecto "es el abuelo de Docker", y puede ser instalado en cualquier computadora siguiendo este enlace. Así funciona nuestro server donde impartimos el taller.

Gracias a LXD, cada alumno es root en su VPS: un container LXD que es suyo para siempre.

Paravirtualización de aplicaciones con Docker

Una vez que domine la creación de containers LXD bajo la línea de comandos, estará en condiciones de continuar a Docker. Puede de hecho, si desea, meter Docker adentro de los containers LXD.

También puede seguir profundizando en infra clásica, aprendiendo a configurar su propio Hypervisor de containers y máquinas virtuales LXD

Actividades

  • Conocer la instalación de contenedores LXD que tenemos en Hetzner01, un metal contratado en Alemania
  • Configurar adentro lo más básico, con lo que comienzan todos: Stack LAMP, con Linux, Apache, MySQL, PHP, phpMyadmin. El stack mas conocido, más simple de todos, y más fácil de monetizar: Instalación-de-Wordpress-en-una-VPS/Server-propio,-con-Apache2
  • Por el camino, cada uno se configura su propio servicio DNS, Virtualhost, Base de datos, etc
  • El que pueda, que se haga su primera chamba, vendiendo un sitio o un servicio. Puede auto hosteandose en el server del aula. Ejemplo, puede configurar un Moodle, que es también stack LAMP, fácil de administrar una vez instalado, y tiene buena salida laboral.

Infra clásica, en un server casero

Además del server en Hetzner, se propone como actividad:

  • Configurar el modem router de Movistar para tener nuestro propio server casero
  • Reenviar puertos: 80 (HTTP), 443 (HTTPS), SSH (22), e Hypervisor Proxmox (8006)
  • Si no tenemos ip fija ni dominio, jugar con DDNS, de la mano de duckdns.org
  • El mini server puede tener solo Linux, o algo mas completo, como LXD, o Proxmox, que es un especie de VMWare vSphere gratis

Infraestructura híbrida

Hay ciertos servicios que no siempre conviene configurarlos en nuestra propia infraestructura. De hecho, conviene tercerizarlos, contratarlos en clouds, o recurrir a servicios especializados. Algunos de ellos son:

  • El DNS externo: contratarlo en Hurricane (dns.he.net), en Cloudflare o en duckdns.org - revise el abundante material que tenemos sobre el tema en este wiki
  • Email masivo sin complicarnos con configurar email service en el servidor

Otra habilidad que debemos saber desarrollar cuando manejamos infraestructura que está repartida en varios datacenters, detrás de firewalls bastiones o clouds, es aprender crear túneles. Vea este artículo sobre cómo acceder a los MySQL del aula mediante túneles, sin necesidad de exhibir a phpMyAdmin.

Infra con Docker, preparación para Clouds

Aprenderemos a:

  • Generar imágenes, subirlas al Hub
  • Usar docker-compose en pequeños proyectos
  • Desplegar configuraciones sumamente complejas, con apenasunos simples comandos. Ejemplo
    • Gitlab-CE propio. Muy útil en las empresas.
    • Jenkins
    • etc

Cada receta de cocina ("docker-compose.yml") irá a este repositorio. Lo mismo los manifiestos Kubernetes. La idea es que los alumnos puedan llevárselas donde quieran, y que puedan desplegar rápidamente en cualquier empresa.

Docker Swarm Prod, cluster chicos

  • Clonar la VM, armar un clustercito Swarm en Debian
  • Armar un microservicio en Flask, otro en Node que haga de Front, y que hablen entre ellos
  • Meter un balanceador simple: un servidor web con virtualhost, cada uno apuntando a otros containers medíante Proxy Reverso

Kubernetes Dev environment

  • Ver como se instala un pequeño kubernetes, con kubeadm, o k0s, o minik8s (ubuntu: KISS)

Kubernetes producción

  • Levantar un cluster en un cloud
  • Desplegar los pods y los servicios rápidamente gracias a los manifiestos yamls

CI/CD

  • Configurar un Jenkins en un container de hetzner01
  • Ver como se configurar un hook o un Gitlab CI/CD para que trigeree al Jenkins
  • El Jenkins deberia loguearse al cluster y generar un rolling update

Terraform

  • Desplegar y destruir muchas veces, pero por código, contra el cloud

Observabilidad

Este capítulo es una preparación para SRE. La observabilidad es necesaria cuando se tienen cientos de contenedores. Se requiere para poder determinar problemas de carga, escalamiento y caídas.

No perderse estos talleres, conferencias. Anotarse en cada una de las charlas de https://www.meetup.com/grafana-friends-mendoza/events/

Ver material del legendario Juanjo Ciarlante, que siempre deja todo listo para replicar sus pruebas

  • Métricas: Configurar Prometheus, Grafana
  • Logging: Configurar Grafana Loki
  • Tracing: Grafana Tempo, o Jaeger

Tenemos hasta soporte en el canal de Grafana en Slack!

Producto final

Para probarnos sobre el terreno, se podría crear algún producto como composición final, que tenga incluso potencial de venderse.

Por ejemplo, no he visto ningún SaaS (https://es.wikipedia.org/wiki/Software_como_servicio) para abogados. Un sistema donde puedan llevar su agenda, que el sistema les recuerde a sus clientes que deben presentarse en juzgado tal día, etc. Son pocas tablas, se podría dejar usarlo gratis, y pasado una cierta de clientes, cobrar una mensualidad.

Se aceptan ideas de ese tipo - a [email protected]

⚠️ **GitHub.com Fallback** ⚠️