Pide tu presupuesto ya!
17th November 2023
A medida que el desarrollo web continúa avanzando rápidamente, contar con una plataforma de alojamiento confiable y flexible es clave para cualquier aplicación web exitosa. Con servicios en la nube como Amazon AWSGoogle PCG o Microsoft Azurpuede activar rápidamente servidores virtuales para alojar sus aplicaciones y acceder a ellas desde cualquier lugar.
Un servicio increíblemente útil para probar y compartir aplicaciones web alojadas en servidores remotos es Ngrok. Ngrok crea un túnel seguro desde la Internet pública hasta su máquina o servidor local. Esto le permite exponer a Internet un servidor web que se ejecuta en su máquina local o en un servidor remoto.
En este artículo, recorrerá los pasos para alojar una aplicación web básica en una instancia remota de AWS EC2 y hacerla accesible a través de Internet con Ngrok y SSH.
Antes de alojar su aplicación web remota ngrok en AWS, asegúrese de tener lo siguiente implementado:
Antes de lanzarse a alojar una aplicación web en AWS, primero debe tener una. Creará un punto final FastAPI, lo implementará en una máquina virtual (VM) de AWS y expondrá el punto final a Internet mediante ngrok.
Para crear e implementar una aplicación web remota ngrok, siga estos pasos:
1. Crea un aplicación.py archivo con su editor preferido y complete el siguiente código.
Este código aplica el marco FastAPI para crear una aplicación web que devuelve la fecha y hora actuales.
from fastapi import FastAPI
from datetime import datetime
app = FastAPI()
@app.get("/")
def root():
return {"time": datetime.now()}
2. A continuación, cree otro archivo llamado requisitos.txt que enumera los paquetes de Python necesarios de la siguiente manera, lo que ayuda a garantizar la coherencia entre los entornos de desarrollo y producción.
Teniendo un archivo requisitos.txt es una práctica recomendada que ayuda a automatizar la instalación de dependencias en lugar de hacerlo manualmente pip comandos.
3. Abra una terminal y ejecute el siguiente comando de forma silenciosa (sin salida) zip Los archivos (app.py y requirements.txt) dentro de FastApi.zip archivo.
Tenga en cuenta que si los archivos a comprimir no se encuentran en el directorio de trabajo, debe especificar sus rutas completas.
zip FastApi.zip app.py requirements.txt
4. Una vez comprimido, ejecute lo siguiente scp comando para copiar el archivo ZIP (*FastApi.zip*) a su instancia AWS EC2, donde puede implementar y ejecutar su aplicación web remota ngrok.
Asegúrese de reemplazar los siguientes marcadores de posición antes de ejecutar el comando:
<your-key.pem> – El archivo de clave asociado con el par de claves SSH (es decir, *myKey.pm*) utilizado para conectarse a su instancia AWS EC2.EC2-user – El nombre de usuario de su instancia EC2 (es decir, ubuntu).EC2-IP – La dirección IP pública (o nombre de host) de su instancia EC2.<remote-dir> – La ruta de destino en su instancia AWS EC2 (es decir, */home/ubuntu*) para copiar el archivo ZIP.scp -i <your-key.pem> FastApi.zip EC2-user@EC2-IP:<remote-dir>
5. Después de copiar, ejecute cada comando a SSH en su instancia AWS EC2 e inicie el Uvicornio Interfaz de puerta de enlace de servidor asíncrono (ASGI) servidor.
Al igual que en el paso cuatro, reemplace los marcadores de posición a continuación en consecuencia.
# SSH into the AWS EC2 instance
ssh -i <your-key.pem> EC2-user@EC2-IP
# Change the directory to where you copied the FastApi.zip file (i.e., /home/ubuntu)
cd <remote-dir>
# Start the Uvicorn ASGI server.
uvicorn app:app --host 0.0.0.0 --port 8000


💡 De forma predeterminada, Uvicorn no se inicia como un servicio, deberás ejecutar un administrador de procesos si desea ejecutar Uvicorn como servicio.
6. A continuación, ejecute los siguientes comandos para unzip el FastApi.zip archivo y install los paquetes necesarios enumerados en el requirements.txt archivo.
# Extract the files in the FastApi.zip file
unzip FastApi.zip
# Change the working directory to FastApi
cd FastApi
# Install the necessary packages listed in the requirements.txt file via pip
pip install -r requirements.txt

7. Luego, invoca lo siguiente uvicorn comando para ejecutar el código en el aplicación.py archivo y al mismo tiempo permite la recarga automática del servidor Uvicorn ASGI.
Copie la URL resaltada, como se muestra a continuación, ya que la usará para acceder a FastAPI en el siguiente paso.

8. Abra su navegador web preferido en su máquina local y visite la URL que copió en el paso siete para acceder al punto final FastAPI.
Verá la interfaz que se muestra a continuación (127.0.01 se negó a conectarse), ya que está accediendo al servidor Uvicorn en su máquina local, no en su instancia AWS EC2. ¡Pero no te preocupes! Vaya a la siguiente sección para corregir este error de conexión.

El acceso a la API directamente en la instancia EC2 falla sin la configuración de red y seguridad adecuada. La instancia EC2 solo tiene una dirección IP privada de forma predeterminada, lo que hace que no se pueda acceder a ella desde la Internet pública.
¡Pero no te preocupes! En tales casos, ngrok puede mostrar y probar sin problemas su servidor Uvicorn a través de Internet.
Para exponer su FastAPI a través de Internet, proceda con lo siguiente:
1. Ejecute cada comando a continuación para descargar (curl) y agregue la clave GPG de ngrok al conjunto de claves confiable y agregue la información del repositorio de ngrok a la lista de fuentes del sistema.
Este proceso le permite instalar y actualizar ngrok a través del administrador de paquetes del sistema (es decir, apt en sistemas basados en Debian).
# Download the ngrok GPG public key
curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc > /dev/null
# Echoes the ngrok repo information to the terminal
echo "deb https://ngrok-agent.s3.amazonaws.com buster main" | sudo tee /etc/apt/sources.list.d/ngrok.list
# Update the system's package lists and install ngrok
sudo apt update && sudo apt install ngrok

Pero ¿por qué elegir ngrok? ngrok proporciona un túnel cifrado y reenvío de puertos automatizado para evitar estos problemas.
Podrías asignar una IP pública, pero eso plantea riesgos de seguridad al exponer el servidor. El grupo de seguridad predeterminado solo permite conexiones SSH, bloqueando el tráfico de su API HTTP.
Abrir el firewall al acceso HTTP también es inseguro. Incluso si se permitiera HTTP, tendría que manejar una compleja asignación de puertos entre los puertos internos y externos.
2. A continuación, ejecute el siguiente comando para autenticarse (authtoken) ngrok con su cuenta. Asegúrese de reemplazar AUTH_TOKEN con tu real token de autenticación.
ngrok authtoken AUTH_TOKEN

3. Una vez autenticado, ejecute lo siguiente ngrok comando para ver ngrok status y verifique que la autenticación sea exitosa.
Si todo va bien, verá la información de su cuenta en el resultado, lo que indica que ngrok está listo para usar.

Ya sea que esté utilizando ngrok o cualquier otro servicio que requiera acceso ininterrumpido a una máquina remota, iniciar ese servicio dentro de una pantalla dedicada es una buena práctica. Al hacerlo, su proceso se mantiene funcionando sin problemas incluso con una conectividad local interrumpida.
Pero antes de iniciar el túnel ngrok, primero creará dos sesiones de pantalla para persistir el proceso en segundo plano. Ejecutar ngrok y uvicorn en sus propias pantallas brinda más flexibilidad.
Para exponer su punto final FastAPI con ngrok, complete los pasos a continuación:
1. Ejecute el siguiente comando, que no tiene salida directa, pero inicia una nueva screen sesión nombrada uvicorn para ejecutar la aplicación FastAPI.
2. A continuación, invoque lo siguiente uvicorn comando para ejecutar la aplicación FastAPI una vez que esté en la sesión.
uvicorn app:app --host 0.0.0.0 --port 8000

3. Ahora, presione Ctrl+A y luego D para desconectarse de la sesión y el servidor seguirá ejecutándose.
En este punto, ya tiene una pantalla uvicorn separada ejecutando el servidor FastAPI.

4. En consecuencia, ejecute el siguiente comando, que no genera resultados, pero crea un nuevo screen llamado ngrok.
5. Una vez creado, ejecute lo siguiente ngrok comando dentro de la sesión de pantalla de ngrok para crear un túnel público seguro hacia su aplicación web que se ejecuta en el puerto 8000.
Si tiene éxito, una pantalla llamada ngrok comienza a ejecutarse en su túnel y ngrok genera una URL pública que apunta a su punto final FastAPI.
Copie la URL de reenvío, ya que la necesitará para probar la accesibilidad pública de su punto final en el siguiente paso.

6. Navegue hasta la URL que anotó en el paso cinco en una nueva pestaña del navegador.
Verá una página similar a la siguiente y ngrok ahora se ejecutará dentro de esta pantalla.

7. Vuelva a su terminal y desconéctese de la sesión (Ctrl+A y luego D), y el túnel seguirá funcionando.
8. Finalmente, ejecute el siguiente comando para volver a conectarse a una sesión de pantalla de su elección, como uvicorn.
Volver a conectarse a una sesión de pantalla le permite monitorear los registros y el tráfico, así que asegúrese de reemplazar screen_name con el nombre de la sesión de pantalla real.
Al usar screen, se asegura de que ngrok y uvicorn permanezcan activos incluso después de cerrar el terminal, proporcionando acceso persistente a su punto final FastAPI.

¡Felicidades! Creó con éxito un punto final FastAPI básico, lo implementó en una máquina virtual de AWS y lo expuso a Internet mediante Ngrok. Esto establece una base sólida para desarrollar e implementar rápidamente servidores web. Para aquellos que buscan optimizar los flujos de trabajo de desarrollo, considere sumergirse en la integración e implementación continuas (CI/CD). Configure canalizaciones utilizando herramientas como Jenkins o AWS CodePipeline para automatizar los procesos de prueba e implementación.
Puede lograr esto enviando código en GitHub y configurando los flujos de trabajo de GitHub Actions para que se ejecuten en cada envío. Los flujos de trabajo primero validarían el código mediante linting y pruebas antes de implementarlo en AWS. Ngrok ejecutándose en el servidor expondría la última revisión.
Leave a comment