Server-side Google Tag Manager zelf hosten met Docker Compose
Met server-side Google Tag Manager verhuizen je tags van de browser naar een server die jij beheert. Standaard draait Google die server op Cloud Run, en diensten zoals Stape hosten hem voor je en rekenen per verzoek. Google publiceert de tagging-server ook als Docker-image, dus je kunt hem draaien op een Linux-server die je al hebt.
Wat de opzet van Google nodig heeft
De handleiding van Google beschrijft twee containers per GTM-servercontainer. Een preview-server regelt de voorbeeldmodus in Tag Manager. Een tagging-server verwerkt het echte verkeer en heeft het adres van de preview-server nodig. Beide krijgen dezelfde Container Config, een tekst die je uit Tag Manager kopieert.
- Google staat precies één preview-server per container toe.
- De tagging-server heeft HTTPS nodig, bij voorkeur op een subdomein van je eigen site.
- Google vraagt je het image actueel te houden.
Draaien met tagdock
Ik zette dit op voor meerdere sites en herhaalde steeds dezelfde stappen, dus ik heb ze in een script gezet dat tagdock heet. Het schrijft een Docker Compose-bestand met een preview-server en een tagging-server per site, en zet Caddy ervoor voor certificaten van Let's Encrypt.
git clone https://github.com/VincentBorgers/tagdock.git
cd tagdock
cp tagdock.env.example tagdock.env
./tagdock add shop
./tagdock up./tagdock add vraagt om de Container Config en de twee domeinen. Het laat zien bij welke GTM-container de config hoort en waarschuwt als een domein nog niet naar de server wijst. Na ./tagdock up hoort https://sgtm.example.com/healthy ok terug te geven.
Tag Manager koppelen
- Ga in de servercontainer naar Admin > Container Settings en voeg
https://sgtm.example.comtoe onder Server container URLs. - Zet in de webcontainer de parameter
server_container_urlvan je Google-tag op hetzelfde adres.
Draaiende houden
Een van mijn tagging-servers verloor even zijn DNS, kon Google niet bereiken en bleef daarna wekenlang unhealthy. Docker liet hem gewoon draaien, want Docker herstart unhealthy containers niet uit zichzelf. ./tagdock heal herstart ze, en ./tagdock update haalt het nieuwste image op. Allebei werken ze vanuit cron.
*/5 * * * * /opt/tagdock/tagdock heal >/dev/null
30 4 * * 1 /opt/tagdock/tagdock update >/dev/nullWanneer een hostingdienst beter past
Een hostingdienst schaalt de servers voor je en heeft eigen extra functies. Heb je geen eigen server, of wisselt je verkeer sterk, dan kan dat het geld waard zijn. Voor een paar sites op een server die ik al beheer, is zelf draaien goedkoper en weet ik precies wat waar draait.
tagdock is open source onder de MIT-licentie. De code en documentatie staan op GitHub.