Ubiquiti Unifi Network Application: Unterschied zwischen den Versionen
Zeile 221: | Zeile 221: | ||
docker run -d --name=unifi-network-application -e PUID=1000 -e PGID=1000 -e TZ=Etc/UTC -e MONGO_USER=unifimongouser -e MONGO_PASS=XXXXXXX -e MONGO_HOST=172.17.0.3 -e MONGO_PORT=27017 -e MONGO_DBNAME=unifiDB -e MEM_LIMIT=1024 -e MEM_STARTUP=1024 -e MONGO_TLS= -e MONGO_AUTHSOURCE= -p 8443:8443 -p 3478:3478/udp -p 10001:10001/udp -p 8080:8080 -p 1900:1900/udp -p 8843:8843 -p 8880:8880 -p 6789:6789 -p 5514:5514/udp -v /path/to/data:/config --restart unless-stopped linuxserver/unifi-network-application:latest | docker run -d --name=unifi-network-application -e PUID=1000 -e PGID=1000 -e TZ=Etc/UTC -e MONGO_USER=unifimongouser -e MONGO_PASS=XXXXXXX -e MONGO_HOST=172.17.0.3 -e MONGO_PORT=27017 -e MONGO_DBNAME=unifiDB -e MEM_LIMIT=1024 -e MEM_STARTUP=1024 -e MONGO_TLS= -e MONGO_AUTHSOURCE= -p 8443:8443 -p 3478:3478/udp -p 10001:10001/udp -p 8080:8080 -p 1900:1900/udp -p 8843:8843 -p 8880:8880 -p 6789:6789 -p 5514:5514/udp -v /path/to/data:/config --restart unless-stopped linuxserver/unifi-network-application:latest | ||
− | Jetzt etwas Geduld. Ich war zu schnell und habe im Log | + | Jetzt etwas Geduld. Ich war zu schnell und habe im Log nichts sehen koennen. Aber die UNA benoetigt ein wenig Zeit die MongoDB zu initialisieren. Dann hat auch der Zugriff ueber hhtps://HOSTIP:8443 geklappt. |
Beim Einspielen des Backups hat es allerdings ewig gedauert, bis ich mich entschlossen habe den Vorgang abzubrechen. | Beim Einspielen des Backups hat es allerdings ewig gedauert, bis ich mich entschlossen habe den Vorgang abzubrechen. |
Version vom 3. Februar 2024, 21:23 Uhr
Inhaltsverzeichnis
Allgemeines
Nachdem ich die Erstinstallation von meinen Ubiquiti-WLAN-Netzwerk (Secure Gateway, 4 APs und 1 Bridge) an einem Windows PC vorgenommen habe, empfinde ich es mittlerweile als laestig jedesmal wenn ich im Netzwerk etwas nachschauen moechte den Windowsrechner anzuschalten und den Unifi Network Server, mittlerweile in der Version 8.0.24, zu starten und mich im Browser einzuloggen.
Jedesmal wenn man den Server stoppt.
Zu Anfang gleich was zur Begriffsverwirrung
Die "Kurzbezeichnung" der Managing Software (Streamlined Network Management) ist Network Server. Die Software wird oftmals als Unifi Controller benannt.
Im DockerHub ist folgender Eintrag zum unifi-controller zu finden.
From 2024-01-01 this image will be deprecated and it will no longer be updated. Please migrate to our Unifi Network Application image instead
Interessanterweise hat dieses (auslaufende) Image immer noch deutlich mehr Downloads als das Unifi Network Application Image. Ich benutze natuerlich hier das unifi-network-application Image.
Das Original findet man unter https://ui.com/download/releases/network-server.
Unifi OS
Ganz aktuell ist es seit Version 8 (20.11.2023 V8.0.7) auch moeglich den Server auf UnifiOS-Maschinen (DreamMachine,...) laufen zu lassen. Das werde ich bei Gelegenheit testen. Noch habe ich keine entsprechende Hardware.
Installation auf meinen SmartHome (FHEM) Linux Server
Man benoetigt zum Betrieb eine MongoDB und die Network Application Software. Die MongoDB wird in den Versionen 3.6 bis 4.4 empfohlen. Abgesehen davon, dass alte Versionen oft bei der Installation zicken, ist sie auch in den Reposotories von openSuSE nicht vorhanden.
Da sowohl die MongoDB als auch der Unifi Network Application Server (UNAS) als DockerImage angeboten werden, habe ich diesen Weg eingeschlagen, um den Anpassungproblemen der MongoDB Version und der Java Umgebung für den UNAS aus dem Weg zu gehen.
Da ich bisher noch nicht ernsthaft mit docker gearbeitet hatte, nutze ich gleich die Gelegenheit hier nuetzliche Erfahrungen zu sammeln.
Zu Beginn sind erst einmal nur Downloads zu machen. Zusaetzlich habe ich aber trotz des MongoDB-Docker-Image auch noch die MongoDB native auf dem Server installiert. https://www.mongodb.com/docs/v4.4/tutorial/install-mongodb-on-suse/
Die MongoDB Downloads von mongodb.org waren irgendwie unvollstaendig.
Download
Die MongoDb steht nicht im Linuxserver.io-Fleet (https://fleet.linuxserver.io/) wird aber per pull vom DockerHub geliefert.
docker pull linuxserver/unifi-network-application
docker pull mongo:4.4
Da der UNAS nicht ohne eine funktionierende MongoDB-Installation starten will, kommt sie zuerst dran.
Hier die Doku.
Erste Schritte
Docker Images
Mit
docker images
kann man sich ueber die vorhanden Images ein Bild machen. Dabei koennen ruhig mehrere Images mit gleichem Name, aber unterschiedlichen Versionen (TAG) vorliegen. Die ImageID macht sie eindeutig.
docker image ls
hat die gleiche Wirkung. Mit
docker image help
lassen sich alle Kommandos sehen. Dabei sind erst einmal 2 von besonderem Nutzen.
docker image rm <Image Name>
und
docker image prune
Aus den Images lassen sich jetzt Container erstellen.
Docker Container
MongoDB
Mit
docker run ...
kann man nun aus einem vorhandenen Image einen "laufenden" Container erzeugen, Wenn man will auch mehrere parallel. Neben den vielen Optionen die 'docker run' anbietet, empfehle ich '--name -it'.
Man kann zwar den (eigenen) Namen auch weglassen, dann wird er von docker automatisch per Zufall vergeben, wie z.B. flamboyant_rosalind ;-)
Die beiden Optionen
-i --interactive Keep STDIN open even if not attached -t --tty Allocate a pseudo-TTY
erlauben es aehnlich wie per ssh auf die bash-console des laufenden Containers zu verbinden. Das kann nuetzlich sein, um ein wenig umherzustoebern. Aenderungen an der Installation werden dardurch zwar moeglich aber mangels oft nicht installierter Editoren erschwert und zudem wird eine derartige Anpassung auch nicht empfohlen.
Mit
docker run (-itd) (--name MeineMongoDB) mongo:4.4
kann man nun der Container beim ersten mal starten, da er run auch gleichzeitig erzeugt wird. Der Container laesst sich dann spaeter, nach der Erzeugung, mit
docker container start/stop/restart/stats/.... <name>
bedienen.
Wenn der MongoContainer gestartet wurde, sollte standardmaessig auf Port 27017 eine Kontaktaufnahme gelingen.
Nachdem ich den UnifiDB auf Mongo laufen hatte war dadurch der Standard-Port 27017 belegt. Weitere Test ohne den Port anzupassen waren damit bei laufendem UNAS nicht (mehr) moeglich. Also brauchte wenigstens eine weitere Option naemlich -p:
-p=[] : Publish a container's port or a range of ports to the host format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort Both hostPort and containerPort can be specified as a range of ports. When specifying ranges for both, the number of container ports in the range must match the number of host ports in the range, for example: -p 1234-1236:1234-1236/tcp
When specifying a range for hostPort only, the containerPort must not be a range. In this case the container port is published somewhere within the specified hostPort range. (e.g., `-p 1234-1236:1234/tcp`)
(use 'docker port' to see the actual mapping)
Da ich noch keine Moeglichkeit gefunden habe, wie ich nachtraeglich (nach docker run) das Portmapping veraendern kann, loesche ich kurzerhand den Container und erzeuge ihn neu.
docker run -itd -p 27018:27017 --name mongotestdb mongo:4.4
Nun kommt mongo (MongoDB shell version v4.4.26) auf dem Hostsystem zum Einsatz. Mit
mongo IP:PORT/DBNAME
kann man jetzt die Kontaktaufnahme testen. Vorher brauche ich aber noch die IP des Containers.
docker container inspect mongotestdb
Unter dem Abschnitt "NetworkSettings" finde folgendes.
"NetworkSettings": { "Bridge": "", "SandboxID": "9687d7931fab057018a021244845ece6888ba95341a8daba6fcc361af644bb8f", "HairpinMode": false, "LinkLocalIPv6Address": "", "LinkLocalIPv6PrefixLen": 0, "Ports": { "27017/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "27018" }, { "HostIp": "::", "HostPort": "27018" } ] }, "SandboxKey": "/var/run/docker/netns/9687d7931fab", "SecondaryIPAddresses": null, "SecondaryIPv6Addresses": null, "EndpointID": "5f95ee4da8a744a6c4228d97d6daec11675f6a8a3c653ff23200c6f5980e7d75", "Gateway": "172.17.0.1", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "IPAddress": "172.17.0.4", "IPPrefixLen": 16, "IPv6Gateway": "", "MacAddress": "02:42:ac:11:00:04", "Networks": { "bridge": { "IPAMConfig": null, "Links": null, "Aliases": null, "NetworkID": "fcd1687abcf1e061b8f56fc14c63d103cc76f5dbd4c8584e6d8f1ff50582ac5a", "EndpointID": "5f95ee4da8a744a6c4228d97d6daec11675f6a8a3c653ff23200c6f5980e7d75", "Gateway": "172.17.0.1", "IPAddress": "172.17.0.4", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:11:00:04", "DriverOpts": null } } }
Also probiere ich
mongo 172.17.0.4:27018
und scheitere. Obwohl ich den internen Port (Container) auf den externen Port (Host) umgelenkt habe klappt die Kontaktaufnahme nicht. Erst mit
mongo 172.17.0.4:27017
klappt es. Komisch. Die Portumlenkung scheint sich nur auf den Host zu beziehen, nicht auf die Bridge.
MongoDB shell version v4.4.26 connecting to: mongodb://172.17.0.4:27017/test?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("ab1224d3-543b-46bc-a7d1-8824bc288512") } MongoDB server version: 4.4.26 --- The server generated these startup warnings when booting:
2023-12-25T08:56:12.469+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem 2023-12-25T08:56:14.368+00:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted 2023-12-25T08:56:14.368+00:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never'
--- > show dbs admin 0.000GB config 0.000GB local 0.000GB > db.getSiblingDB("MONGO_DBNAME").createUser({user: "MONGO_USER", pwd: "MONGO_PASS", roles: [{role: "dbOwner", db: "MONGO_DBNAME"}]}); Successfully added user: {
"user" : "MONGO_USER", "roles" : [ { "role" : "dbOwner", "db" : "MONGO_DBNAME" } ]
}
Noch den zweiten Befehl hinterher.
db.getSiblingDB("MONGO_DBNAME_stat").createUser({user: "MONGO_USER", pwd: "MONGO_PASS", roles: [{role: "dbOwner", db: "MONGO_DBNAME_stat"}]});
und schon sind die Vorbereitungen der MongoDB abgeschlossen.
Der Weg ueber mongosh und docker exec waere wohl auch gegangen. [1]
Unifi Network Application
Der Befehl startet den Container.
docker run -d --name=unifi-network-application -e PUID=1000 -e PGID=1000 -e TZ=Etc/UTC -e MONGO_USER=unifimongouser -e MONGO_PASS=XXXXXXX -e MONGO_HOST=172.17.0.3 -e MONGO_PORT=27017 -e MONGO_DBNAME=unifiDB -e MEM_LIMIT=1024 -e MEM_STARTUP=1024 -e MONGO_TLS= -e MONGO_AUTHSOURCE= -p 8443:8443 -p 3478:3478/udp -p 10001:10001/udp -p 8080:8080 -p 1900:1900/udp -p 8843:8843 -p 8880:8880 -p 6789:6789 -p 5514:5514/udp -v /path/to/data:/config --restart unless-stopped linuxserver/unifi-network-application:latest
Jetzt etwas Geduld. Ich war zu schnell und habe im Log nichts sehen koennen. Aber die UNA benoetigt ein wenig Zeit die MongoDB zu initialisieren. Dann hat auch der Zugriff ueber hhtps://HOSTIP:8443 geklappt.
Beim Einspielen des Backups hat es allerdings ewig gedauert, bis ich mich entschlossen habe den Vorgang abzubrechen.
fhem:/opt # docker logs -f unifi-network-application
[migrations] started [migrations] no migrations found ───────────────────────────────────────
██╗ ███████╗██╗ ██████╗ ██║ ██╔════╝██║██╔═══██╗ ██║ ███████╗██║██║ ██║ ██║ ╚════██║██║██║ ██║ ███████╗███████║██║╚██████╔╝ ╚══════╝╚══════╝╚═╝ ╚═════╝
Brought to you by linuxserver.io
───────────────────────────────────────
To support LSIO projects visit: https://www.linuxserver.io/donate/
─────────────────────────────────────── GID/UID ───────────────────────────────────────
User UID: 1000 User GID: 1000 ───────────────────────────────────────
- Waiting for MONGO_HOST 172.17.0.3 to be reachable. ***
Generating 4,096 bit RSA key pair and self-signed certificate (SHA384withRSA) with a validity of 3,650 days
for: CN=unifi
[custom-init] No custom files found, skipping... [ls.io-init] done. org.tuckey.web.filters.urlrewrite.UrlRewriteFilter INFO: destroy called Exception in thread "Thread-9" java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext
at org.springframework.context.support.AbstractRefreshableApplicationContext.getBeanFactory(AbstractRefreshableApplicationContext.java:168) at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1172) at com.ubnt.service.Object.return(Unknown Source) at com.ubnt.ace.Launcher.Ö00000(Unknown Source) at java.base/java.lang.Thread.run(Thread.java:840)
Exception na toll:-((
SoftwareNutzung
Das Backup einspielen hat soweit funktioniert. Meine Netzwerke, WLANs und Devices war sichtbar, aber das ganze Traffic-Reporting funktioniert nicht. Ich vermute ein Netzzugriffsproblem aus dem Container heraus. Mal schauen:-((