Partie Pratique

I. a) Makefile

Objectif

Cet exercice est l'occasion de (re)voir la compilation C, ainsi que la création d'un Makefile afin de simplifier cette compilation.

Code à compiler

Le code de l'exercice est à récupéré ici LordAzyks/I-a-Makefile.

git clone https://github.com/LordAzyks/I-a-Makefile

Tâches à réaliser

1. Compilation

A l'aide de l'outil gcc (ou d'un équivalent), réussir à compiler les sources du projet en un fichier exécutable.

Attention, il est nécessaire de bien observer les sources.

Démontrer la correcte compilation en éxécutant le fichier compilé.

./result.o 26

2. Makefile

Afin de se simplfifier la vie pour les prochaines fois qu'une compilation sera nécessaire, réaliser un Makefile afin de réaliser les 3 actions suivantes :

build

make build

Doit produire le même fichier compiler qu'a l'étape 1.

run

make run ???

Doit permettre de compiler et d'éxécuter le resultat.

Attention, il faut passer un argument au fichier compiler, comment faire ?

clean

make clean

Doit supprimer le fichier compilé.

II. a) Dockerfile

Objectif

L'objectif de cet exercice est d'installer et de se (re)familiariser avec Docker au travers de la réalisation d'un Dockerfile.

Installation de Docker

Etant dépendent de votre OS, je vous laisse suivre la procédure d'installation adéquat : Get Docker

Pour ceux sous Linux, il n'est pas nécessaire d'installer Docker Desktop, et je conseil de simplement suivre l'installation du package Docker de votre distribution. Il peut également être judicieux d'installer Docker Compose de suite.

Tâches à réaliser

Que ce soit à l'aide de vos anciens cours, de la documentation officiel de Docker, cette exercice à pour but de réaliser les premiers pas sur Docker en autonomie.

1. Création d'un Dockerfile

De part la création d'un Dockerfile, nous allons créer notre propre image Docker.

Cette image doit :

Cependant, cette image peut :

Vous êtes libre, soyez créatifs, et n'ayez pas la même image que votre voisin, que chacun apprenne de sa propre expérience.

2. Docker run (et sûrement du debug)

Votre image est créée ? Il est temps de nous la présenter en action.

II. b) Docker Compose

Objectif

L'objectif de cet exercice est de revenir sur le déployement de plusieurs container d'un seul coup à l'aide de Docker Compose.

Taches à réaliser

Lors de cette exercice, nous avons pour objectif de décrire une stack applicative web à l'aide d'un docker-compose.yml. Cette stack devra comprendre à minima :

1. Frontend

Cela sera surement la base de votre stack, il éxiste de nombreuse application open-source fournissant un moyen d'installation Docker par docker compose, soit créatifs, herbégez une application de votre choix.

Voici deux liens utiles pour rechercher des applications à self-host :

AlternativeTo

Vous permet de chercher des alternatives à vos sites ou logiciels préférés. Pensez à rechercher une solution open-source et self-host.

awesome-selfhosted

-> version web

Awesome-Selfhosted est une liste de solutions gratuites et self-hosted.

Il y a de nombreuses catégories, n'hésitez pas à passez du temps à rechercher ce qui vous intéresse.

Pensez à chercher la mention "Docker" pour ne pas avoir de mauvaise surprise (sauf si vous désirez refaire toute la partie Dockerfile pour un projet open-source ...)

2. Backend

Le backend de votre solution va surement dépendre de votre frontend de choix.

3. Database

Pour la base de données, suivant la solution frontend choisi, il est parfois possible de choisir quel moteur de base de données utiliser, n'hésitez pas à choisir celle avec laquelle vous avez le plus d'habitude.

4. Reverse Proxy

Le reverse proxy permet de recevoir l'ensemble des appels à un nom de domain donné, localhost dans notre cas.

Lors de cet exercice, je ne veux voir que les ports du reverse proxy ouvert. L'ensemble des communications entre frontend, le backend et l'API doivent passer par le network docker ou par le reverse proxy.

L'implementation d'un reverse proxy est primordiale lors du déploiements de nombreuses applications sur le même serveur host et permet donc la distinction des services par sous-domaines par exemple.

Pour le reverse proxy, voir la documentation nginx par exemple.