Αν έχουμε ήδη μια εφαρμογή node.js η οποία χρησιμοποιεί την PostgreSQL, τότε μία από τις επιλογές για διάθεση της στο διαδίκτυο είναι να χρησιμοποιήσουμε τις δωρεάν υπηρεσίες του fly.io.
Οι παρακάτω οδηγίες αφορούν την διαδικασία που χρειάζεται μια τοπικά ολοκληρωμένη εφαρμογή, ώστε γίνει διαθέσιμη διαδικτυακά.
Η παρακάτω διαδικασία δημιουργήθηκε τον Οκτώβριο του 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
- Server-Register-Server…
- Στο Name γράφουμε ένα όνομα που να μας βολεύει π.χ. mathesis-nodejs-w3-flyio
- Στην καρτέλα Connection καταχωρούμε:
Hostname: localhost
Port 15432
Maintenance database: postgres
Username: postgres
Password: xxxxxxxxxxxx (το password που μας έδωσε το flyio για την postgres) - Πατάμε Save
Προβολή δεδομένων πίνακα στο pgAdmin
- Επιλέγουμε στο νέο server: mathesis-nodejs-w3-flyio
- Databases – mathesis_nodejs_w3 – Schemas, – public – Tables
- Δεξί κλικ στον πίνακα Books, και View/Edit Data
- Όταν κλείσουμε το pgAdmin, επιστρέφουμε στο παράθυρο που εκτελείται ο proxy και τον τερματίζουμε με Ctrl+C.