services: << service_name >>: image: lscr.io/linuxserver/unifi-network-application:latest container_name: << service_name >> environment: - PUID=<< puid >> - PGID=<< pgid >> - TZ=<< timezone >> - MONGO_USER=unifi - MONGO_PASS=<< mongo_password >> - MONGO_HOST=<< service_name >>-mongo - MONGO_PORT=27017 - MONGO_DBNAME=unifi - MONGO_AUTHSOURCE=admin volumes: - << appdata_dir >>/<< service_name >>/config:/config ports: - "<< port_ui >>:8443" - "<< port_inform >>:8080" - "<< port_stun >>:3478/udp" - "<< port_discovery >>:10001/udp" depends_on: << service_name >>-mongo: condition: service_healthy << service_name >>-mongo-init: condition: service_completed_successfully restart: unless-stopped << service_name >>-mongo: # Vanaf 4.4.19 eist MongoDB ARMv8.2-A; een Pi 4 (Cortex-A72) heeft dat niet # en mongod stopt daar met 'Illegal instruction'. Zie SERVER-71772. De # versie is instelbaar, zodat je op nieuwere hardware hoger kunt. image: mongo:<< mongo_version >> container_name: << service_name >>-mongo environment: # Dezelfde beheerdersnaam als het allereerste sjabloon gebruikte. Zo # passen een vers volume en een volume van een oudere installatie op # dezelfde inloggegevens — ook die van de backup (mongodump). - MONGO_INITDB_ROOT_USERNAME=unifi - MONGO_INITDB_ROOT_PASSWORD=<< mongo_password >> - MONGO_USER=unifi - MONGO_PASS=<< mongo_password >> - MONGO_DBNAME=unifi - MONGO_AUTHSOURCE=admin volumes: - << service_name >>_mongodata:/data/db - ./init-mongo.sh:/docker-entrypoint-initdb.d/init-mongo.sh:ro healthcheck: # Bewust zonder inloggegevens: `ping` mag ook zonder aanmelden. Een # volume dat door een oudere versie van dit sjabloon is aangemaakt kent # de gebruiker 'root' niet, en dan bleef deze container voor altijd # ongezond — waardoor de reparatiecontainer hieronder nooit startte. test: - CMD-SHELL - 'mongo --quiet --eval "db.adminCommand({ ping: 1 })"' # Ruim bemeten voor trage hardware: op een Pi kost het starten van de # mongo-shell zelf al seconden, en de eerste initialisatie op een # SD-kaart duurt langer dan een halve minuut. Op een snelle host is de # container gewoon na de eerste controle gezond. interval: 15s timeout: 20s retries: 10 start_period: 90s restart: unless-stopped << service_name >>-mongo-init: image: mongo:<< mongo_version >> container_name: << service_name >>-mongo-init environment: - MONGO_INITDB_ROOT_USERNAME=unifi - MONGO_INITDB_ROOT_PASSWORD=<< mongo_password >> - MONGO_USER=unifi - MONGO_PASS=<< mongo_password >> - MONGO_HOST=<< service_name >>-mongo - MONGO_PORT=27017 - MONGO_DBNAME=unifi - MONGO_AUTHSOURCE=admin volumes: # De hele stackmap en niet het losse script. Een bind-mount naar een # bestand dat (nog) niet bestaat laat Docker stilzwijgend een lege map # aanmaken; de container stopt dan met "exit 126 — Is a directory" en # blijft dat doen. Een map die er altijd is, kan dat niet overkomen. - ./:/su-stack:ro # Dezelfde map als UniFi zelf: hierin staat system.properties, dat het # image alleen bij de allereerste start schrijft. - << appdata_dir >>/<< service_name >>/config:/unifi-config entrypoint: - /bin/bash - -c - | if [ ! -f /su-stack/init-mongo.sh ]; then echo "FOUT: init-mongo.sh ontbreekt in de stackmap van deze app." echo "Herstel het met: Instellingen wijzigen -> opslaan, dan wordt" echo "het sjabloon opnieuw uitgeschreven." exit 1 fi exec bash /su-stack/init-mongo.sh depends_on: << service_name >>-mongo: condition: service_healthy restart: "no" volumes: << service_name >>_mongodata: