Unifi Network Application Docker?

我了解基本的 Container Station 並已經部署了幾個容器。不過,Unifi Network Application(目前版本為 10.0.162)需要 MongoDB,還需要初始化資料庫供 Unifi Network Application 使用,並設置使用者名稱和密碼。我的現有環境是 Raspberry PI4B,並且有完整備份。

我的新環境是 TVS-H1688,我正在使用四個 2.5GB/s 介面作為 LACP 聚合組,並且通過兩個 VLAN 進行中繼,VLAN 250 我想用於這個應用,並連接到 Virtual Switch 1。另一個 VLAN(Virtual Switch 5)是我的 IoT VLAN,因為我計劃最終將 Home Assistant 從 Raspberry PI4B 遷移過來。

我現在很困惑該把 YAML 檔案放在哪裡來建立容器,以及該如何決定儲存空間的位置、如何分配 Virtual Switch 1,還有靜態 IP、子網路遮罩、預設閘道和 DNS 伺服器要怎麼設定。

我想應該有人嘗試過這樣的配置。先謝謝大家的協助。

我有一個更簡單的解決方案。如果你在 App Center 的儲存庫中加入 MyQNAP.org,會有一個原生的 Unifi 應用程式可以直接在 QNAP 上運行,無需在 Container(容器)中執行。

進入 App Center 的設定,新增 MyQNAP.org 儲存庫連結:

然後在「系統管理」下,你會找到 UniFi Controller(控制器)應用程式。

效果非常好。

@kahilzinger

我在 DockerHub 上找到了一個 UniFi 的 Docker 映像檔。

我不確定這是否符合你的需求,但我嘗試使用這個 YAML 檔案,在我這邊運作得很順利。

你可以參考看看,並將 $ 內的變數替換成你的 NAS 設定。

version: "3.8"

services:
  unifi:
    image: jacobalberty/unifi:latest
    container_name: unifi-controller
    restart: unless-stopped

    networks:
      qnet-network:
        ipv4_address: ${QNET_STATIC_IP}

    environment:
      TZ: ${TZ}

    volumes:
      - ${SHARE_FOLDER}/unifi:/unifi

networks:
  qnet-network:
    driver_opts:
      iface: ${QNET_INTERFACE}
    driver: qnet
    ipam:
      driver: qnet
      options:
        iface: ${QNET_INTERFACE}
      config:
        - subnet: ${QNET_SUBNET}
          gateway: ${QNET_GATEWAY}

你可以透過 ssh 以及 ifconfig 指令找到 ${QNET_INTERFACE}。

不過請注意,這個容器 / docker 映像檔是第三方應用程式,並非我們 QNAP 的產品,所以需要特別注意資料備份及穩定性。

====

version: "3.8"

services:
  unifi:
    image: jacobalberty/unifi:latest
    container_name: unifi-controller
    restart: unless-stopped

    networks:
      qnet-network:
        ipv4_address: 10.20.80.54

    environment:
      TZ: ${TZ}

    volumes:
      - /share/Container/unifi:/unifi

networks:
  qnet-network:
    driver_opts:
      iface: bond0
    driver: qnet
    ipam:
      driver: qnet
      options:
        iface: bond0
      config:
        - subnet: 10.20.80.0/23
          gateway: 10.20.80.254

我已經嘗試過這個方法,但 tcp/8080 之前被主控台佔用(最近已更改為其他埠),而我不知道 /inform 網頁會使用哪個埠,也不清楚如何將它改成 8080,因為現在我不再使用那個埠了。

有沒有辦法將這個應用程式移到我的其他網卡群組/虛擬交換器?

如果可以的話,我也想使用這個方法。看起來我想用的虛擬交換器是「qvs0」,不過我看到有兩件事情我想要做:

1.) 如何確定 volume(卷)的位置?
2.) 你必須安裝 MongoDB 並初始化它。

如果能找到人幫我做這些,我很樂意付費,因為我想學習,而且我在 Docker 方面是個超級新手,但我覺得未來在家庭自動化領域會經常用到。

以下是我找到並一直在嘗試理解的腳本:


version: “2.1”
services:
unifi-network-application:
image: lscr.io/linuxserver/unifi-network-application:latest
container_name: unifi-network-application
environment:

  • PUID=1000
  • PGID=1000
  • TZ=America/Chicago
  • MONGO_USER=unifi
  • MONGO_PASS=[[password]]
  • MONGO_HOST=unifi-db
  • MONGO_PORT=27017
  • MONGO_DBNAME=unifi
  • MEM_LIMIT=1024 #optional
  • MEM_STARTUP=1024 #optional

- MONGO_TLS= #optional

- MONGO_AUTHSOURCE= #optional

volumes:
  - /home/ubuntu/docker/unifi-controller:/config  <--需要搞清楚這裡的位置。
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
labels:
  - "traefik.enable=true"
  - "traefik.http.routers.unifi.entrypoints=http"
  - "traefik.http.routers.unifi.rule=Host(`unifi.jimsgarage.co.uk`)"
  - "traefik.http.middlewares.unifi-https-redirect.redirectscheme.scheme=https"
  - "traefik.http.routers.unifi.middlewares=unifi-https-redirect"
  - "traefik.http.routers.unifi-secure.entrypoints=https"
  - "traefik.http.routers.unifi-secure.rule=Host(`unifi.jimsgarage.co.uk`)"
  - "traefik.http.routers.unifi-secure.tls=true"
  - "traefik.http.routers.unifi-secure.service=unifi"
  - "traefik.http.services.unifi.loadbalancer.server.port=8443"
  - "traefik.http.services.unifi.loadbalancer.server.scheme=https"
  - "traefik.docker.network=proxy"
networks:  <--這裡要怎麼指定虛擬交換器和靜態 IP 資訊?
  proxy:
  unifi:
restart: unless-stopped

unifi-db:
image: docker.io/mongo:4.4
container_name: unifi-db
volumes:

  • /home/ubuntu/docker/unifi-controller-db:/data/db <–需要搞清楚這裡的位置。
  • /home/ubuntu/docker-compose/unifi-controller/init-mongo.js:/docker-entrypoint-initdb.d/init-mongo.js:ro <–需要搞清楚這裡的位置。
    networks: <–這裡需要靜態 IP 和虛擬交換器嗎?
    unifi:
    restart: unless-stopped

networks:
proxy:
external: true
unifi:

! 以下是初始化 MongoDB 資料庫的 JavaScript
!
! init-mongo.js
! db.getSiblingDB(“unifi”).createUser({user: “unifi”, pwd: “[[password]]”, roles: [{role: “dbOwner”, db: “unifi”}]});
! db.getSiblingDB(“unifi_stat”).createUser({user: “unifi”, pwd: “[[password]]”, roles: [{role: “dbOwner”, db: “unifi_stat”}]});

你真的需要使用預格式化文字區塊。

你需要使用應用程式分頁來匯出你的 compose.yaml。

volumes:hostPath:containerMountPoint

我用檔案瀏覽器建立了一個 docker/ 分享資料夾,所以對我來說一切都是:

[admin@TheVault arcane]# ls /share/docker/*
/share/docker/appdata:
NUTCase         jellyfin        portical-upnpc
arcane          kuma            qbittorrent
homepage        nutify          syncyomi

/share/docker/compose:
basic-app

/share/docker/scripts:
#secrets#

/share/docker/secrets:
#other secrets#

/share/docker/stacks:
NUTCase        homepage       pihole-qnet    qbittorrent    uptime-kuma
arcane         jellyfin       pocket-id      syncyomi       watchtower
dozzle         nutify         portainer-ce   tasmocompiler
[admin@TheVault arcane]#

要有心理準備會遇到 CS 限制,讓你的生活變得麻煩。

但 CS 可以順利啟動 Arcane/Dockge/Portainer,然後你就可以繼續操作了。
長遠來看,這可能會讓你的生活更輕鬆。

需要在 Docker 容器中運行 UniFi 應用程式嗎?如我上面所說,MyQNAP.org 倉庫上已經有 UniFi 控制台的「原生」應用程式。這比設置容器再安裝應用程式要容易得多……

因為8080沒有回應,因為我已經將8080用於主控台,如果可以的話,我會希望它是一個容器。

我會嘗試更好地理解這個。我是那種一旦看到實際操作和運作方式就能學會的人。只是目前還沒有使用 Qnap Container Station 的相關影片。

很抱歉格式有點亂……我回覆時才發現。

如果有人願意協助我建立遠端連線,我願意付費。

如何在 QNAP NAS 上透過 Docker 部署 UniFi Network 應用程式? | QNAP

抱歉。它沒有達到我的預期,但看起來他們已經更新到我在樹莓派(PI)上使用的相同版本了。

當我嘗試安裝該版本時,系統沒有讓我選擇要使用哪一個虛擬交換機。它默認選擇了虛擬交換機5(介面卡1+2+3+4,但標記了VLAN 253,這是我的物聯網(IoT)網路),但這是錯誤的子網。我希望它安裝到虛擬交換機1(介面卡1+2+3+4,未標記)。我沒找到在安裝Mondo和UniFi Network AP時設定要分配哪一組介面卡或哪一個虛擬交換機的方法。如果我能搞清楚這一點,這也許就是解決方案了。

上面已經提到過 Docker 搭配 compose 和 qnet

你應該可以在「網路與虛擬交換器」中更改所使用的虛擬交換器。

我明白這一點,但我的腦袋對於怎麼做就是轉不過來。我願意付費請人幫忙。我蠻擅長看 YouTube 影片,或者看別人怎麼做,然後學起來。不過很可惜的是,YouTube 上就是沒什麼針對 Unifi 伺服器的逐步教學。

我實在不太懂該怎麼更新我的 Tautulli 容器,但我真的很想學會。

創建容器後,打開網路與虛擬交換器。點選下方的「進階」按鈕:

接著前往「虛擬交換器」:

你會看到所有已建立的虛擬交換器與網路。選擇你要的那一個(即含有你的容器的那個),然後點擊右側三個小點。會跳出一個選單——選擇「設定」。之後會開啟新視窗:

選擇你想要用於這個虛擬網路的網卡。我現在已把它從 Adapter 1 切換到 Adapter 3。

檢查這個網路的其他設定,確認沒問題後點擊套用。你的容器網路現在就會走你剛剛選的那張網卡了…

接著,如果要更改 QNAP 的網頁介面預設在 8080 埠的設定,請進入「控制台」>「一般設定」,將系統連接埠改成你想要的號碼。

如果這說明有幫助到你,請讓我知道。

我明白你的意思,你的截圖也很棒,但 Unifi Network 伺服器還需要一個 MongoDB 容器。

應該在你的 YAML 裡面設置好 MongoDB。我看到過一些 YAML 配置中會直接寫 IP。不太確定你具體需要什麼樣的設置。這裡是我用在 Vikunja(會搭配 MariaDB 實例)安裝時用的 YAML:

services:
  vikunja:
    image: vikunja/vikunja:latest
    stdin_open: true
    tty: true
    user: "0:0"
    dns: 192.168.0.4
    environment:
      VIKUNJA_SERVICE_PUBLICURL: http://192.168.0.3:3456
      VIKUNJA_DATABASE_HOST: db
      VIKUNJA_DATABASE_PASSWORD: ********
      VIKUNJA_DATABASE_TYPE: mysql
      VIKUNJA_DATABASE_USER: vikunja
      VIKUNJA_DATABASE_DATABASE: vikunja
      VIKUNJA_SERVICE_JWTSECRET: <a super secure random secret>
      VIKUNJA_SERVICE_ENABLETASKATTACHMENTS: true
      VIKUNJA_SERVICE_ENABLEEMAILREMINDERS: true
      VIKUNJA_MAILER_ENABLED: true
      VIKUNJA_MAILER_AUTHTYPE: login
      VIKUNJA_MAILER_FORCESSL: false
      VIKUNJA_MAILER_SKIPTLSVERIFY: true
      VIKUNJA_MAILER_HOST: IP.IP.IP.IP
      VIKUNJA_MAILER_PORT: 587
      VIKUNJA_MAILER_USERNAME: emailaddy@host.com
      VIKUNJA_MAILER_PASSWORD: some_stupid_password
      VIKUNJA_MAILER_FROMEMAIL: emailaddy@host.com
      VIKUNJA_SERVICE_TIMEZONE: America/Chicago
    ports:
      - 3456:3456
    volumes:
      - /share/Container/vikunja/files:/app/vikunja/files
    depends_on:
      db:
        condition: service_healthy
    restart: unless-stopped
    
  db:
    image: mariadb:10
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    environment:
      MYSQL_ROOT_PASSWORD: **********
      MYSQL_USER: vikunja
      MYSQL_PASSWORD: **********
      MYSQL_DATABASE: vikunja
    volumes:
      - /share/Container/vikunja/db:/var/lib/mysql
    restart: unless-stopped
    healthcheck:
      test: ["CMD-SHELL", "mysqladmin ping -h localhost -u $$MYSQL_USER --password=$$MYSQL_PASSWORD"]
      interval: 2s
      start_period: 30s

這一切都是自動化的。我基本不用做什麼設定……