Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
technique:docker:picasoft:dockerfiles [2021/10/16 18:15] qduchemitechnique:docker:picasoft:dockerfiles [2022/05/24 19:56] (Version actuelle) ppom
Ligne 1: Ligne 1:
 {{indexmenu_n>10}} {{indexmenu_n>10}}
 +
 # Comprendre la gestion des services # Comprendre la gestion des services
  
Ligne 8: Ligne 9:
 ## Préambule ## Préambule
  
-Par service, on entend la plupart des applications tournant sur les serveurs de Picasoft, qu'ils soient publics ou "privés", comme le serveur LDAP ou le serveur mail.+Par service, on entend la plupart des applications tournant sur les serveurs de Picasoft, qu'ils soient publics, comme Mattermost, ou "privés", comme le serveur LDAP ou le serveur mail.
 Ces services sont majoritairement gérés par Docker. Une *rule of thumb* est ce tout ce qui touche à l'administration système d'une machine, avec une configuration très spécifique (pare-feu, serveur SSH...) sera installé directement sur la machine, sans Docker. Ces services sont majoritairement gérés par Docker. Une *rule of thumb* est ce tout ce qui touche à l'administration système d'une machine, avec une configuration très spécifique (pare-feu, serveur SSH...) sera installé directement sur la machine, sans Docker.
  
 Pour le reste, qui pourrait être lancé sur une machine virtuelle quelconque, on privilégiera Docker (qui a justement l'avantage de construire des images qui peuvent être lancées de n'importe où, sans configuration spécifique adaptée au système d'exploitation). Pour le reste, qui pourrait être lancé sur une machine virtuelle quelconque, on privilégiera Docker (qui a justement l'avantage de construire des images qui peuvent être lancées de n'importe où, sans configuration spécifique adaptée au système d'exploitation).
  
-<bootnote>Pour gérer les conteneurs Docker, nous utilisons [[technique:docker:general:presentation|Docker Compose]]. +<bootnote>Pour gérer les conteneurs Docker, nous utilisons [[technique:tech_team:pres_docker|Docker Compose]]. 
-Les fichiers permettant de construire les images, de créer les conteneurs et de configurer les services sont centralisés sur un dépôt Git, appelé `dockerfiles`C'est la seule ressource nécessaire pour lancer n'importe quel service Picasoft, et est accessible ici : https://gitlab.utc.fr/picasoft/projets/dockerfiles.</bootnote>+Les fichiers permettant de construire les images, de créer les conteneurs et de configurer les services sont sauvegardés dans leurs dépôts Git. Chaque dépôt se suffit à lui-même pour lancer le service Picasoft en question. Ils sont accessibles ici : https://gitlab.utc.fr/picasoft/projets .</bootnote>
  
-<bootnote>Traditionnellement, il est cloné dans le répertoire `/DATA/docker/dockerfiles` sur les machines virtuelles.</bootnote>+<bootnote>Traditionnellement, ils sont clonés dans le répertoire `/DATA/docker/services` sur les machines virtuelles.</bootnote>
  
 ## Objectifs ## Objectifs
Ligne 30: Ligne 31:
 <bootnote question>Comment savoir ce qu'il y a dans une image, si on perd le Dockerfile ? Quel Dockerfile correspond à quelle version de l'image ? Si on perd l'accès à la machine, comment récupérer la configuration, remonter rapidement le service ? Comment versionner les changements de configuration ? Revenir à la version d'il y a deux semaines ?</bootnote> <bootnote question>Comment savoir ce qu'il y a dans une image, si on perd le Dockerfile ? Quel Dockerfile correspond à quelle version de l'image ? Si on perd l'accès à la machine, comment récupérer la configuration, remonter rapidement le service ? Comment versionner les changements de configuration ? Revenir à la version d'il y a deux semaines ?</bootnote>
  
-L'objectif de ce dépôt est de rendre possible le déploiement de n'importe quel service Picasoft avec la procédure suivante :+L'objectif de ces dépôts est de rendre possible le déploiement de n'importe quel service Picasoft avec la procédure suivante :
  
-* Cloner le dépôt +* Cloner le bon dépôt 
-* Se rendre dans le répertoire du service+* Se rendre dedans
 * Lancer un `docker-compose up -d` pour démarrer le service * Lancer un `docker-compose up -d` pour démarrer le service
  
Ligne 39: Ligne 40:
  
 * Cloner le dépôt * Cloner le dépôt
-* Checkout le commit correspondant+*Checkoutle commit correspondant
 * Lancer le service normalement * Lancer le service normalement
  
 Son dernier objectif est de permettre de rendre publics nos fichiers Compose et la configuration, sans exposer les secrets (mots de passe, etc). Son dernier objectif est de permettre de rendre publics nos fichiers Compose et la configuration, sans exposer les secrets (mots de passe, etc).
  
-Mises à part les données à proprement parler du service, il n'y a donc aucune différence entre un service lancé sur une de nos machines et un service lancé à partir de ce dépôt sur une machine quelconque, ce qui s'inscrit dans la philosophie Docker.+Mis à part les données à proprement parler du service, il n'y a donc aucune différence entre un service lancé sur une de nos machines et un service lancé à partir de ce dépôt sur une machine quelconque, ce qui s'inscrit dans la philosophie Docker.
  
-## Contenu du dépôt+## Contenu des dépôts
  
-Le dépôt est organisé en dossiers. Chaque dossier correspond à un *service* Picasoft au sens large, c'est-à-dire à un ensemble de conteneurs liés entre eux *techniquement* (*e.g.* Mattermost et sa base de données) et/ou *sémantiquement* (*e.g.* sites web statiques, relai et boîte à mail).+Chaque dépôt correspond à un *service* Picasoft au sens large, c'est-à-dire à un ensemble de conteneurs liés entre eux *techniquement* (*e.g.* Mattermost et sa base de données) et/ou *sémantiquement* (*e.g.* sites web statiques, relai et boîte à mail).
  
 <bootnote>Chaque service a son propre fichier Compose, lui permettant d'être déployé indépendamment des autres.</bootnote> <bootnote>Chaque service a son propre fichier Compose, lui permettant d'être déployé indépendamment des autres.</bootnote>
  
-Ainsi, chaque dossier du dépôt contient, selon les situations :+Ainsi, chaque dépôt contient, selon les situations :
  
 * Zéro, un ou plusieurs `Dockerfile` permettant de construire des images personnalisées pour Picasoft, * Zéro, un ou plusieurs `Dockerfile` permettant de construire des images personnalisées pour Picasoft,
Ligne 59: Ligne 60:
 * Un fichier d'exemple de secrets (mots de passe...) nécessaires au lancement du service, * Un fichier d'exemple de secrets (mots de passe...) nécessaires au lancement du service,
 * Un `README.md` résumant les paramètres modifiables sur le dépôt, les mécanismes pour en rajouter, etc, * Un `README.md` résumant les paramètres modifiables sur le dépôt, les mécanismes pour en rajouter, etc,
-* Pour les images maison, un `CHANGELOG.md` résumant les modifications faites au fil des version.+* Pour les images maison, un `CHANGELOG.md` résumant les modifications faites au fil des versions.
  
-## Utiliser le dépôt sur les machines+## Utiliser les dépôts sur les machines
  
-<bootnote warning>Cette section ne concerne que les nouvelles machines virtuelles où le dépôt n'est pas déjà cloné. À moins qu'on ouvre une nouvelle machine, ça ne devrait pas arriver - le dépôt existe déjà dans `/DATA/docker/dockerfilessur toutes les machines actuelles.</bootnote>+<bootnote warning>Cette section ne concerne que les services qui ne sont pas encore présents sur la machine virtuelle où l'on veut le déployer.</bootnote> 
 + 
 +Si la machine virtuelle est toute nouvelleon créé le dossier où l'on clonera les services : 
 +``` 
 +mkdir /DATA/docker/services 
 +``` 
 + 
 +On clone le dépôt : 
 + 
 +``` 
 +cd /DATA/docker/services 
 +git clone https://gitlab.utc.fr/picasoft/projets/services/<NOM-DU-DEPOT> 
 +```
  
-En effet, le dépôt sera partagé et les fichiers doivent être éditables par tous les membres de Picasoft.+Le dépôt sera partagé et les fichiers doivent être éditables par tous les membres de Picasoft.
  
 Or, avec Git, tout `git pull` va associer les nouveaux fichiers écrits au compte qui effectue la commande, avec des permissions d'écriture uniquement pour ce membre (pour plus de détails, se référer à la [documentation Git](https://git-scm.com/docs/git-init#Documentation/git-init.txt---sharedfalsetrueumaskgroupallworldeverybody0xxx) et comprendre la notion de `umask`). Or, avec Git, tout `git pull` va associer les nouveaux fichiers écrits au compte qui effectue la commande, avec des permissions d'écriture uniquement pour ce membre (pour plus de détails, se référer à la [documentation Git](https://git-scm.com/docs/git-init#Documentation/git-init.txt---sharedfalsetrueumaskgroupallworldeverybody0xxx) et comprendre la notion de `umask`).
Ligne 71: Ligne 84:
 Une solution pour rendre le dépôt "partagé" (*i.e.* éditable par tous les membres du groupe `docker`), quelles que soient les permissions initiales, est la suivante. Une solution pour rendre le dépôt "partagé" (*i.e.* éditable par tous les membres du groupe `docker`), quelles que soient les permissions initiales, est la suivante.
  
-Éditer `/DATA/docker/dockerfiles/.git/config`, et ajouter, sous `[core]` :+Éditer `/DATA/docker/services/<NOM-DU-DEPOT>/.git/config`, et ajouter, sous `[core]` :
  
 ``` ```
Ligne 82: Ligne 95:
  
 ```bash ```bash
-sudo setfacl -Rdm g:docker:rwx /DATA/docker/dockerfiles+sudo setfacl -Rdm g:docker:rwx /DATA/docker/services/
 ``` ```
  
 Ainsi, les fichiers créés auront le groupe `docker` par défaut ainsi que les permissions d'écriture pour le groupe. Ainsi, les fichiers créés auront le groupe `docker` par défaut ainsi que les permissions d'écriture pour le groupe.
  
-On terminera, pour être sûr, par :+On terminera, pour être sûr·e, par :
  
 ```bash ```bash
-sudo chgrp -R docker /DATA/docker/dockerfiles +sudo chgrp -R docker /DATA/docker/services 
-sudo chmod -R g+w /DATA/docker/dockerfiles +sudo chmod -R g+w /DATA/docker/services 
-sudo chmod g-w /DATA/docker/dockerfiles/.git/objects/pack/+sudo chmod g-w /DATA/docker/services/<NOM-DU-DEPOT>/.git/objects/pack/
-find /DATA/docker/dockerfiles -type d -exec sudo chmod g+s {} \;+find /DATA/docker/services -type d -exec sudo chmod g+s {} \;
 ``` ```
  • technique/docker/picasoft/dockerfiles.1634400901.txt.gz
  • de qduchemi