Xibo Digital Signage

Xibo Digital Signage
Photo by Joshua Earle / Unsplash

Der Begriff Digital Signage umschreibt den Einsatz digitaler Medieninhalte bei Werbe- und Informationssystemen wie elektronische Plakate, elektronische Hinweistafeln oder digitale Türbeschilderung im Innen- sowie Außenbereich.

Xibo ist eine professionelle Open Source Digital Signage Software, die als digitales Informationssystem an den verschiedensten Orten eingesetzt werden kann. Xibo steht im GitHub als Docker Image öffentlich zur Verfügung. In diesem Artikel geht es nur um die zentralen Serverdienste und nicht um den Player zur Darstellung der Inhalte.

Leider ist die Konfiguration der Docker Compose Umgebung, die für Xibo bereitgestellt wird, noch auf dem Stand von Docker Compose Version 2. Für mein HomeLab habe ich diese an meine Umgebung mit Traefik und Portainer angepasst und dabei auf Memcached sowie Quickchart verzichtet. Die benötigten Variablen wurden von der Vorlage übernommen und als "stack.env" unter Portainer importiert.

Standardmäßig legt Xibo den Administrator "xibo_admin" mit "password" an, dessen Password als erstes geändert werden sollte.

version: "3.7"

services:
  cms-db:
    # MySQL 5.7 EOL 31.10.2023
    image: mysql:5.7
    restart: unless-stopped
    env_file: 
      - stack.env
    volumes:
      - "db:/var/lib/mysql"
    environment:
      - MYSQL_DATABASE=cms
      - MYSQL_USER=cms
      - MYSQL_RANDOM_ROOT_PASSWORD=yes

  cms-xmr:
    image: ghcr.io/xibosignage/xibo-xmr:0.9
    restart: unless-stopped
    env_file: 
      - stack.env
    ports:
      - "9505:9505"
    deploy:
      resources:
        limits:
          memory: 256M
    networks:
      - default

  cms-web:
    image: ghcr.io/xibosignage/xibo-cms:release-3.3.7
    restart: unless-stopped
    env_file: 
      - stack.env
    links:
      - cms-db:mysql
      - cms-xmr:50001
    depends_on:
      - cms-db
      - cms-xmr
    volumes:
      - "cms:/var/www/cms/custom"
      - "backup:/var/www/backup"
      - "theme:/var/www/cms/web/theme/custom"
      - "library:/var/www/cms/library"
      - "scripts:/var/www/cms/web/userscripts"
      - "certs:/var/www/cms/ca-certs"
    environment:
      - XMR_HOST=cms-xmr
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.xibo.rule=Host(`${CMS_SERVER_NAME}`)"
      - "traefik.http.routers.xibo.entrypoints=websecure"
      - "traefik.http.services.xibo.loadbalancer.server.port=80"
      - "traefik.http.routers.xibo.service=xibo"
      - "traefik.http.routers.xibo.tls.certresolver=leresolver"
      - "traefik.docker.network=proxy"
    networks:
      - proxy
      - default

volumes:
  db:
  cms:
  backup:
  theme:
  library:
  scripts:
  certs:

networks:
  proxy:
    external: true

Bei dieser Lösung wird noch das alte MySQL 5.7 verwendet. Der Webserver des CMS wird über Traefik mit einem Let's Encrypt Zertifikat versorgt und über HTTPS angesprochen, so dass das Volume "certs" leer bleiben kann. Ohne die veraltete Compose Anweisung "links" findet allerdings das CMS den MySQL Server nicht. Das Xibo Message Relay "cms-xmr" öffnet direkt den Port 9505 nach außen.