Shields.io

gepostet am: 18. November 2025 Hashtags: selfhosted, Docker, Docker-Compose,

Seit Kurzem betreibe ich meinen eigenen Shields-Server für individuell generierte Badges – und das Beste: Er ist auch öffentlich erreichbar unter shieldsio.itsrye.uk

Docker Compose Link zu Überschrift

Falls du etwas Ähnliches einrichten möchtest, findest du hier mein aktuelles docker-compose.yml, mit dem ich den Server betreibe (einmal für ein klassisches Deployment und einmal inklusive einer Cloudflare Tunnel-Integration, um den Dienst ohne direkt exponierte Ports sicher nach außen verfügbar zu machen):

Variante 1: Ohne Cloudflare (direkt über reverse proxy / exposed port) Link zu Überschrift

services:
  shieldsio:
     image: ghcr.io/badges/shields:next
     labels:
       uk.itsrye.autoheal.enable: true
       com.centurylinklabs.watchtower.enable: true
     volumes:
       - ./config.yml:/usr/src/app/config/local.yml:ro
     environment:
       PORT: 9234
       BASE_URL: "https://shieldsio.itsrye.uk"

Diese Variante eignet sich, wenn der Container entweder lokal im Netzwerk verfügbar sein soll oder über einen klassischen Reverse Proxy (z. B. Traefik, Nginx, Caddy) ins Internet geroutet wird.

Variante 2: Mit Cloudflare Tunnel (keine offenen Ports notwendig) Link zu Überschrift

services:
  shieldsio:
     image: ghcr.io/badges/shields:next
     labels:
       uk.itsrye.autoheal.enable: true
       com.centurylinklabs.watchtower.enable: true
     networks:
       - cloudflare-net
     volumes:
       - ./config.yml:/usr/src/app/config/local.yml:ro
     environment:
       PORT: 9234
       BASE_URL: "https://shieldsio.itsrye.uk"
  cloudflared:
    image: cloudflare/cloudflared:latest
    restart: unless-stopped
    mem_limit: 25MB
    command: tunnel run
    networks:
      - cloudflare-net
    links:
      - "shieldsio:shieldsio"
    env_file:
      - path: ./cf.env
        required: true
    labels:
      com.centurylinklabs.watchtower.enable: true
      uk.itsrye.autoheal.enable: true

networks:
  cloudflare-net:
    attachable: false
    labels:
       uk.itsrye.container.connectsTo: Cloudflare

Diese Variante setzt einen zuvor eingerichteten Cloudflare Tunnel voraus (cf.env enthält die Tunnel-Credentials). Vorteil:

  • Kein exposed Port, da Cloudflare die Verbindung initiiert
  • Automatische Absicherung durch Cloudflare
  • Ideal für homelab- oder VPS-Setups ohne öffentlich erreichbare IP