Compose-bestanden en platformregels
Op het tabblad Advanced van een stack staan het compose-bestand (docker-compose.yml) en de variabelen (.env) als tekst. Daar wijzigt u wat het sjabloonformulier niet kent: een extra service, een ander image, een extra domeinnaam.

Opslaan, valideren, proefdraaien
Section titled “Opslaan, valideren, proefdraaien”- Save controleert het bestand en bewaart het als nieuwe revisie. Er verandert niets aan wat draait tot u op Deploy drukt.
- Validate controleert zonder op te slaan: YAML-syntaxis, het compose-schema en de platformregels, met uw variabelen ingevuld.
- Dry run slaat op en simuleert de deploy zonder iets te veranderen.
- Pull images only slaat op en haalt de images alvast op zonder te herstarten.
Een geweigerd bestand noemt elke gebroken regel; er wordt dan niets opgeslagen.
Variabelen
Section titled “Variabelen”Het bestand .env bevat regels KEY=value; het compose-bestand verwijst ernaar met ${KEY}. Bij een stack uit een sjabloon worden de regels van het formulier door het formulier beheerd; extra regels die u zelf toevoegt blijven staan. Een variabele bereikt een container alleen als het compose-bestand haar doorgeeft (onder environment:).
De platformregels
Section titled “De platformregels”Elk compose-bestand wordt bij het opslaan getoetst, wie het ook opslaat (ook technici en assistenten). De regels houden de server veilig en de stacks van elkaar gescheiden:
| Niet toegestaan | Waarom |
|---|---|
privileged, cap_add, devices, security_opt, sysctls, userns_mode, pid, ipc, cgroup, een eigen runtime |
Geven een container rechten op de server zelf. |
network_mode: host of het netwerk van een andere container, volumes_from |
Doorbreken de scheiding tussen stacks. |
| De Docker-socket mounten | Is root op de server. |
Bind mounts buiten de map van de stack (behalve /opt/hddeploy/sites/{stack}), de hele stackmap, of de git-checkout |
Een container mag alleen zijn eigen bestanden zien. Bouw een image van de checkout in plaats van hem te mounten. |
ports: (poorten rechtstreeks naar buiten) |
Al het verkeer loopt via de web gateway, die HTTPS en de toegangslijsten regelt. Alleen een technicus kan dit per stack toestaan. |
build: met een andere context dan ./source, extra bouwcontexten, een Dockerfile buiten de context |
Bouwen gebeurt uit de beheerde broncode. |
Externe netwerken anders dan hddeploy, externe volumes, volumes met driver_opts |
Kunnen bij andere stacks of willekeurige paden komen. |
include en extends |
Alles wat een stack draait, staat in zijn eigen bestand. |
| Een Traefik-router die de naam van het portaal claimt | Zou het portaal onbereikbaar maken. |
Heeft uw applicatie echt iets uit deze lijst nodig, vraag dan HD Services. Een technicus kan per stack “WAN-poorten toestaan” of een uitzondering op de regels zetten; dat wordt vastgelegd.
Bereikbaar maken via de web gateway
Section titled “Bereikbaar maken via de web gateway”Een service wordt bereikbaar op een domeinnaam met Traefik-labels. Het patroon uit de sjablonen:
services: web: image: nginx:stable restart: unless-stopped labels: - traefik.enable=true - traefik.http.routers.mijnapp.rule=Host(`www.voorbeeld.nl`) - traefik.http.routers.mijnapp.entrypoints=websecure - traefik.http.routers.mijnapp.tls.certresolver=letsencrypt - traefik.http.services.mijnapp.loadbalancer.server.port=80 networks: - hddeploy
networks: hddeploy: external: trueHost(...)mag meerdere namen hebben:Host(`www.voorbeeld.nl`) || Host(`voorbeeld.nl`). Elke naam heeft een DNS A-record nodig; het certificaat komt vanzelf.loadbalancer.server.portis de poort waarop de container zelf luistert.- Hangt een service aan meer dan één netwerk (bijvoorbeeld ook een intern netwerk met de database), zet dan
traefik.docker.network=hddeployerbij, anders kiest de gateway soms het verkeerde netwerk en blijven verzoeken hangen. - Een pad doorsturen in plaats van een hele host:
Host(`www.voorbeeld.nl`) && PathPrefix(`/api`).
Eenmalige taken
Section titled “Eenmalige taken”Een container die één taak uitvoert en dan stopt (een databasemigratie, het aanmaken van mappen) hoort restart: "no" te hebben, idempotent te zijn, met code 0 te eindigen als het werk al gedaan is en met een andere code bij een echte fout. Het portaal herkent zulke containers als “Finished” of “Failed” en rekent ze niet als gestopte service.
:latest
Section titled “:latest”Een image zonder vaste versie (:latest) verandert bij elke deploy ongemerkt. Gebruik een versie, of zet Nightly update aan zodat het bewust elke nacht gebeurt.