Επιστροφή στο blog

Ανάπτυξη μιας διαδικτυακής εφαρμογής Go με χρήση Nginx σε Ubuntu 22.04

Ανάπτυξη μιας διαδικτυακής εφαρμογής Go με χρήση Nginx σε Ubuntu 22.04

Go είναι μια γλώσσα προγραμματισμού γενικής χρήσης ανοιχτού κώδικα. Εμπνεύστηκε από την παραγωγικότητα της Python ενώ παράλληλα προσφέρει τις δυνατότητες της C. Αναπτύχθηκε αρχικά από την Google για την αντιμετώπιση προβλημάτων που αντιμετώπιζαν με τη βάση κώδικά τους (πολυπλοκότητα κώδικα και μεγάλος χρόνος μεταγλώττισης). Όπως κάθε άλλη σύγχρονη γλώσσα προγραμματισμού, η Go είναι κατάλληλη για κάθε είδους σκοπούς. Για παράδειγμα, θα μπορούσε να χρησιμοποιηθεί για ανάπτυξη ιστού, scripting γραμμής εντολών, εφαρμογές διακομιστή δικτύου, front-end ανάπτυξη κ.λπ.

Σε αυτόν τον οδηγό, θα σας καθοδηγήσουμε στα βήματα για την ανάπτυξη μιας απλής διαδικτυακής εφαρμογής Go στο Ubuntu 22.04 LTS. Θα υλοποιήσουμε επίσης έναν reverse proxy Nginx για τη διαχείριση του φόρτου κίνησης.

Προαπαιτούμενα

Για να εκτελέσετε τα βήματα που παρουσιάζονται σε αυτόν τον οδηγό, θα χρειαστείτε τα ακόλουθα στοιχεία προ-ρυθμισμένα:

Εάν η υπηρεσία πρόκειται να είναι προσβάσιμη μέσω ενός ονόματος τομέα, τότε πρέπει να έχετε ένα FQDN που να δείχνει στον διακομιστή. Σε αυτήν την περίπτωση, συνιστάται η ασφάλιση του Nginx με SSL. Μπορείτε να μάθετε περισσότερα σχετικά με την ασφάλιση του Nginx με το Let’s Encrypt στο Ubuntu από το σεμινάριό μας.

Βήμα 1 – Δημιουργία μιας διαδικτυακής εφαρμογής Go

Θα κατασκευάσουμε μια απλή διαδικτυακή εφαρμογή Go που θα εκτυπώνει “Hello World” στην οθόνη κατά την πρόσβαση στον τομέα. Επιπλέον, η εφαρμογή θα χαιρετά τον χρήστη κατά την πρόσβαση στο <domain>/greet/<username>.

Ξεκινήστε δημιουργώντας ένα νέο έργο κάτω από το $GOPATH. Δημιουργήστε τον κατάλογο του έργου:

Go Web Application Make Dir

Αλλάξτε τον τρέχοντα κατάλογο:

Go Web Application Change Dir

Στη συνέχεια, ξεκινήστε ένα έργο:

Go Web Application Init Project

Στη συνέχεια, δημιουργήστε το main.go που θα χρησιμεύσει ως η ρίζα της εφαρμογής μας Go. Θα φιλοξενήσει τον πηγαίο κώδικα για τη διαδικτυακή μας εφαρμογή:

Ανοίξτε το έργο στο VS Code:

Επικολλήστε τον ακόλουθο κώδικα στο αρχείο main.go:

Go Web Application Main Go

Ας κάνουμε μια γρήγορη ανάλυση του προγράμματος Go που μόλις δημιουργήσαμε:

  • Ο όρος package main χρησιμεύει ως το σημείο εισόδου στην εφαρμογή μας. Δίνει επίσης εντολή στον μεταγλωττιστή της Go να μεταγλωττίσει το αρχείο ως εκτελέσιμο αντί για κοινόχρηστη βιβλιοθήκη.
  • Η δήλωση import εισάγει όλα τα πρόσθετα modules που απαιτούνται για τη λειτουργία του προγράμματος. Εδώ, έχουμε εισαγάγει τα πακέτα fmt (για την εκτύπωση κειμένων) και net/http (για εφαρμογές διακομιστή ιστού).
  • Χρησιμοποιώντας τη συνάρτηση http.HandleFunc, δημιουργήσαμε δύο διαδρομές:
    • Η πρώτη διαδρομή / χρησιμεύει ως η γονική διαδρομή εντός της func main.
    • Η δεύτερη διαδρομή /greet/ δέχεται μια παράμετρο URL (μια συμβολοσειρά, σε αυτήν την περίπτωση). Στη συνέχεια, η συμβολοσειρά εμφανίζεται συνοδευόμενη από το μήνυμα χαιρετισμού.
      • URL Διαδρομή χρησιμοποιείται για την αποθήκευση της τιμής μετά από /greet/. Η τιμή στη συνέχεια μεταβιβάζεται ως το name της παραμέτρου URL.
    • Η http.ListenAndServe συνάρτηση εκκινεί τον διακομιστή ιστού. Εδώ, ακούει στη θύρα 9990.

Τώρα που το πρόγραμμά μας είναι έτοιμο, μεταγλωττίστε το αρχείο σε εκτελέσιμο:

Ο μεταγλωττιστής της Go θα δημιουργήσει ένα εκτελέσιμο με το ίδιο όνομα με το αρχείο. Δείτε το αποτέλεσμα:

Go Web Application ls -lh

Βήμα 2 – Ρύθμιση παραμέτρων ενός αρχείου μονάδας systemd για εκτέλεση στο παρασκήνιο

Μέχρι τώρα, εάν ο τρέχων χρήστης αποσυνδεθεί από το σύστημα, η εφαρμογή ιστού Go θα σταματήσει να εκτελείται. Αυτό είναι κακός σχεδιασμός για έναν διακομιστή ιστού. Για να λύσουμε αυτό το πρόβλημα, θα δημιουργήσουμε ένα αρχείο μονάδας systemd για να τη διατηρήσουμε να εκτελείται στο παρασκήνιο, ακόμη και όταν ο χρήστης αποσυνδέεται από τον διακομιστή. Αυτό φέρνει τη ρύθμιση ένα βήμα πιο κοντά σε μια ανάπτυξη επιπέδου παραγωγής.

Δημιουργήστε ένα αποκλειστικό systemd αρχείο goweb.service κάτω από το /lib/systemd/system:

Προσθέστε το ακόλουθο απόσπασμα στο αρχείο μονάδας:

go web service

Εδώ,

  • Η μεταβλητή ExecStart υποδεικνύει το σημείο εισόδου για την υπηρεσία μέσω του κύριου εκτελέσιμου αρχείου που βρίσκεται στον κατάλογο του έργου μας ( $GOPATH/go-web). Σημειώστε ότι αντί να αναφέρουμε το $GOPATH, πληκτρολογήσαμε την πλήρη διαδρομή προς το εκτελέσιμο αρχείο. Αυτό συμβαίνει επειδή η μεταβλητή $GOPATH είναι ορατή μόνο στον χρήστη.
  • Η μεταβλητή Restart λέει στο systemd τι να κάνει σε περίπτωση που το πρόγραμμά σταματήσει να εκτελείται. Η τιμή always λέει στο systemd να επανεκκινεί το πρόγραμμα κάθε φορά που σταματά να εκτελείται.
  • Η μεταβλητή RestartSec λέει στο systemd να περιμένει ένα συγκεκριμένο χρονικό διάστημα πριν προσπαθήσει να επανεκκινήσει το πρόγραμμα. Εδώ, η τιμή έχει οριστεί σε 5s (5 δευτερόλεπτα).
  • Η δήλωση WantedBy=multi-user.target καθορίζει σε ποια κατάσταση το systemd θα ενεργοποιήσει την υπηρεσία.

Αποθηκεύστε το αρχείο και κλείστε το πρόγραμμα επεξεργασίας. Εκκινήστε την υπηρεσία:

go web start

Επαληθεύστε εάν η υπηρεσία είναι σε λειτουργία:

go web status

Όπως υποδηλώνει το αποτέλεσμα, η εφαρμογή είναι σε λειτουργία. Είμαστε τώρα έτοιμοι να χρησιμοποιήσουμε το Nginx ως αντίστροφο διαμεσολαβητή (reverse proxy).

Βήμα 3 – Ρύθμιση παραμέτρων του Nginx ως αντίστροφου διαμεσολαβητή (Reverse Proxy)

Τώρα, θα δημιουργήσουμε ένα server block για το Nginx ώστε να λειτουργεί ως αντίστροφος διαμεσολαβητής. Η εφαρμογή ιστού θα εκτεθεί στο διαδίκτυο μέσω του αντίστροφου διαμεσολαβητή (για πρόσθετη απόδοση και ασφάλεια).

Αλλάξτε τον τρέχοντα ενεργό κατάλογο σε sites-available:

cd

Τώρα, δημιουργήστε ένα αρχείο με το όνομα τομέα (domain name) στο οποίο θέλετε να εκθέσετε την εφαρμογή σας. Για επίδειξη, θα χρησιμοποιήσουμε το example.com:

 

Εισαγάγετε τον ακόλουθο κώδικα στο αρχείο block:

example.com

Εδώ, χρησιμοποιούμε το proxy_pass για να εξυπηρετήσουμε την εφαρμογή ιστού Go στη διεύθυνση IP του διακομιστή (localhost) στη θύρα 9990.

Για να ενεργοποιήσετε το block του Nginx, δημιουργήστε έναν συμβολικό σύνδεσμο (symlink, γνωστό και ως soft link) του αρχείου στον φάκελο sites-enabled:

create sym

Επαναφορτώστε τη ρύθμιση παραμέτρων του Nginx για να τεθούν σε ισχύ οι αλλαγές:

reload nginx

Βήμα 4 – Επαλήθευση

Αν όλα πήγαν όπως αναμενόταν, τότε η διαδικτυακή εφαρμογή θα πρέπει τώρα να είναι προσβάσιμη στο localhost:9990 και το domain που ρυθμίσαμε. Ανοίξτε τη διεύθυνση URL σε ένα πρόγραμμα περιήγησης ιστού:

Hello World

Όπως αναμενόταν, η εφαρμογή εμφανίζει το “Hello World” στην οθόνη. Αυτή είναι η δουλειά της κύριας διαδρομής. Στη συνέχεια, δοκιμάστε τη δεύτερη διαδρομή επισκεπτόμενοι την ακόλουθη διεύθυνση URL:

Hello Cloud

Η εφαρμογή επιστρέφει με επιτυχία το απλό μήνυμα χαιρετισμού με το όνομα από την παράμετρο που ελήφθη από τη διεύθυνση URL.

Voila! Αναπτύξαμε με επιτυχία μια διαδικτυακή εφαρμογή Go στον τοπικό μας διακομιστή!

Τελικές Σκέψεις

Σε αυτόν τον οδηγό, δείξαμε την ανάπτυξη μιας απλής διαδικτυακής εφαρμογής Go με τη βοήθεια των τυπικών βιβλιοθηκών της Go. Επίσης, αναπτύξαμε έναν αντίστροφο διακομιστή μεσολάβησης χρησιμοποιώντας το Nginx. Αν και η επίδειξη πραγματοποιήθηκε σε τοπικό διακομιστή, για έναν δημόσιο διακομιστή, συνιστάται ανεπιφύλακτα να εγκαταστήσετε ένα πιστοποιητικό SSL για ασφαλή έκθεση στο διαδίκτυο. Για περισσότερο προγραμματισμό σε Go, μπορείτε να δείτε τον οδηγό μας σχετικά με το Δημιουργία και Εγκατάσταση Προγραμμάτων Go.

Καλή συνέχεια!

author

Pranay Kapgate

Συγγραφέας · CloudSigma

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

Σχόλια

Δεν υπάρχουν σχόλια ακόμα. Γράψτε το πρώτο.