Docker et Drupal

Docker et Drupal

Lundi, Novembre 26, 2018

Le projet woodby docker4drupal est très pratique pour initialiser rapidement un projet Drupal dans docker. Et avec Portainer c'est encore plus simple à gérer !

Créer les containers du projet

  1. Créer un répertoire avec le nom du projet et y copier-coller les fichiers D4D :
    - docker-compose.yml
    - .env
    - Makefile
     
  2. Configurer les fichiers .env puis docker-compose.yml selon les besoins du projet (la documentation de d4d)
    Personnellement j'utilise un seul container traefik et portainer pour tout les projets (voir ci-après). Pour ce faire je commente les définitions de portainer et traefik en fin de fichier docker-compose.yml.
    Pour un multisite drupal voir plus bas Drupal Mutlisites.
     
  3. ouvrir le terminal depuis le dossier et lancer la commande :
    $make up

ceci va initialiser et démarrer les containers du projets

Traefik

J'utilise un seul container Traefik pour tous les projets.
pour cela je place un fichiers traefik.yml au niveau des dossiers projets avec le code suivants :

version: '2'

services:
  traefik:
    image: traefik
    restart: unless-stopped
    command: -c /dev/null --web --docker --logLevel=DEBUG
    networks:
      - project1
      - project2
    ports:
      - '8000:80'
      - '8080:8080'
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

networks:
  project1:
    external:
      name: fbmultimedia_default
  project2:
    external:
      name: alg_default

Ajouter dans ce fichier autant de network que de projet avec name: projectname_default.
Il faudra ensuite (re)initialiser ce container traefik dans Portainer (voir ci-après).

 

Portainer

J'utilise là aussi un seul container Portainer pour gérer les différents projet (et non un portainer/projet) :
Créer un répertoire 'portainer' au même niveau que les projets et qui contient le fichier docker-compose suivant :

version: '2'

services:
  portainer:
    image: portainer/portainer
    ports:
      - "9000:9000"
    command: -H unix:///var/run/docker.sock
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data

volumes:
  portainer_data:


Pour démarrer le container, ouvrir le teminal depuis le dossier portainer et lancer la commande :
docker-compose up -d

Dans le navigateur rdv sur le dashboard de portainer à l'adresse http://localhost:9000
Notre nouveau stack doit apparaitre dans la liste et ses containers sont démarrés.

Ré-initialiser traefik

A chaque nouveau projet ajouté dans traefik.yml il faut re-crée le container traefik pour qu'il intègre ce nouveau network.
Imporant : Le build du stack/container traefik ci-dessous doit se faire après la création+démarrage des containers du projet (voir ci-dessus)

  • Dans la section Stack, commençons par supprimer le stack traefik existant (ceci va supprimer le container associé).
  • Cliquer ensuite sur +Add stack.
  • Nommer le stack 'traefik'
  • pour 'build method' uploader notre fichier trafik.yml.
  • Initialiser le stack.

Le container traefik est maintenant opérationnel et intègre notre nouveau network pour le projet.

 

Drupal multisite

Dans la description du container apache de docker-compose.yml, ajouter à la ligne traefik.frontend.rule les différentes url des sites séparés par des virgules  :

  apache:
    image: wodby/apache:$APACHE_TAG
    container_name: "${PROJECT_NAME}_apache"
    depends_on:
      - php
    environment:
      APACHE_LOG_LEVEL: debug
      APACHE_BACKEND_HOST: php
      APACHE_VHOST_PRESET: php
      APACHE_DOCUMENT_ROOT: /var/www/html/htdocs
    volumes:
      - ./:/var/www/html
# For macOS users (https://wodby.com/stacks/drupal/docs/local/docker-for-mac/)
#      - ./:/var/www/html:cached # User-guided caching
#      - docker-sync:/var/www/html # Docker-sync
    labels:
      - 'traefik.backend=${PROJECT_NAME}_apache'
      - 'traefik.port=80'
      - 'traefik.frontend.rule=Host:${PROJECT_BASE_URL},deltax.docker.localhost'


et dans le fichier sites.php de drupal, les urls doivent être précédé du port de cette façon :

$sites['8000.fb-multimedia.docker.localhost'] = 'fb-multimedia.fr';
$sites['8000.deltax.docker.localhost'] = 'deltax.fr';

 

Accéder au site

(Remplacer ici la variable PROJET_BASE_URL par celle du fichier .env)
Commençons par ajouter une ligne pour le(s) site(s) au fichier /etc/hosts :
127.0.0.1 [PROJECT_BASE_URL]

Le site est maintenant accessible via l'url http:\\[PROJECT_BASE_URL]:8000. AUtrement voir la rubrique Problèmes si dessous.

 

 

 

Problèmes

Erreur

Debuguage

404 page not found
  • Verifier le fichier /etc/hosts
  • Verifier l'url de la ligne traefik.frontend.rule du container apache de docker-compose.yml
Invalid Gateway

Recréer le container traefik pour qu'il intègre le nouveau projet

Forbidden
You don't have permission to access / on this server.
Dans docker-compose vérifier la présence de
APACHE_DOCUMENT_ROOT: /var/www/html/htdocs(ou web)
Vérifier l'intégrité des fichiers drupal (composer install)
The website encountered an unexpected error. Please try again later.

Verifier le settings.php

Le fichier spécifié temporary://filejDmgLA n'a pas pu être copié car le répertoire de destination n'est pas correctement configuré. Cela peut être dû à un problème de permissions sur le fichier ou le répertoire.
dans le container php:
$ sudo chgrp -R 82 sites/default/files
$ sudo chmod -R 775 sites/default/files

ou
$ sudo chown -R wodby:www-data thefolder

il est également possible d'ajouter l'utilisateur www-data au group wodby directement dans le fichier /etc/groups

source

 

Bienvenue sur le blog !

Il s'agissait au départ d'un recueil de notes donc certains billets sont plutôt succincts.
J'espère que vous y trouverez l'info qu'il vous manque dans votre recherche.
Vos commentaires sont les bienvenus.

Bonne lecture !

Mois / Années

Recherche