Table des matières

docker-compose.yml

Castopod > docker compose

Cette configuration définit un ensemble de services Docker qui sont utilisés pour déployer l'application Castopod, une plateforme de gestion de podcasts.

version: "3.7"

services:
  app:
    image: castopod/app:latest
    container_name: "castopod-app"
    volumes:
      - castopod-media:/opt/castopod/public/media
    environment:
      MYSQL_DATABASE: castopod
      MYSQL_USER: castopod
      MYSQL_PASSWORD: changeme
      CP_BASEURL: "https://lesconteslinux.mindcast.fr"
      CP_ANALYTICS_SALT: changeme
      CP_CACHE_HANDLER: redis
      CP_REDIS_HOST: redis
    networks:
      - castopod-app
    restart: unless-stopped

  redis:
    image: redis:7.0-alpine
    container_name: "castopod-redis"
    volumes:
      - castopod-cache:/data
    networks:
      - castopod-app
 
  # this container is optional
  # add this if you want to use the videoclips feature
  video-clipper:
    image: castopod/video-clipper:latest
    container_name: "castopod-video-clipper"
    volumes:
      - castopod-media:/opt/castopod/public/media
    environment:
      MYSQL_DATABASE: castopod
      MYSQL_USER: castopod
      MYSQL_PASSWORD: changeme
    restart: unless-stopped

volumes:
  castopod-media:
  castopod-cache:

networks:
  castopod-app:

Les services déclarés sont les suivants :

1. Le service “app” :

2. Le service “redis” :

3. Le service “video-clipper” (optionnel) :

En outre, la configuration définit deux volumes Docker nommés “castopod-media” et “castopod-cache”, qui sont utilisés pour stocker respectivement les fichiers médias des podcasts et les données de cache de Redis. De plus, un réseau nommé “castopod-app” est créé pour permettre la communication entre les services.

Cette configuration permet donc de déployer l'application Castopod avec une base de données MySQL et une instance Redis pour la gestion du cache.

Concernant les variables à modifier

Voici les variables modifiables présentes dans la section environment de chaque service :

Pour le service “app” :

Pour le service “video-clipper” (optionnel) :

Vous pouvez modifier ces variables en fonction de vos besoins spécifiques en leur attribuant les valeurs souhaitées. Par exemple, vous pouvez changer le nom de la base de données, l'utilisateur et le mot de passe MySQL, ainsi que l'URL de base pour Castopod, le sel pour les analyses. Assurez-vous de respecter les contraintes et les configurations requises par l'application Castopod lors de la modification de ces variables.

Concernant les volumes

Pour définir les volumes dans la configuration Docker Compose, vous utilisez la section volumes du fichier YAML. Voici comment faire :

version: "**3.7"

services:
  app:
    image: castopod/app:latest
    container_name: "**castopod-app"
    volumes:
      - castopod-media:/opt/castopod/public/media
    # ...
  
  redis:
    image: redis:7.0-alpine
    container_name: "**castopod-redis"
    volumes:
      - castopod-cache:/data
    # ...

volumes:
  castopod-media:
  castopod-cache:

Dans cet exemple, nous avons ajouté la section volumes à la fin du fichier YAML. À l'intérieur de cette section, vous déclarez vos volumes en utilisant un nom de volume suivi des deux-points :. Les noms de volume ici sont “castopod-media” et “castopod-cache”.

Ensuite, vous pouvez référencer ces volumes dans la section volumes des services concernés en utilisant la syntaxe <nom du volume>:<chemin du montage dans le conteneur>. Dans l'exemple ci-dessus, le volume “castopod-media” est monté dans le répertoire /opt/castopod/public/media du conteneur du service “app”, et le volume “castopod-cache” est monté dans le répertoire /data du conteneur du service “redis”.

En définissant les volumes de cette manière, Docker va créer les volumes persistants nécessaires pour les conteneurs et les associer à leurs répertoires respectifs à chaque exécution.

N'oubliez pas que si vous avez plusieurs services utilisant les mêmes volumes, ils auront accès aux mêmes données persistantes, ce qui peut être utile pour le partage de données entre les conteneurs.

Voici un exemple de configurations que vous pouvez utiliser pour les volumes “castopod-media” et “castopod-cache” dans votre fichier Docker Compose :

1. Utilisation d'un chemin local sur la machine hôte :

volumes:
  castopod-media:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /chemin/vers/le/dossier/media
  castopod-cache:
    driver: local
    driver_opts:
      type: none
      o: bind
      device: /chemin/vers/le/dossier/cache

Dans cet exemple, nous utilisons des volumes de type “local” pour lier des dossiers locaux sur la machine hôte aux conteneurs. Vous devez remplacer “/chemin/vers/le/dossier/media” et “/chemin/vers/le/dossier/cache” par les chemins réels vers les dossiers que vous souhaitez utiliser pour stocker les données du volume.

2. Utilisation de volumes nommés :

volumes:
  castopod-media:
  castopod-cache:

Dans cet exemple, nous déclarons simplement les volumes “castopod-media” et “castopod-cache” sans spécifier de configuration supplémentaire. Dans ce cas, Docker va créer et gérer les volumes automatiquement dans un emplacement par défaut sur le système de fichiers du système d'hébergement Docker.

Concernant l'option restart

Dans le contexte de la configuration Docker Compose, la ligne restart: unless-stopped est spécifiée pour les services “app” et “video-clipper”.

Lorsque vous utilisez restart: unless-stopped, cela signifie que Docker va automatiquement redémarrer le conteneur en cas d'arrêt, sauf si vous arrêtez explicitement le conteneur manuellement en utilisant une commande Docker, par exemple docker stop castopod-app.

Cela garantit que le conteneur est toujours en cours d'exécution, sauf si vous décidez de l'arrêter de manière explicite. Cela peut être utile pour s'assurer que les services sont toujours disponibles et fonctionnent de manière continue, même après un redémarrage du système ou un arrêt inattendu.

Cette option de redémarrage automatique peut être configurée avec d'autres valeurs, telles que always, on-failure, unless-stopped.