En este tutorial vamos a crear una aplicación web en Nodejs y la subiremos a un servicio que ofrece planes gratuitos llamado Fly.io

Pasos principales del Tutorial

  • Crearemos una aplicacion de nodejs
  • Instalaremos el cli de Fly.io
  • Nos Autenticaremos en Fly.io
  • Subiremos nuestra aplicacion de Nodejs
  • Crearemos una base de datos de Postgres
  • Conectaremos nuestra aplicación a POstgreSQL

Crear aplicacion de Nodejs

const express = require('express');

const app = express();
const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => {
    res.send('Hello World!');
});

app.listen(PORT)
console.log(`Running on http://localhost:${PORT}`);

Luego es necesario crear el script start, asi que editaremos el archivo package.json:

  "scripts": {
    "start": "node src/index.js"
  },

Entre las configuraciones importantes que hemos realizado podriamos resaltar:

  • El uso de una variable de entorno para leer el puerto o PORT
  • crear el script start para poder ejecutar en producciön el comando npm start

Instalar CLI de Fly.io

Linux:

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

Luego de esto es necesario añadir las siguientes variables de entorno al sistema:

export FLYCTL_INSTALL="/home/fazt/.fly"
export PATH="$FLYCTL_INSTALL/bin:$PATH"

luego puedes ejecutar por ejemplo:

source ~/.bashrc
source ~/.zshrc

Luego puedes ejecutar

flyctl
flyctl version

Autenticación en fly.io

una vez instalado lo siguiente es crearte una cuenta o hacer login. Esto se puede hacer desde consola.

Para crearse una cuenta:

flyctl auth signup

esto abrirá una pagina de tu navegador, personalmente te recomiendo que escojas Github. Adicionalmente tambien puedes revisar tu correo para verificar tu cuenta, esto te llevara a tu panel de control en https://fly.io/dashboard

Configurar para despliegue

flyctl launch

Este comando te mostrará alguna preguntas en la terminal, como:

  • dockerignore: no
  • nombre: el que quieras (expressfazt)
  • region: la region mas cercana a tus usuarios
  • postgresql: no
  • deploy now: yes

Actualizar aplicacion

por ejemplo añade esta ruta:

app.get('/ping', (req, res) => {
    res.send('pong!');
});

y lugo ejecuta:

flyctl deploy

Estado

flyctl info 
flyctl status

Abrir aplicacion

flyctl open

Base de datos

Ahora aprenderemos a crear una base de datos y añadirla a nuestra aplicación de Nodejs.

Para crear una base de datos en Fly.io podemos ejecutar:

flyctl postgres create
  • nombre de la app de base de datos: faztpostgres
  • region: La de tu preferencia
  • Configuration: development

Una vez generado la base de datos, te dará una dirección creadenciales y una dirección como esta:

Postgres cluster faztpostgres created
  Username:    postgres
  Password:    Je0FgoLpXI6TlWN
  Hostname:    faztpostgres.internal
  Proxy port:  5432
  Postgres port:  5433

postgres://postgres:Je0FgoLpYX6TlWN@faztpostgres.internal:5432

Guardala, porque ya no podras volver a obtenerla.

Luego vamos a instalar el modulo de conexión de postgres para Nodejs, en nuestro caso usaremos pg:

Conectar a postgres a nuestra aplicación

npm i pg
...
const { Client } = require("pg");
const client = new Client({ connectionString: process.env.DATABASE_URL });

const app = express();
const PORT = process.env.PORT || 3000;

...

app.get("/ping", async (req, res) => {
    await client.connect();
    const result = await client.query("SELECT $1::text as message", [
        "Hello world!",
    ]);
    console.log(result.rows[0].message); // Hello world!
    await client.end();
    res.json(result.rows[0]);
});

app.listen(PORT);
console.log(`Running on http://localhost:${PORT}`);

Lo siguiente es enlazar tu aplicacion con la base de datos creada.

flyctl postgres attach --app expressfazt faztpostgres

Secrets

flyctl secrets list

flyctl secrets set DATABASE_URL=postgres://postgres:thuJ5B5cAB7zZWM@divine-sun-3134.internal:5432

Logs

flyctl logs

Más recursos