LinuxServer.io Migration von unifi-controller zu unifi-network-application

Hinweis

Bevor etwas umgestellt wird, solltest du unbedingt ein Backup anlegen.
Dieses sollte über das Unifi Webinterface erstellt und heruntergeladen werden, weil es zum Ende benötigt wird!

Vorwort

Linuxserver.io hat den Support für das Image linuxserver/unifi-controller eingestellt, wie auf der offiziellen Webseite gezeigt wird: https://docs.linuxserver.io/images/docker-unifi-controller/

Deswegen sollten bestehende Installationen auf das neue Image migriert werden. Weil dieses aber keine MongoDB eingebaut hat, muss ein externer Datenbank-Server erstellt werden.

Die Anleitung besteht aus folgenden Schritten:

  1. Backup über das Webinterface erstellen
  2. MongoDB Container erstellen
  3. alten Unifi Container stoppen
  4. neuen Unifi Container erstellen
  5. Backup über Webinterace einspielen

Netzwerk

In dieser Anleitung wird ein eigenes Netzwerk für die MongoDB und den Unifi Controller erstellt.
Durch die festen IP-Adressen kann ein davorgestellter nginx und andere Dienste einfacher konfiguriert werden.

Container IP-Adresse
MongoDB 172.25.0.2
Unifi Controller 172.25.0.3

Die Ports der Anwendungen können entweder in der docker-compose.yml freigegeben werden, oder deine Firewall übernimmt dies, je nach persönlicher Präferenz.
Werden die Port-Freigaben von Docker nicht benötigt, kannst du diese in den docker-compose.yml Dateien einfach entfernen.

Backup erstellen & herunterladen

Hinweis

Das Erstellen des Backups kann je nach Datenmenge etwas dauern

  • Einloggen
  • Einstellung
  • Backup
  • “Backup / Wiederherstellen”
  • Backup herunterladen (& den gewünschten Zeitraum der migriert werden soll wählen)
  • Datei herunterladen

Konfiguration

Beim Unifi-Controller und Init Skript muss noch das Kennwort gesetzt werden, also das “xxxxx” ersetzen!

Docker-Compose
version: "3"
services:
  unifi-db:
    # aktuell ist offiziell Mongo <= 4.4 supported!
    image: docker.io/mongo:4.4
    container_name: unifi-db
    volumes:
      - /srv/docker/containers/unifi-db/db:/data/db
      - /srv/docker/containers/unifi-db/init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro
    restart: unless-stopped
    networks:
      default:
        ipv4_address: 172.25.1.2
    ports:
      - 27017:27017

  unifi-controller:
    image: lscr.io/linuxserver/unifi-network-application:latest
    container_name: unifi-controller
    environment:
      PUID: 1000
      PGID: 1000
      MONGO_USER: "unifi"
      MONGO_PASS: "xxxxxx"
      MONGO_HOST: "172.25.1.2"
      MONGO_PORT: "27017"
      MONGO_DBNAME: "unifi"
      MEM_LIMIT: "1024"
      MEM_STARTUP: "1024"
    volumes:
      - /srv/docker/containers/unifi-controller/config/:/config
    restart: unless-stopped
    networks:
      default:
        ipv4_address: 172.25.1.3
    ports:
      - 8443:8443
      - 3478:3478/udp
      - 10001:10001/udp
      - 8080:8080
      - 1900:1900/udp #optional
      - 8843:8843 #optional
      - 8880:8880 #optional
      - 6789:6789 #optional
      - 5514:5514/udp #optional

networks:
  default:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.25.1.0/24
    driver_opts:
      com.docker.network.bridge.name: br_unifi
MongoDB Init Skript

Erst legen wir den Container Ordner an, damit im Anschluss das Init-Skript angelegt werden kann.
Das Skript legt beim ersten Start die Logindaten des Unifi Controllers an.

PW="xxxxx"

mkdir -p /srv/docker/containers/unifi-db/
cat - > /srv/docker/containers/unifi-db/init-mongo.js <<EOF
db.getSiblingDB("unifi").createUser({user: "unifi", pwd: "${PW}", roles: [{role: "dbOwner", db: "unifi"}]});
db.getSiblingDB("unifi_stat").createUser({user: "unifi", pwd: "${PW}", roles: [{role: "dbOwner", db: "unifi_stat"}]});
EOF
Docker stop / start

Nun muss der alte Unifi Controller gestoppt werden, damit die Ports wieder freigegeben werden.
Danach kann die neue Umgebung hochgefahren werden.

docker stop <unifi-controller>
docker-compose up -d

optional: Reverse Proxy

Sollte ein reverse Proxy wie (nginx, Traefik, …) vor dem Controller stehen, muss das Backend angepasst werden auf 172.25.0.3:8443.
Abweichungen sind allerdings je nach deiner Umgebung durchaus möglich…

Backup einspielen

Nach kurzer Zeit sollte das Webinterface wieder verfügbar sein. Entweder über den Port 8443, oder den Reverse Proxy mit gewohnter URL. Das Portal bietet das Hochladen und Einspielen des Backups an. Hier muss die *.unf Datei, die zu Beginn heruntergeladen wurde, gewählt werden.

Je nach Größe des Backups, kann dies mehrere Minuten dauern.
Die Webseite lädt automatisch neu, wenn die Wiederherstellung durch ist.

LinuxServer.IO - Unifi Controller Image
https://docs.linuxserver.io/images/docker-unifi-network-application/#docker-compose-recommended-click-here-for-more-info