Κατηγορίες
tech

Διαδικτυακή εφαρμογή στο fly.io με χρήση PostgreSQL

Αν έχουμε ήδη μια εφαρμογή node.js η οποία χρησιμοποιεί την PostgreSQL, τότε μία από τις επιλογές για διάθεση της στο διαδίκτυο είναι να χρησιμοποιήσουμε τις δωρεάν υπηρεσίες του fly.io.

Οι παρακάτω οδηγίες αφορούν την διαδικασία που χρειάζεται μια τοπικά ολοκληρωμένη εφαρμογή, ώστε γίνει διαθέσιμη διαδικτυακά.

Εφαρμογή myBooks
Η εφαρμογή myBooks, στο τέλος της 3ης εβδομάδας των μαθημάτων nodejs.

Η παρακάτω διαδικασία δημιουργήθηκε τον Οκτώβριο του 2022 κατά την παρακολούθηση των μαθημάτων «Aνάπτυξη διαδικτυακών εφαρμογών με node.js» μέσω της πλατφόρμας Mathesis από τις Πανεπιστημιακές Εκδόσεις Κρήτης, με διδάσκοντες τους Χρήστο Σιντόρη και Νίκο Αβούρη, Ε.ΔΙ.Π. και καθηγητή αντίστοιχα στο Πανεπιστήμιο Πατρών.

Εγκατάσταση του flyctl (εργαλείο CLI) στο Debian

Για άλλα λειτουργικά συστήματα ακολουθήστε τις αντίστοιχες οδηγίες από τον ιστότοπο του fly.io

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

flyctl was installed successfully to /home/vangelis/.fly/bin/flyctl
Manually add the directory to your $HOME/.bash_profile (or similar)
export FLYCTL_INSTALL="/home/vangelis/.fly"
export PATH="$FLYCTL_INSTALL/bin:$PATH"
Run '/home/vangelis/.fly/bin/flyctl --help' to get started

Βάζουμε στο τέλος του αρχείου ~/.profile τα παρακάτω:

# set PATH so it include bin for fly.io
if [ -d "$HOME/.fly" ] ; then
  export FLYCTL_INSTALL="/home/vangelis/.fly"
  export PATH="$FLYCTL_INSTALL/bin:$PATH"
fi

Δημιουργία λογαριασμού στο fly.io

$ fly auth signup

Σύνδεση σε λογαριασμό στο fly.io

$ fly auth login

Δημιουργία βάσης δεδομένων, DATABASE_URL, και άλλες ρυθμίσεις

$ fly launch

$ fly launch
? Choose an app name (leave blank to generate one): mathesis-nodejs-w3
? Choose a region for deployment: Frankfurt, Germany (fra)
? Would you like to set up a Postgresql database now? (y/N) y
? Select configuration: Development - Single node, 1x shared CPU, 256MB RAM, 1GB disk

και συνεχίζει με εμφάνιση πρόσθετων πληροφοριών όπως οι παρακάτω

Creating postgres cluster in organization personal
Creating app…
Setting secrets on app mathesis-nodejs-w3-db…Provisioning 1 of 1 machines with image flyio/postgres:14.4
Waiting for machine to start…
Machine aa1234abcd1234 is created
==> Monitoring health checks
Waiting for aa1234abcd1234 to become healthy (started, 3/3)

Postgres cluster mathesis-nodejs-w3-db created
Username: postgres
Password: xxxxxxxxxxxx (εδώ εμφανίζεται το password)
Hostname: mathesis-nodejs-w3-db.internal
Proxy port: 5432
Postgres port: 5433
Save your credentials in a secure place -- you won't be able to see them again!

Connect to postgres
Any app within the Vangelis Skarmoutsos organization can connect to this Postgres using the following credentials:
For example: postgres://postgres:xxxxxxxxxxxx@mathesis-nodejs-w3-db.internal:5432

Now that you've set up postgres, here's what you need to understand: https://fly.io/docs/reference/postgres-whats-next/

Postgres cluster mathesis-nodejs-w3-db is now attached to mathesis-nodejs-w3
The following secret was added to mathesis-nodejs-w3:
DATABASE_URL=postgres://mathesis_nodejs_w3:yyyyyyyyyyyy@top2.nearest.of.mathesis-nodejs-w3-db.internal:5432/mathesis_nodejs_w3
Postgres cluster mathesis-nodejs-w3-db is now attached to mathesis-nodejs-w3

Your Node app is prepared for deployment. Be sure to set your listen port
to 8080 using code similar to the following:

const port = process.env.PORT || "8080";

If you need custom packages installed, or have problems with your deployment
build, you may need to edit the Dockerfile for app-specific changes. If you
need help, please post on https://community.fly.io.

Now: run 'fly deploy' to deploy your Node app.

Δημιουργία μεταβλητής SESSION_SECRET

$ flyctl secrets list
$ flyctl secrets set SESSION_SECRET='mysecret'

Διάθεση εφαρμογής μέσω fly.io

Στο fly.io, λόγω ιδιωτικού δικτύου, δεν χρειάζεται SSL στην επικοινωνία μεταξύ της εφαρμογής και της βάσης δεδομένων , οπότε δεν χρησιμοποιούμε ρυθμίσεις SSL κατά την αρχικοποίηση της Sequelize.

$ fly deploy

Προβολή dashboard personal

Ανοίγουμε τον περιηγητή στο https://fly.io/dashboard/personal

Προβολή dashboard εφαρμογής

$ flyctl dashboard

Ανοίγει τον περιηγητή π.χ. στο https://fly.io/apps/mathesis-nodejs-w3

Προβολή πληροφοριών εφαρμογής (διευθύνσεις IP, θύρες κ.α)

$ flyctl info

Έλεγχος κατάστασης υλοποίησης (deployment)

$ flyctl status

Άνοιγμα στον περιηγητή

Ανοίγει ο browser π.χ. στην διεύθυνση https://mathesis-nodejs-w3.fly.dev/

$ flyctl open

Προβολή δεδομένων με psql

Σύνδεση με τον server PostgreSQL της βάσης δεδομένων και προβολή δεδομένων με psql

$ flyctl postgres connect -a mathesis-nodejs-w3-db
Connecting to fdaa:0:c91c:a7b:c07e:e30b:f503:2… complete
psql (14.4 (Debian 14.4-1.pgdg110+1))
Type "help" for help.
Postgres=#

help Για λήψη βοήθειας
\l Προβολή λίστας με τις διαθέσιμες βάσεις δεδομένων
\conninfo Προβολή της βάσης δεδομένων στην οποία είμαστε συνδεδεμένοι
\c mathesis_nodejs_w3 Σύνδεση στην βάση δεδομένων mathesis_nodejs_w3
\dt ή \dt+ Προβολή λίστας με τους διαθέσιμους πίνακες
(ή με SELECT * FROM pg_catalog.pg_tables WHERE schemaname = ‘public’;)
SELECT * FROM “Users”; Προβολή περιεχομένων του πίνακα Users
\d “Books” Προβολή χαρακτηριστικών του πίνακα Books (πεδία, κλειδιά κ.α.)
\q Έξοδος από την psql

Προετοιμασία για προβολή δεδομένων με pgAdmin

Σύνδεση με τον server PostgreSQL της βάσης δεδομένων και προβολή δεδομένων μέσω proxy με το pgAdmin

$ flyctl proxy 5432 -a mathesis-nodejs-w3-db

Προώθηση της πόρτας server στο τοπικό σύστημα.
Αν η πόρτα 5432 ήδη χρησιμοποιείται στο τοπικό σύστημα

$ flyctl proxy 15432:5432 -a mathesis-nodejs-w3-db

όπου τώρα η τοπική πόρτα θα είναι 15432.
Αφήνοντας την παραπάνω εντολή να λειτουργεί, ανοίγουμε άλλο τερματικό και συνδεόμαστε τοπικά με psql για να ελέγξουμε ότι ο proxy λειτουργεί σωστά.

$ psql postgres://postgres:<password>@localhost:15432
$ psql postgres://postgres:xxxxxxxxxxxxxx@localhost:15432
Postgres=#
\c mathesis_nodejs_w3
SELECT * FROM "Users";
\q

Ρύθμιση pgAdmin

  1. Server-Register-Server…
  2. Στο Name γράφουμε ένα όνομα που να μας βολεύει π.χ. mathesis-nodejs-w3-flyio
  3. Στην καρτέλα Connection καταχωρούμε:
    Hostname: localhost
    Port 15432
    Maintenance database: postgres
    Username: postgres
    Password: xxxxxxxxxxxx (το password που μας έδωσε το flyio για την postgres)
  4. Πατάμε Save

Προβολή δεδομένων πίνακα στο pgAdmin

  • Επιλέγουμε στο νέο server: mathesis-nodejs-w3-flyio
  • Databases – mathesis_nodejs_w3 – Schemas, – public – Tables
  • Δεξί κλικ στον πίνακα Books, και View/Edit Data
  • Όταν κλείσουμε το pgAdmin, επιστρέφουμε στο παράθυρο που εκτελείται ο proxy και τον τερματίζουμε με Ctrl+C.

Αν αυτό το άρθρο σας φάνηκε ενδιαφέρον, ίσως θα θέλατε να δείτε περισσότερα άρθρα τεχνολογίας.