Le "routing" est la capacité d'exposer un conteneur sur une URL accessible publiquement. Cela se configure dans le fichier docker-compose.yml, au niveau de chaque conteneur. Protocode propose deux méthodes pour gérer cette exposition :
Si un conteneur dispose d'une variable VIRTUAL_HOST
, Protocode génèrera automatiquement une URL de prévisualisation:
version: "3"
services:
app:
image: "node:16"
environment:
VIRTUAL_HOST: "app-my-repository.${ENVIRONMENT_URL}"
Peu importe la valeur saisie dans la variable VIRTUAL_HOST, elle sera remplacée lors de la construction de l'environnement en fonction de l'url du serveur qui l'hébergera.
Si un conteneur spécifie une allocation de port sur la machine hôte, Protocode générera également une URL de prévisualisation :
version: "3"
services:
app:
image: "node:16"
ports:
- "8080:8080"
Une particularité est à noter. Bien que votre configuration alloue un port de la machine hôte à votre conteneur, l'url qui sera générée par Protocode sera toujours sur le port 443. L'environnement redirigera ensuite cet appel en interne vers le port attendu par le conteneur.
Protocode construit les URLs des conteneurs selon la convention suivante :
NOM_DU_SERVICE
-SLUG_DU_REPOSITORY
.URL_DE_L_ENVIRONNEMENT
Les deux premières parties sont déductibles facilement :
githost.ext/me/my-repository.git
, le slug sera my-repository
.La dernière partie, URL_DE_L_ENVIRONNEMENT, est déterminée dynamiquement par Protocode et peut varier en fonction de plusieurs paramètres (namespace de l’environnement, serveur, etc.). Elle est néanmoins accessible dans chaque environnement via la variable d’environnement ENVIRONMENT_URL
.
Si un service doit communiquer avec un autre (par exemple, un frontend et une API), il peut utiliser ENVIRONMENT_URL pour construire dynamiquement les URLs :
# Dans le fichier docker-compose d'un repository githost.ext/me/my-repository.git
version: "3"
services:
api:
image: "php:8.0"
environment:
VIRTUAL_HOST: "api-my-repository.${ENVIRONMENT_URL}" # L'API doit être exposée
FRONT_URL: "front-my-repository.${ENVIRONMENT_URL}" # Elle a besoin de l'URL du frontend
front:
image: "node:16"
environment:
VIRTUAL_HOST: "front-my-repository.${ENVIRONMENT_URL}" # Le frontend doit être exposé
API_URL: "api-my-repository.${ENVIRONMENT_URL}" # Il a besoin de l'URL de l'API