UniFi's reparatiecontainer mount de stackmap in plaats van het losse script, zodat Docker er geen lege map van kan maken en exit 126 niet meer voorkomt. Bevat ook de snellere image-build. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H9Vcwu7owJZ3nj5dCf4VFT
104 lines
4 KiB
YAML
104 lines
4 KiB
YAML
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:
|