# Tema 1 · 2 · Publicar una página web desde tu máquina Presentación del Tema 1: «Ejemplo creación VM (IaaS)» (servidor web). Duración: unos 15 minutos. Coste: el de la máquina encendida (céntimos). ## Qué vas a hacer Arrancar un servidor web mínimo dentro de tu máquina virtual, abrir el puerto 80 **solo para ti** en el Security Group y comprobar desde tu navegador que la página se ve. Con esto entiendes la diferencia entre «el servicio funciona dentro de la máquina» y «el cortafuegos deja pasar el tráfico». Esta carpeta **no tiene ficheros que descargar**: los comandos se escriben en la máquina y los cambios de red se hacen en la consola. ## Antes de empezar - [ ] Has hecho [`01.01-CrearYConectarVM.md`](01.01-CrearYConectarVM.md): tienes la máquina `maquina` en *Running* y sabes entrar con `ssh` (o con el botón *Connect*). - [ ] Región **eu-north-1**. ## Paso a paso ### Paso 1 · Lanzar el servidor web Entra en la máquina y, dentro, **línea a línea**: ```bash mkdir ~/web echo "Hola desde mi VM" > ~/web/hola.txt cd ~/web sudo python3 -m http.server 80 ``` **Qué debes ver:** `Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...`. El comando publica **la carpeta en la que estás** en el puerto 80 (HTTP). Para pararlo: `Ctrl+C`. **El servidor ocupa esta terminal** mientras funciona (no vuelve el prompt). Para ejecutar otros comandos, por ejemplo `curl http://localhost`, **abre una segunda terminal y entra otra vez con `ssh`** (misma orden que en el apartado 2.2 de la carpeta anterior); la primera sigue sirviendo la página. Cuando acabes, vuelve a la primera y pulsa `Ctrl+C`. > **Seguridad. Léelo antes de ejecutar nada.** `sudo python3 -m http.server` corre como administrador y **sirve el directorio actual sin autenticación ni cifrado**. Lanzado desde `/`, cualquiera que llegue al puerto lee `/etc/shadow` y `/root/` (responde HTTP 200); lanzado desde tu carpeta personal expone `.ssh/authorized_keys` y todos tus ficheros, incluida tu llave. **Nunca lo arranques desde `/` ni desde `~`: usa siempre la carpeta de prueba `~/web`.** ### Paso 2 · Abrir el puerto 80 solo para ti EC2 > Security Groups > el de tu máquina > **Edit inbound rules** > **Add rule**: tipo **HTTP** (puerto 80), origen **My IP**. Guarda. - Si tus compañeros deben ver tu página, usa `0.0.0.0/0` **solo durante la práctica**. - **Cuando termines, elimina la regla** (o cierra el servidor y la máquina). ### Paso 3 · Comprobarlo desde el navegador 1. Localiza tu IP pública: EC2 > Instances > tu máquina > **Public IPv4 address** (¡cada uno tiene una distinta! No es la IP privada `172.31...`, que solo vale dentro de AWS). 2. En el navegador escribe `http://`, **con http, sin la S de https**. El navegador puede añadir `https` solo y marcar el sitio como *No seguro*: es normal, el servidor no tiene certificado. **Qué debes ver:** `Directory listing for /` con un único enlace, `hola.txt`. También puedes comprobarlo sin navegador, desde tu equipo: `curl http://` devuelve el HTML de la página, con `Directory listing for /` y una línea `
  • hola.txt
  • `. **Si la página se queda cargando:** casi siempre falta la regla del puerto 80, o tu IP ha cambiado, o el servidor no sigue en marcha. Desde dentro de la máquina (en la segunda terminal), `curl http://localhost` debe responder; si responde ahí y no desde el navegador, el problema es el Security Group. ### Paso 4 · Cerrar el servidor Vuelve a la primera terminal y pulsa `Ctrl+C`. Quita la regla HTTP del Security Group si ya no la necesitas (o déjala para la siguiente carpeta, donde vuelves a lanzar el servidor). ## Errores frecuentes | Síntoma | Causa | Solución | |---|---|---| | `curl http://localhost` no se puede escribir: la terminal está ocupada | El servidor web se ejecuta en primer plano | Abre una segunda terminal y entra con otro `ssh` | | La página web se queda cargando | Falta la regla del puerto 80, o escribiste `https://` | Añade la regla HTTP (puerto 80) con tu IP y usa `http://` | | `Connection refused` | Llegas a la máquina, pero nadie escucha en ese puerto | Lanza el servidor (paso 1) | | `Address already in use` al lanzar el servidor | Ya hay otro servidor en el puerto 80 (el que dejaste en otra terminal) | Ciérralo con `Ctrl+C` en su terminal | ## Cómo sabes que has terminado - [ ] Ves `Directory listing for /` con `hola.txt` desde el navegador, con `http://` y tu IP pública. - [ ] Sabes explicar por qué sin la regla del puerto 80 la página no carga aunque el servidor esté en marcha (el Security Group es el cortafuegos de la máquina). - [ ] **No borres la máquina todavía:** falta pararla y cambiarle el tamaño. Anterior: [`01.01-CrearYConectarVM.md`](01.01-CrearYConectarVM.md) · Siguiente: [`01.03-PararRedimensionarBorrar.md`](01.03-PararRedimensionarBorrar.md)