我了解基本的 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 的相關影片。
很抱歉格式有點亂……我回覆時才發現。
如果有人願意協助我建立遠端連線,我願意付費。
抱歉。它沒有達到我的預期,但看起來他們已經更新到我在樹莓派(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
這一切都是自動化的。我基本不用做什麼設定……