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