Déploiement d'une application Vue.js avec Docker et Nginx

Le déploiement d'une application frontend moderne comme Vue.js repose généralement sur la génération de fichiers statiques qui sont ensuite servis par un serveur web performant. L'utilisation de Docker permet d'encapsuler l'application et sa configuration serveur danss un conteneur isolé et reproductible.

Préparation des fichiers de production

La première étape consiste à compiler le projet Vue pour générer les ressources optimisées. Exécutez la commmande suivante à la racine de votre projet :

npm run build

Cette commande crée un répertoire dist/ contenant le code HTML, CSS et JavaScript minifié. Transférez ce dossier sur votre serveur de déploiement (par exemple dans /opt/mon-application).

Configuration du serveur Nginx

Pour gérer correctemnet le routage d'une Single Page Application (SPA), Nginx doit être configuré pour rediriger toutes les requêtes vers index.html. Créez un fichier nommé nginx.conf :

worker_processes 1;

events {
    worker_connections 1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
            # Redirection vers index.html pour le support du mode history de Vue Router
            try_files $uri $uri/ /index.html;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   /usr/share/nginx/html;
        }
    }
}

Création du Dockerfile

Le fichier Dockerfile définit les étapes de construction de l'image Docker. Nous utiliserons l'image officielle Nginx basée sur Alpine Linux pour sa légèreté.

# Utilisation d'une image légère de Nginx
FROM nginx:stable-alpine

# Métadonnées de l'image
LABEL maintainer="engineering@example.com"

# Suppression de la configuration par défaut de Nginx
RUN rm /etc/nginx/conf.d/default.conf

# Copie du fichier de configuration personnalisé
COPY nginx.conf /etc/nginx/nginx.conf

# Copie des fichiers compilés du projet Vue vers le répertoire de service de Nginx
COPY dist/ /usr/share/nginx/html/

# Information sur le port exposé
EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

Gestion des images en environnement hors-ligne

Si votre serveur de production n'a pas accès à Internet, vous pouvez exporter l'image depuis une machine disposant d'une connexion :

# Exporter l'image vers une archive tar
docker save -o nginx_base.tar nginx:stable-alpine

# Importer l'image sur le serveur de destination
docker load -i nginx_base.tar

Construction et exécution du conteneur

Une fois les fichiers dist/, nginx.conf et Dockerfile réunis dans le même répertoire sur le serveur, lancez la construction de l'image :

docker build -t vue-app-prod:v1.0 .

Démarrez ensuite le conteneur en mappant le port 80 du conteneur sur le port souhaité de la machine hôte (ici le port 8080) :

docker run -d \
  --name conteneur-vue-instance \
  -p 8080:80 \
  vue-app-prod:v1.0

L'application est désormais accessible via l'adresse http://<IP_DU_SERVEUR>:8080. Le déploiement est effectif et les fichiers locaux du répertoire dist/ peuvent être supprimés, car ils sont désormais intégrés à l'image Docker.

Étiquettes: Docker nginx Vue.js deployment devops

Publié le 17 août à 18h30