Installer une Application Angular sur un serveur Ubuntu

14/11/19 danny

Qu'allons nous faire

Nous allons déployer notre Application Web sur un serveur Ubuntu.
Cette application a été développée avec le framework javascript Angular version 8.2.14

Le projet Angular de base que nous utiliserons dispose des caractéristiques suivantes

  • Généré avec Angular CLI
  • Routing
  • Lazy Loading
  • Framework CSS Bootstrap
  • Server Side Rendering
  • HttpClient
  • Transfer State
  • Progressive Web App

La démo correspondante est accessible à l’adresse suivante https://angular.ganatan.com/

Le code source ou dépôt de ce projet est disponible sur github à l'adresse suivante
https://github.com/ganatan/angular8-pwa


Avant de commencer

Ubuntu est un système d’exploitation Linux  développé  par la société Canonical.
C’est le système d'exploitation le plus utilisé sur les systèmes Cloud et les serveurs informatiques.

Nous utiliserons la version Ubuntu Server 18.04.3 LTS.

Cette version est téléchargeable sur le site web https://www.ubuntu.com/download/server

Il nous faut disposer d'une machine virtuelle chez un fournisseur pour pouvoir installer notre application.

Le tutoriel suivant explique comment le faire par exemple chez le fournisseur OVH.
https://www.ganatan.com/tutorials/installer-serveur-ubuntu-chez-ovh

Dans notre exemple l'adresse IP de la machine virtuelle sera 10.0.0.80


Résumé de l'installation

Les différentes étapes de notre installation seront en résumé.

  • Mise à jour du serveur Ubuntu
  • Installation du serveur HTTP nginx
  • Installation de cURL si nécessaire
  • Installation de Node.js et npm
  • Compilation et installation de l'application Web
  • Configuration de nginx
  • Installation de pm2

Conditions préalables

Afin de déployer notre application nous utiliserons les éléments suivants.

  • git version 2.21.0
  • nginx  version 1.17.0
  • curl version 7.64.1
  • nodejs version 10.16.3
  • npm version 6.9.0
  • pm2  version 3.5.1

Les dernières versions de ces outils sont disponibles ci-dessous


Mise à jour Ubuntu

En premier lieu il nous faut nous connecter sur notre serveur avec un client ssh.
Nous pourrons alors éxécuter un certain nombre de scripts.

La version utilisée dans ce tutoriel est la version Ubuntu 18.04.3 LTS
Vérifions la version installée sur notre serveur ubuntu

# Test de version du serveur Ubuntu
cat /etc/issue

Nous allons mettre à jour notre version d'ubuntu.

# Mise à jour de la liste des fichiers disponibles
# Mise à jour de tous les paquets installés sur le système

# Méthode 1
sudo apt-get update
sudo apt-get upgrade --yes 

# Méthode 2
sudo apt-get update && sudo apt-get upgrade -y

Installation de nginx

A ce stade du didacticiel si nous tapons l'adresse de notre serveur (http://10.0.0.80/) 
Nous obtenons dans notre navigateur le message Ce site est inaccessible.

Ce qui est logique puisqu' aucun serveur HTTP n'est installé.

Nginx est le serveur HTTP que nous allons utilisé.
Nous pouvons l'installer ou le désinstaller en tapant les commandes suivantes.

# Installation
sudo apt-get install nginx --yes

# Désinstallation
sudo apt-get purge nginx nginx-common nginx-full --yes

Installons nginx sur notre serveur.
A ce stade nous pouvons vérifier que notre serveur fonctionne.
Tapez l'adresse ip du serveur que nous avons provisionné dans le tutoriel précédent.

http://10.0.0.80/

nginx a été installé et fait office de serveur http, nous obtenons ainsi la fenêtre de bienvenue de nginx.

Welcome to nginx!
If you see this page, the nginx web server is successfully installed and working. Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

Installation de curl

cURL (client URL request library) est une interface en ligne de commande.
Elle nous permettra de récupérer le contenu d'une ressource.

Si cURL n'est pas installé sur le serveur vous pouvez le faire avec les commandes suivantes.

# vérification de la version
curl --version

# installation
sudo apt-get --yes install curl

Installation Node.js

Node.js est la plateforme JavaScript que nous utiliserons pour éxécuter notre application.

Nous pouvons utiliser le script conseillé à cette adresse https://github.com/nodesource/distributions#debinstall
Dans notre exemple Node.js v10.x

Pour l'installer sur le serveur il nous faut lancer les commandes suivantes.

# Installation de Node.js
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
sudo apt-get install -y nodejs

# Mise à jour de npm
sudo npm install npm -g

# Vérification de la version node
node --version

# Véerification de la version npm
npm --version

Utilisation de git

Nous allons maintenant créer notre application web sur notre poste de travail
Il nous faudra au préalable installer les logiciels Node.js ,npm et Git.

Les étapes seront les suivantes

  • Récupérer le code source de l'application
  • se positionner dans le répertoire de l'application
  • Installer les dépendances
  • Compiler l'application
# Récupération du dépôt de l'application
git clone https://github.com/ganatan/angular8-example-pwa.git

# Se positionner
cd angular8-example-pwa

# Installation
npm install

# Compilation
npm run build:ssr

Le répertoire dist contient l'application compilée.
Ce répertoire constitue le livrable ou l'artefact à installer sur notre serveur.

Il nous faut copier ce répertoire sur le serveur Ubuntu.
Sur notre poste de travail nous pouvons utiliser scp (pour Ubuntu) ou Winscp (sous Windows).

L'emplacement de destination n'a pas d'importance.
Dans notre exemple nous copions le répertoire dist sur /var/www/angular.

Il nous faut copier la configuration nginx correspondante.
Le fichier nginx.conf contenu dans le dépôt doit être copier sur le serveur Ubuntu dans /etc/nginx.

Ce fichier de configuration contient quelques optimisations et surtout les éléments de redirection.

user nobody nogroup;
worker_processes auto;
events {
    worker_connections 1024;
}
http {
    gzip on;
    gzip_http_version 1.1;
    gzip_comp_level 5;
    gzip_min_length 256;
    gzip_proxied any;
    gzip_vary on;
    gzip_types application/atom+xml
        application/javascript
        application/json
        application/rss+xml
        application/vnd.ms-fontobject
        application/x-font-ttf
        application/x-web-app-manifest+json
        application/xhtml+xml
        application/xml
        font/opentype
        image/svg+xml
        image/x-icon
        text/css
        text/plain
        text/x-component;
    sendfile on;
    upstream main.module {
        server 127.0.0.1:4000;
    }
    server {
        listen *:80 default_server;
        server_name "";
        location / {
            proxy_pass http://main.module;
            proxy_redirect off;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Host $server_name;
        }
    }
}

Il ne reste plus qu'à aller dans le répertoire de l'application.
Dans notre exemple /var/www/angular

Puis lancer la commande node dist/server
Vérifier l'application avec par exemple http://10.0.0.80/

L'application Web s'affiche dans notre navigateur.


Installation de pm2

L'installation que nous avons effectué est pour l'instant manuelle.
Nous allons automatiser l'éxécution de l'application Web en utilisant pour cela PM2.

PM2 est un process manager pour JavaScript sous Node.js.
Nous l'installerons sur le serveur avec la commande suivante.

# Installation
sudo npm install -g pm2

Lors du déploiement de l'application nous utiliserons un fichier de configuration process.config.js.
Ce fichier présent sur le dépôt doit être rajouté sur ubuntu dans /var/www/angular
 

module.exports = {
    apps : [
      {
        name      : 'angular-webapp',
        script    : 'dist/server',
        env: {
          COMMON_VARIABLE: 'true'
        },
        env_dev : {
          NODE_ENV: 'dev'
        },
        env_prod : {
          NODE_ENV: 'prod'
        }
      }
    ],
  };

Automatisation

Pour terminer nous lancons les commandes

  • Exécution de l'application via PM2
  • Mise en mémoire de PM2
  • Redémarrage du serveur nginx
  • Redémarrage du serveur Ubuntu
# Exécution de l'application
pm2 start process.config.js --env prod

# Mise en mémoire de PM2
pm2 startup
pm2 save

# Redémarragede nginx
sudo service nginx restart

# Redémarrage du serveur ubuntu
reboot

Tests de l'application

Il ne reste plus qu’à tester l’application.
Plusieurs cas de figure peuvent se présenter à nous.

1/ Installation sur un poste de travail Ubuntu.
2/ Installation sur un poste de travail Windows et utilisation de Ubuntu via virtual box.
3/ Installation sur une machine virtuelle ubuntu chez un fournisseur

Si l’adresse IP est par exemple 10.0.0.80

Dans tous les cas le test de l’application sera le suivant

  • http:// 10.0.0.80/


Dans les cas 1 et 2 vous pourrez tester avec les commandes

  • http://localhost/
  • http://127.0.0.1/

Laissez un commentaire

Votre avis
Cette adresse ne sera pas publiée