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
- Solicitar ingreso a [email protected] o a [email protected]
- Todos los artículos aquí están liberados

Padawans 👶 corrijan, agreguen ↓↓↓↓↓ todo lo que quieran ↓↓↓↓↓ editando esta página en Markdown
- Link permanente vía Google Meet: www.eim.esc.edu.ar/sala2
- Opción recomendada: Compu con Linux. Allí, agregue
- Visual Code Editor con extensiones SSH, Docker, Git-lens, Material-icon-theme, Retrocoders, Python, y Shellcheck. En el caso de Ubuntu, Fedora, instale siguiendo estas instrucciones:
- En el caso que su hardware sea incompatible con Linux: **Compu con Windows 10/11** - debe instalar
- Visual Code Editor y Windows Terminal instalado desde Microsoft Store
- Preferentemente, con Docker y Ubuntu bajo WSL (hay varios tutoriales en Internet sobre eso, o puede usar el mío, pag 19 a la 26)
- Última opción: Powershell, que incluye un cliente SSH decente, con SCP, ssh-keygen, etc.
- Y agregue GIT para Windows (instalado todo full!) y si tiene potencia, Docker Desktop.
- El alumno debe en sus ratos libres
- Mirar estos conceptos básicos de Linux, WSL y de GIT: vídeos de Fernando Leiva.
- Tener a mano estos conceptos básicos de Redes en Linux: libro en PDF
- Mantener al día su CV. Siga estos consejos sobre conseguir buenos empleos en Linkedin
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)
- 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 🕶️

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
- MongoDB
- Apuntes clase sobre MongoDB, by @cristianchiera
- PostgreSQL
- MySQL - Ver:
- Como hacer backup de MySQL, y restaurar
- Configurar phpMyadmin
- MongoDB
-
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
- Relacionado: uso e instalación del Bash Debugger
- Scripts en otra cosa: Python, Ruby, PHP, etc
- Scripts en Shell
-
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:
-
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
No, todavía Docker no. Siga leyendo.
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.
- Para acceder a los containers, entender como fueron creados, y aprender a subir y a bajar archivos de ellos, haga click aquí.
- Si tiene su propio server o su propia VPS, y quiere aplicar LXD para separar sus ambientes, también puede ver la clase en la que hemos configurado el servidor de Oscar, con varios containers. Allí combinamos DNS, Apache, Django, Rails y Wordpress. En este otro link encontrará los apuntes para configurar su propio Proxy Reverso con LXD, Virtualhost y Django.
- Cada alumno es responsable de su propio container. Si quiere clonarlo, hacerle snapshots o llevarselo a otro server, siga estos consejos.
- No publique material con Copyright en su container.
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

- 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.
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
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.
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.
- Algunas guías propuestas
- Curso de Docker para Supercanal - incluye seteo de WSL y trabajar también en Windows
- Tutorial aportado por Catoto
- Material de apoyo extra - by @j.tassi
- Para docker-compose, SSL, y hosteo de servicios simples, un buen resúmen del Peladonerd: https://www.youtube.com/watch?v=FPzKyWNRWiU&t=425s
- 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
- Ver como se instala un pequeño kubernetes, con kubeadm, o k0s, o minik8s (ubuntu: KISS)
- Levantar un cluster en un cloud
- Desplegar los pods y los servicios rápidamente gracias a los manifiestos yamls
- 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
- Desplegar y destruir muchas veces, pero por código, contra el cloud
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!
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]