{{indexmenu_n>20}} # Administrer les services Prérequis : avoir [[technique:tech_team:start|une idée de comment fonctionnent Docker et Compose]] ^_^. Tous les services lancés avec Docker ont leur configuration versionnée dans leur dépôt, accessible [ici](https://gitlab.utc.fr/picasoft/projets/services) (voir [[technique:docker:picasoft:dockerfiles|gestion des services]]). En particulier, les fichiers `docker-compose.yml` présents dans chaque dépôt, ainsi que les fichiers de configuration et de secrets, permettent de lancer n'importe quel service de façon autonome, sur n'importe quelle machine. Pour chacune des opérations détaillées dans cette page, on suppose que : * Vous savez sur quelle machine tourne ou doit tourner le service (`pica01`, `monitoring`...). Si vous ne le savez pas, les [[technique:graph_services|graphes des services]] peuvent vous aider. * Vous avez une connexion SSH active sur cette machine * Vous êtes dans le dossier `/DATA/docker/services/`, sur la branche `master`. * Vous êtes sur la branche `master` et à jour si besoin (`git pull`) La branche `master` devant refléter l'état des services en production, toutes les opérations sur les machines de production devront être réalisées depuis `master` : cela signifie que les branches sur lesquelles vous travaillez devront être fusionnées à la fin de vos tests, et donc avant la mise en production. Par exemple : je veux faire quelque chose avec Mattermost. Mattermost tourne sur `pica02` (cf [[technique:graph_services|graphes des services]]), je suis dans le dossier `/DATA/docker/services/mattermost`, j'ai vérifié que je suis sur `master` et j'ai fait un `git pull`, je suis prêt à effectuer une opération. Cette page présente le cas général, mais avant toute opération de mise à jour, il faut **absolument lire** le fichier `README.md` du sous-dossier du service. Certains nécessitent des précautions avant de lancer une nouvelle version de l'image. ## Opérations usuelles La documentation de l'outil en ligne de commande de Docker Compose est accessible ici : https://docs.docker.com/compose/reference/overview/ Un conteneur noté `Unhealthy` à cause d'un mauvais `HEALTHCHECK` sera **exclu** de Traefik, même s'il fonctionne bien. Ceci se traduira par une erreur 404. Comme les `HEALTHCHECK` s'exécutent pas défaut toutes les minutes, il ne faut pas "s'inquiéter" si un service n'est pas accessible tout de suite. On peut vérifier la santé des conteneurs avec un `docker ps`. Si le dossier du service n'existe pas... Alors, vous êtes probablement sur la mauvaise machine. Si vous lancez un nouveau service, voir plus bas. Le nom des services à utiliser dans les commandes Compose sont les clés du fichier `docker-compose.yml`, et non le nom des conteneurs. La commande ``` docker-compose config --services ``` permet de voir les services définis dans le fichier. ### Afficher les processus d'un service ```bash docker-compose ps ``` affiche tous les conteneurs lancés par le fichier Compose courant. ```bash docker-compose top ``` affiche tous les processus à l'intérieur des conteneurs lancés par le fichier Compose courant. ### Exécuter une commande dans un conteneur ``` docker-compose exec ``` Très utile pour ouvrir un shell dans un conteneur, avec `bash` ou `sh` pour commande. ### Consulter les logs d'un service Par exemple, à la recherche d'une erreur. ```bash docker-compose logs -f [--tail ] ``` `n` est le nombre de lignes à afficher et est optionnel. `-f` permet de suivre les logs en direct. ### Redémarrer un service Par exemple, s'il a planté. ```bash docker-compose restart [service] ``` Le nom du service est optionnel : si on veut tout redémarrer, on ne le met pas. Sinon, on indique le nom du service présent dans le fichier `docker-compose.yml`. ### Recréer un service Par exemple, suite à une mise à jour de l'image ou de la configuration. La recréation est différente du redémarrage : elle écrase toutes les modifications faites à l'intérieur du conteneur qui ne sont pas persistées dans des volumes, et est nécessaire pour prendre en compte un changement de variable d'environnement, de réseau, d'image... ```bash docker-compose up -d [service] ``` Le `docker-compose pull` est **essentiel** : il permet de récupérer les nouvelles versions des images et de s'assurer qu'on a bien la dernière version indiquée dans le Compose. ### Éteindre un service ```bash docker-compose stop [service] ``` ### Éteindre et supprimer tous les services d'un fichier Compose ```bash docker-compose down ``` ## Lancement d'un nouveau service Lorsque vous lancez un nouveau service, il y a parfois quelques opérations à faire avant de lancer les conteneurs. En effet, bien qu'en théorie un `docker-compose up -d` suffise, il y a quelques cas particuliers. ### Secrets Les secrets, tels que les mots de passe, ne sont évidemment pas présents sur le dépôt. Lorsque des secrets sont utilisés, ils sont **systématiquement** indiqués par la présence de fichiers dans un sous-répertoire `secrets`. Dans ce cas, on copiera tous les fichiers `*.secrets.example` en `*.secrets`, et on remplacera les valeurs. Cette opération n'est nécessaire que lors du premier lancement. Il y a plusieurs situations. #### Mot de passe technique Le mot de passe est "inédit", et ne concerne pas les utilisateurs (comme le mot de passe d'un utilisateur de base de données). On pourra générer un mot de passe avec la commande suivante : ```bash < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-32};echo; ``` #### Mot de passe externe Le mot de passe est connu, par exemple le mot de passe d'un compte LDAP. On le récupérera sur le [[asso:tuto:vaultwarden|vaultwarden]]. #### Mot de passe administratif Le mot de passe est "inédit", mais doit être accessibles aux administrateurs (par exemple le mot de passe d'administration d'Etherpad). On le créera directement dans le [[asso:tuto:vaultwarden|vaultwarden]] (`picapass insert...`) et on le copiera dans le fichier de secrets. ### Création des volumes Si des volumes sont déclarés `external` dans le fichier Compose (ce qui n'est [[technique:docker:good_practices:storage#volumes_docker|pas recommandé]]), il faut les créer manuellement au préalable : ```bash docker volume create ``` ### Opérations manuelles Certains services (comme le serveur mail) nécessitent des opérations manuelles : créer des dossiers, puis générer des clés ou des certificats... Se référer au `README.md` du service.