Desplegando APP con Deno en fly.io 🚀

Desplegaré una aplicación hecha con Deno en un contenedor Docker en fly.io

18.09.2022 a las 21:25

Desplegando APP con Deno en fly.io 🚀

⚫ El tier gratuito de Heroku se acaba

⚫ Desplegar aplicación de Deno en fly.io

🟣 Clonar proyecto de ejemplo desde GitHub

🟣 Instalar el CLI de fly.io

🟣 Haz el login

🟣 Preparando el despliegue

🟣 Ahora sí, despliega 🚀

🟣 Comprobando el despliegue

Desplegando APP con Deno en fly.io 🚀

Desplegaré una aplicación hecha con Deno en un contenedor Docker en fly.io


El tier gratuito de Heroku se acaba

Como ya os dije la semana pasada, el próximo 28 de noviembre finaliza el tier gratuito de Heroku, además, esta semana me he encontrado con un email de Heroku diciendo que había agotado el 80% de mis 1000 horas gratuitas mensuales, que cuando las agotara si quiería tener mis aplicaciones activas tenía que subir al siguiente plan que es el Hobby Dynos.


Como lo que estoy haciendo son pruebas, no quería gastar dinero hasta tener claro la arquitectura que usaré, así que he buscado una alternativa para correr aplicaciones de Deno en la nube.


Te dejo un artículo donde te cuento diferentes recursos para subir tus aplicaciones y webs 👇

Hosting gratuito para tus pruebas

En este artículo te diré los hosting gratuitos que he usado para mis despliegues de prueba

Ahora mismo el que me está funcionando para Deno además de Heroku es fly.io


Con fly.io tienes 2340 horas mensuales (en Heroku eran 1000 horas), 3GB para persistencia de datos, 256MB de RAM y 160 GB de ancho de banda mensuales.

De sobra para pruebas.


Lo único que no me gusta es que no se puede integrar con GitHub, pero no se puede tener todo 🥴


Por otro lado, la aplicación no "duerme" después de 30 minutos de inactividad como sí pasa en Heroku, aunque eso era fácilmente evitable con el truquillo que te contaba en este artículo.

Desplegar aplicación de Deno en fly.io

Después de estar varias horas intentando desplegar un proyecto desde cero, lo que me ha funcionado es:

Clonar proyecto de ejemplo desde GitHub

Fly.io tiene un repositorio de ejemplo en GitHub muy fácil, lo puedes encontrar en https://github.com/fly-apps/hellodeno

git clone https://github.com/fly-apps/hellodeno

El proyecto lo que hace es levantar un servidor web y saludarte

  import {
    app,
    get,
    post,
    redirect,
    contentType,
  } from "https://denopkg.com/syumai/dinatra/mod.ts";
  
  const greeting = "<h1>Hello From Deno on Fly!</h1>";
  
  app(
    get("/", () => greeting),
    get("/:id", ({ params }) => greeting + `</br>and hello to ${params.id}`),
  );
  

Una vez clonado el repositorio prueba que funciona en local

deno run --allow-net main.ts

Lo que verás por consola será 👇

listening on http://0.0.0.0:8080/

Si en tu explorador web vas a http://127.0.0.1:8080 verás el mensaje de Hello From Deno on Fly!

Instalar el CLI de fly.io

Te recomiendo que antes de instalar el CLI de fly.io te crees un usuario


En una powershell de Windows escribe:

iwr https://fly.io/install.ps1 -useb | iex

Si usas Linux 🐧 o Mac

curl -L https://fly.io/install.sh | sh

Haz login

Para este paso necesitarás tener tu usuario creado en fly.io

flyctl auth login

Preparando antes de desplegar

Fly.io necesita de un fichero de configuración fly.toml con las características que queremos que tenga nuestra aplicación al desplegar


Ejecuta el comando

flyctl launch

Este comando te creará un fly.toml estándar y también un Dockerfile que necesitará para el despligue del contenedor de Docker 🐳


El fichero fly.toml generado por defecto sólo tiene los permisos para acceder a la red, ya que el proyecto de ejemplo es un servidor web.

Si quieres añadir más permisos se hace en la sección de [processes]


Para añadir variables de entorno se hace en la sección de [env]

👉 Recuerda importar la librería https://deno.land/x/dotenv@v3.2.0/load.ts para poder leer el fichero de variables de entorno


A continuación te dejo un fichero fly.toml que accede a la red, lee y escribe ficheros en disco y accede a las variables de entorno.

Además encontrarás las variables de entorno PORT, USERDATABASE y PASSWORDDATABASE

# fly.toml file generated for xxxx

          app = "xxxxxx"
          kill_signal = "SIGINT"
          kill_timeout = 5
          
          [processes]
            app = "run --allow-net --allow-write --allow-read --allow-env ./main.ts"

          [env]
            PORT = "8080"
            USERDATABASE = "USERDATABASE"
            PASSWORDDATABASE = "eyJpdiI6Imluc09NazU4U"
          
          [experimental]
            allowed_public_ports = []
            auto_rollback = true
          
          [[services]]
            http_checks = []
            internal_port = 8080
            processes = ["app"]
            protocol = "tcp"
            script_checks = []
            [services.concurrency]
              hard_limit = 25
              soft_limit = 20
              type = "connections"
          
            [[services.ports]]
              force_https = true
              handlers = ["http"]
              port = 80
          
            [[services.ports]]
              handlers = ["tls", "http"]
              port = 443
          
            [[services.tcp_checks]]
              grace_period = "1s"
              interval = "15s"
              restart_limit = 0
              timeout = "2s"
          

Ahora sí, despliega 🚀

flyctl deploy

Comprobando el despliegue

Si todo ha ido bien, ejecutando

flyctl info

Verás la información de tu aplicación

App
          Name     = xxxxxx
          Owner    = fjmduran
          Version  = 0
          Status   = running
          Hostname = xxxxxx.fly.dev
        
        Allocations
        ID       VERSION REGION DESIRED STATUS  HEALTH CHECKS      RESTARTS CREATED
        73f825ad 0       mad    run     running 1 total, 1 passing 0        6m34s ago

Listo, si tienes cualquier duda ✍


Hasta luego 🖖

Servicios

Software

IoT

Digitalización

Aplicaciones móviles

Consultoría

fjmduran.com v0.1.2