Bienvenue sur le projet d'Infrastructure as Code et Conteneurisation.
Le but de ce projet est de déployer une infrastructure de services en quelques commandes.
- Administration des services de l'infra avec Portainer
- Monitoring des applications conteneurisées Grafana, Prometheus et cAdvisor
- Gestion des images avec Registry
- Déploiement continu et test du code avec Jenkins
Afin de mettre en place l'infrastructure, installer un outil de virtualisation (VMWare/Virtual box).
Préparer une machine virtuelle Ubuntu de préférence en Desktop avec une configuration minimale :
RAM | Cœurs | Disk | Network |
---|---|---|---|
4GB | 4 | 100GB | NAT (DHCP) |
sudo -i
apt-get update
apt install -y git
apt install -y net-tools
apt install -y openssh-server
ssh-keygen
Après avoir lancé la commande ssh-keygen
, aller dans le dossier .ssh
et récupérez la clé id_rsa.pub.
Sur GitHub, accéder à l'onglet de création d'un nouveau clé ssh et ajouter la clé publique.
Ensuite lancer les commandes suivantes en renseignant les informations respectives :
git config --global user.name "github_pseudo"
git config --global user.email "github_email"
Cette étape vous permettra de faire des actions sur votre repository sans avoir à vous authentifier à chaque action.
Elle vous évitera également de renseigner votre mot de passe en clair, ce qui pourrait constituer un problème de sécurité.
Cloner ensuite votre projet sur votre serveur avec la commande suivante :
git clone [email protected]:nicolas-hermosilla/projet-B3.git
La dernière étape consiste à créer votre repository sur votre GitHub et de le cloner sur votre serveur.
Déplacer les fichiers du repo vers votre repo et faites votre premier push.
git add .
git commit -m "my-first-commit"
git push
Après avoir récupérer les données, aller dans le repository de votre serveur et retrouver le script install-docker.sh.
Donner les droits d'exécution à ce fichier et lancer le script pour installer docker et docker-compose.
chmod u+x install-docker.sh
./install-docker.sh
A la racine de votre repo, donner les droits d'éxecution :
chmod u+x create_volume.sh
Lancer le script ./create_volume.sh
Ce script va créer les différents volumes associés aux services respectifs.
Il va également déplacer le fichier de configuration de prometheus dans le volume de prometheus et ce fichier sera pris en compte lors du déploiement du service.
Lancer le script admin.sh situé dans le dossier administration.
./admin.sh
Ce script va nous permettre de lancer 2 services :
- Portainer
- Jenkins
Une fois le script exécuté, lancer la commande docker ps
et vérifier que les 2 services sont bien en UP.
Accéder à Portainer avec l'URL suivant http://@IP_serveur:9000
(lancer la commande ip a
pour récuprérer l'adresse IP).
Créer un compte administrateur.
Sélectionner l'environnement à administrer, ici Docker.
Depuis la console, récupérer le mot de passe administrateur de Jenkins avec la commande
docker logs jenkins
Accéder à Jenkins depuis l'adresse @IP_serveur:8082
et y insérer le mot de passe.
Installer ensuite les plugins suggérés.
Créer un compte administrateur : admin/admin/admin/admin/admin@local.
Enfin, laisser l'adresse du serveur par défaut.
Administrer Jenkins → Gestion des plugins → Disponible
- Depuis Administrer Jenkins → Configurer le système, aller tout en bas de la page sur separate configuration page
- Sélectionner Docker et Docker Cloud détails pour y insérer l'URI
unix:///var/run/docker.sock
- Séléctionner Enabled et tester la connexion.
- Sauvegarder les modifications.
Administrer Jenkins → Docker
- Sur Jenkins, sélectionner nouvel item
- Nommer votre projet et séléctionner projet free-style
- Sélectionner Gthub project et insérer l'URL de votre repo.
- Gestion du code source : Séléctionner Git et insérer l'URL du repo.
- Branch to build : Ne pas spécifier de branche spécifique.
- Ce qui déclenche le build : Sélectionner Scrutation de l'outil de gestion de version et mettre * * * * * pour une vérification du repo chaque minute.
- Ajouter une étape au build : Sélectionner Exécuter un script shell et y ajouter :
cd services
./run.sh
Après chaque modification de repo, vous pouvez visualiser sur Jenkins les logs dans historique des builds ou directement depuis Blue ocean
Sur Jenkins, accéder directement à Blue ocean en connectant à votre Git.
Créer votre webhook dans les paramètres de votre repo sur GitHub en insérant l'ip publique de votre serveur (exemple: https://192.168.5.128:8082/github-webhook/)
Cette configuration notifiera directement Jenkins dès lors qu'une modification sera faite par l'intérmédiaire de ce webhook et scannera automatiquement le repos.
- Une fois que l'infrastructure est déployée sur votre serveur, accéder à Grafana depuis l'URL
http:@IP_serveur:3000
. - Authentifiez-vous (user:admin password:admin)
- Aller dans Configuration/Data Sources et ajouter une nouvelle Data Source prometheus.
Renseigner les paramètres suivants :
- URL : http://prometheus:9090
- Skip TLS Verify
Tester ensuite la datasource en sauvegadant les paramètres.
- Accéder à Dashboard/Manage et importer le dashboard en renseignant l'ID 193 source
- Sélectionner la datasource Prometheus
Pour pousser une image dans le registry :
Exécuter la commande docker tag
Exemple : docker tag grafana/grafana localhost:5000/img-grafana
Exécuter ensuite la commande push pour envoyer les images vers votre registry :
Exemple : docker push localhost:5000/img-grafana
Accéder à l'interface Regsitry depuis http:@IP_serveur:8081
Pour récupérer des images :
Exécuter la commande pull
Exemple : docker pull localhost:5000/img-grafana