Utiliser Laradock avec Traefik (et HTTPS)

October 20, 2018 by Dimi

Other languages: de en

Setup overview

Image 1 : Laradock et traefik

Développer avec Laravel, c’est se sentir bien et à l’aise grâce au bel écosystème. Avec Homestead ou Valet (mais seulement pour Mac) on obtient un environnement de développement prêt à fonctionner. Avec Docker, cependant, il est devenu encore plus confortable, au plus tard avec Laradock. Non seulement les différents services peuvent être activés et désactivés rapidement, mais de nombreuses configurations ou environnements peuvent également être gérés comme avec git. Mais il y a aussi un petit inconvénient ici - vous utilisez localhost:port pour accéder au service respectif. Vous pouvez aussi ajouter quelque chose au fichier hosts (par exemple laradock.local), mais les ports restent. Bien qu’il y ait des entrées dans docker-compose.yml pour proxy, vernis et plus, je me suis demandé pourquoi traefik est absent ici.

Pourquoi cela pourrait nous être très utile, je le décris dans la suite du processus. Mais d’abord, faisons un petit saut au DNS.

DNS

Un site Web ou SaaS est généralement disponible sous un domaine tel que audk.at. S’il s’agit d’un projet de plus grande envergure, il peut également y avoir quelque chose comme testing.audk.at ou staging.audk.at. Localement, cependant, quelque chose comme audk.dev ou audk.local est souvent utilisé. Pourquoi pas *.dev.audk.at en fait? Nous pouvons entrer 127.0.0.1 et aussi travailler avec de vrais certificats Let’s Encrypt! C’est bien, faisons-le.

Pour cela, j’utilise docker pour obtenir un certificat wildcard manuellement via LE.

$ docker run -it --rm --name letsencrypt \
    -v "$PWD/le/config:/etc/letsencrypt" \
    -v "$PWD/le/work:/var/lib/letsencrypt" \
    quay.io/letsencrypt/letsencrypt:latest \
        certonly \
        -d dev.audk.at \
        -d *.dev.audk.at \
        --manual \
        --preferred-challenges dns \
        --server https://acme-v02.api.letsencrypt.org/directory

Une fois que cela est fait avec succès, vous pouvez l’utiliser avec traefik.

Conseil : Si vous avez votre domaine chez certains fournisseurs qui proposent également une API, ce processus peut être automatisé avec traefik.

Traefik

Définissons un docker-composer-compose.yml avec traefik comme notre LB. Ici, nous spécifions également le sous-domaine sous lequel le tableau de bord est accessible.

version: '3'
services:
  traefik:
    image: traefik:latest
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./traefik.toml:/traefik.toml
      - $PWD/le/config/live/dev.audk.at/cert.pem:/cert.pem
      - $PWD/le/config//live/dev.audk.at/privkey.pem:/key.pem
    ports:
      - "80:80"
      - "443:443"
    networks:
      - proxy
    labels:
      - "traefik.port=8080"
      - "traefik.enable=true"
      - "traefik.frontend.rule=Host:lb.dev.audk.at"
      - "traefik.docker.network=proxy"

networks:
  proxy:
    external:
      name: proxy

Conseil : Le réseau proxy a été créé avant que

Laradock

Dès que le LB sera opérationnel, nous pourrons commencer les services individuels avec Laradock. Veuillez noter que vous n’utilisez plus les ports 80/443 dans le .env, car ils sont utilisés par le LB. Mais si nous démarrons maintenant les services comme décrit, cela ne nous aide pas vraiment beaucoup. Sous quel sous-domaine le service individuel tel que nginx ou mailhog serait-il accessible? Tout d’abord, pensez que des changements au docker-compose.yml dans le dossier laradock seraient nécessaires. Cependant, nous vous rappelons que vous pouvez également étendre les configurations. Vous créez donc un docker-compose.override.yml dans le dossier laradock (ou dans votre propre dev-repo, ici vous êtes libre). Le contenu peut ressembler à ceci:

version: '3'

networks:
  proxy:
    external: true

services:

### NGINX Server #####################################################
    nginx:
      networks:
        - proxy
      labels:
        - "traefik.port=80"
        - "traefik.enable=true"
        - "traefik.frontend.rule=Host:api.dev.audk.at"
        - "traefik.docker.network=proxy"
...

Cependant, les services sont maintenant démarrés un peu différemment avec (par exemple) docker-compose -f docker-compose.yml -f docker-compose.override.yml up -d nginx postgres redis mailhog. Maintenant vous pouvez soit ouvrir votre navigateur et taper https://api.dev.audk.at soit accéder à une API via HTTPS avec Postman.

Conseil : Dans docker-compose.override.yml, d’autres services supplémentaires peuvent également être définis, par exemple Keycloak

Copyright © 2018 Dimitrij Klesev | Hucore theme & Hugo