Go est un langage de programmation généraliste open-source. Il a été inspiré par la productivité de Python tout en offrant les capacités du C. Il a été initialement développé par Google pour résoudre les problèmes auxquels ils faisaient face avec leur base de code (complexité du code et long temps de compilation). Comme tout autre langage de programmation moderne, Go convient à toutes sortes d'usages. Par exemple, il peut être utilisé pour le développement web, les scripts en ligne de commande, les applications de serveur réseau, le développement front-end, etc.
Dans ce guide, nous allons vous guider à travers les étapes du déploiement d'une application web Go simple sur Ubuntu 22.04 LTS. Nous allons également implémenter un reverse proxy Nginx pour gérer la charge de trafic.
Prérequis
Pour effectuer les étapes présentées dans ce guide, vous aurez besoin des composants suivants préconfigurés :
- Un système correctement configuré Ubuntu En savoir plus sur la configuration de votre propre serveur Ubuntu sur CloudSigma.
- Environnement de programmation Go avec les variables d'environnement nécessaires ( $GOROOT et $GOPATH). Consultez le guide sur la configuration de l'environnement de programmation Go sur Ubuntu.
- Nginx pour le reverse proxy. Ce guide détaille l'installation et la configuration d'Nginx sur Ubuntu.
- Un éditeur de texte approprié pour travailler avec le code Go, par exemple, Atom, Sublime Text, Brackets, VS Code, Vim, etc. Pour ce guide, VS Code sera notre éditeur de texte de choix.
Si le service doit être accessible par un nom de domaine, vous devez alors avoir un FQDN pointant vers le serveur. Dans ce cas, il est recommandé de sécuriser Nginx avec SSL. Vous pouvez en savoir plus sur la sécurisation d'Nginx avec Let’s Encrypt sur Ubuntu grâce à notre tutoriel.
Étape 1 – Création d'une application web Go
Nous allons créer une application web Go simple qui affichera “Hello World” à l'écran lors de l'accès au domaine. De plus, l'application saluera l'utilisateur lors de l'accès à <domaine>/greet/<nom_utilisateur>.
Commencez par créer un nouveau projet sous $GOPATH. Créez le répertoire du projet :
|
1 |
mkdir -pv $GOPATH/go-web |

Changez le répertoire actuel :
|
1 |
cd $GOPATH/go-web |

Ensuite, initialisez un projet :
|
1 |
go mod init <nom_paquet> |

Ensuite, créez main.go qui servira de racine à notre application Go. Il hébergera le code source de notre application web :
|
1 |
touch main.go |
Ouvrez le projet dans VS Code :
|
1 |
code . |
Collez le code suivant dans le fichier main.go:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello World") }) http.HandleFunc("/greet/", func(w http.ResponseWriter, r *http.Request) { name:= r.URL.Path[len("/greet/"):] fmt.Fprintf(w, "Hello %s\n", name) }) http.ListenAndServe(":9990", nil) } |

Jetons un coup d’œil rapide à la structure du programme Go que nous venons de créer :
- Le terme package main sert de point d'entrée à notre application. Il indique également au compilateur Go de compiler le fichier sous forme d'exécutable plutôt que de bibliothèque partagée.
- L'instruction import importe tous les modules supplémentaires nécessaires au fonctionnement du programme. Ici, nous avons importé les packages fmt (pour l'affichage de texte) et net/http (pour les applications de serveur web).
- En utilisant la fonction
http.HandleFunc, nous avons établi deux routes :
- La première route / sert de route parente dans func main.
- La deuxième route
/greet/ accepte un paramètre d'URL (une chaîne, dans ce cas). La chaîne est ensuite affichée accompagnée du message d'accueil.
- URL Path est utilisé pour stocker la valeur après /greet/. La valeur est ensuite transmise en tant que name du paramètre d'URL.
- La http.ListenAndServe fonction initialise le serveur web. Ici, elle écoute sur le port 9990.
Maintenant que notre programme est prêt, compilez le fichier en un exécutable :
|
1 |
go build main.go |
Le compilateur Go va créer un exécutable portant le même nom que le fichier. Vérifiez le résultat :
|
1 |
ls -lh |
Étape 2 – Configuration d'un fichier d'unité systemd pour l'exécution en arrière-plan
Jusqu'à présent, si l'utilisateur actuel se déconnecte du système, l'application web Go s'arrête de fonctionner. C’est une mauvaise conception pour un serveur web. Pour résoudre ce problème, nous allons créer un fichier d'unité systemd pour la maintenir en cours d'exécution en arrière-plan, même lorsque l'utilisateur se déconnecte du serveur. Cela rapproche la configuration d'un déploiement de niveau production.
Créez un fichier systemd dédié goweb.service sous /lib/systemd/system:
|
1 |
sudo nano /lib/systemd/system/goweb.service |
Ajoutez l'extrait suivant dans le fichier d'unité :
|
1 2 3 4 5 6 7 8 9 10 11 |
[Unit] Description=goweb [Service] Type=simple Restart=always RestartSec=5s ExecStart=/home/<username>/go/go-web/main [Install] WantedBy=multi-user.target |

Ici,
- La variable ExecStart indique le point d'entrée du service via l'exécutable principal situé dans le répertoire de notre projet ( $GOPATH/go-web). Notez qu'au lieu de mentionner $GOPATH, nous avons saisi le chemin complet vers le fichier exécutable. C’est parce que la variable $GOPATH n'est visible que par l'utilisateur.
- La variable Restart indique à systemd ce qu'il faut faire au cas où le programme s'arrêterait de fonctionner. La valeur always indique à systemd de redémarrer le programme à chaque fois qu'il s'arrête.
- La variable RestartSec indique à systemd d'attendre un certain temps avant de tenter de redémarrer le programme. Ici, la valeur est définie sur 5s (5 secondes).
- L'instruction WantedBy=multi-user.target spécifie dans quel état systemd activera le service.
Enregistrez le fichier et fermez l'éditeur. Démarrez le service :
|
1 |
sudo service goweb start |

Vérifiez si le service est opérationnel :
|
1 |
sudo service goweb status |

Comme le suggère la sortie, l'application est opérationnelle. Nous sommes maintenant prêts à utiliser Nginx comme proxy inverse.
Étape 3 – Configuration de Nginx en tant que proxy inverse
Maintenant, nous allons créer un bloc de serveur pour que Nginx agisse comme un proxy inverse. L'application web sera exposée à Internet via le proxy inverse (pour des performances et une sécurité accrues).
Changez le répertoire actif actuel pour sites-available:
|
1 |
cd /etc/nginx/sites-available |

Maintenant, créez un fichier avec le nom de domaine sous lequel vous souhaitez exposer votre application. Pour la démonstration, nous utiliserons example.com:
|
1 |
sudo nano example.com |
Saisissez le code suivant dans le fichier de bloc :
|
1 2 3 4 5 6 |
server { server_name example.com www.example.com; location / { proxy_pass http: //localhost:9990; } } |

Ici, nous utilisons proxy_pass pour servir l'application web Go sur l'adresse IP du serveur (localhost) sur le port 9990.
Pour activer le bloc Nginx, créez un lien symbolique (également appelé lien logiciel) du fichier vers le dossier sites-enabled :
|
1 |
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com |

Rechargez la configuration de Nginx pour que les modifications prennent effet :
|
1 |
sudo nginx -s reload |
Étape 4 – Vérification
Si tout s'est déroulé comme prévu, l'application web devrait maintenant être accessible sur localhost:9990 et le domaine que nous avons configuré. Ouvrez l'URL dans un navigateur web :
|
1 |
localhost:9990 |

Comme prévu, l'application affiche “Hello World” à l'écran. C'est le rôle de la route principale. Ensuite, testez la deuxième route en visitant l'URL suivante :
|
1 |
localhost:9990/greet/<name> |

L'application renvoie avec succès le message d'accueil simple avec le nom provenant du paramètre reçu de l'URL.
Voilà ! Nous avons déployé avec succès une application web Go sur notre serveur local !
Dernières réflexions
Dans ce guide, nous avons démontré le déploiement d'une application web Go simple à l'aide des bibliothèques standards de Go. Nous avons également déployé un proxy inverse en utilisant Nginx. Bien que la démonstration ait été effectuée sur un serveur local, pour un serveur public, il est fortement recommandé de mettre en place un certificat SSL pour une exposition sécurisée sur Internet. Pour en savoir plus sur la programmation en Go, vous pouvez consulter notre tutoriel sur la compilation et l'installation de programmes Go.
Bonne informatique !


Commentaires
Aucun commentaire pour l'instant. Soyez le premier.