Intégration déploiement
Docker & github
Finalisons notre architecture
Nous avons maintenant un serveur mysql, un adminer qui expose un manager
mysql, et un serveur nodejs qui se connecte à mysql et fourni une API
Il nous manque maintenant une connexion à l’api sur notre projet React et faire
tourner la webapp dans un dernier composant, qui communiquera avec notre api
Appel à l’api
A l’aide d’axios (à installer) on va
pouvoir faire appel à notre api, en
utilisant le port passé en paramètre,
qui sera le même que celui du
serveur
On affiche dans le dom le nombre
d’utilisateur récupéré
Image React
Toujours à l’aide de node, on
va créer un dossier app
dans le container et se
déplacer dedans.
La commande ENV va nous
permettre d’utiliser npm sans
gérer les droits d’accès des
fichiers en explicitant le .bin
dans le PATH global
Image React
On copie les fichiers
[Link] et lock, puis
on installe les
dépendances ainsi que
react-scripts pour pouvoir
exécuter le npm start plus
tard
Service React
Dans le docker compose on
va définir les volumes du
dossier courant vers le dossier
app sur le container, sauf les
node_modules, et utiliser le
champ command pour lancer
l’app web une fois
l’environnement en place
Lancez votre environnement total
Votre application doit vous afficher le bon nombre d’utilisateur
C’est l’occasion donc d’ajouter un nouveau script de migration qui va insérer au
moins un utilisateur à votre table
Builder les images directement depuis le docker-compose
Il est possible de préciser le chemin vers le dockerfile nécessaire aux images de
chaque service.
Ainsi il n’est plus nécessaire de supprimer les images et les builder avant de
redéployer notre docker compose
Définir le dockerfile
Le champ build va devenir :
build:
context: .
dockerfile: relativePathToDockerFIle
On va pouvoir faire un docker-compose -f [Link] build pour
rebuilder toutes les images définies dans le fichier yml
Si les images n’existent pas encore, la commande up suffit
A vous de jouer
Modifier votre docker-compose pour préciser le chemin vers les images interne
correspondant à un dockerfile
Donc votre service server et votre service react
Optimisons les volumes
Notre image copie de nombreux
fichiers en gérant des droits d’accès
Simplifions nous la vie ! Déplaçons le
fichier [Link] et dockerfile dans un
dossier server
Les volumes vont copier tous le
dossier server sauf node_modules
On applique la commande
directement dans le docker compose
Simplifions l’image node (DockerfileNodejs)
On test nos modifications
docker-compose -f [Link] build
docker-compose -f [Link] up --detach
.dockerignore
Le fichier Docker .dockerignore est utilisé pour éviter que certains fichiers et
répertoires ne se retrouvent dans votre Docker image.
Le fichier Docker .dockerignore est utilisé lorsque vous construisez un Docker
image et consiste en des règles correspondant à des fichiers et/ou des
répertoires.
● Réduction de la taille du fichier Docker image
● Plus rapide Docker image construit
● Éviter la divulgation des secrets
Github actions
On va tester le déploiement de notre application dans un docker compose au sein de
notre pipeline github
- name: Build the stack
run: docker-compose up -d
L’objectif ? Pouvoir exécuter des test end2end sur notre architecture
Et à terme, déployer cette architecture vers un service d’hébergement docker payant
comme digitalOcean, aws, hostinger, kamatera, ou vers un serveur perso
Exemple de déploiement avec aws ec2
source : [Link]