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
- https://fly.io/docs/reference/postgres-on-nomad/#about-fly-postgres
- https://fly.io/docs/reference/postgres-on-nomad/#connecting-with-node-js-docs
Secrets
flyctl secrets list
flyctl secrets set DATABASE_URL=postgres://postgres:thuJ5B5cAB7zZWM@divine-sun-3134.internal:5432
Logs
flyctl logs