如何利用宝塔的Docker功能创建UniFi Controller

1,906次阅读

写简单一点,时间不够,各位自行摸索吧。

宝塔新版不再用docker插件了,所以可以在docker中设置加速地址,这个一定要设置。

拉取镜像:

安装好docker并设置好加速后,不用做其它操作,直接到宝塔的终端里运行:

docker pull mongo:7.0

安装成功后,再运行:

docker pull lscr.io/linuxserver/unifi-network-application:10.3.58-ls130

如果运行时提示:Client.Timeout exceeded while awaiting headers,则加速地址没设置好,完全可以确认是服务器访问镜像仓库的问题。

安装成功的提示应该是类似这样的:

ad1d6026847d: Pull complete 
Digest: sha256:b6421fd6d1c5ded6377b397d8983e2f82e2100dc5123332dcfda2065a472be5b 
Status: Downloaded newer image for mongo:7.0 
docker.io/library/mongo:7.0

现在mongo7.0lscr.io/linuxserver/unifi-network-application:10.3.58-ls130 安装好之后。

创建目录和初始化文件

终端中执行:

mkdir -p /www/docker/unifi/mongo-data
mkdir -p /www/docker/unifi/unifi-data

再执行:

cat > /www/docker/unifi/init-mongo.sh <<'EOF'
#!/bin/bash

if which mongosh > /dev/null 2>&1; then
  mongo_init_bin='mongosh'
else
  mongo_init_bin='mongo'
fi

"${mongo_init_bin}" <<EOF2
use ${MONGO_AUTHSOURCE}
db.auth("${MONGO_INITDB_ROOT_USERNAME}", "${MONGO_INITDB_ROOT_PASSWORD}")

db.createUser({
  user: "${MONGO_USER}",
  pwd: "${MONGO_PASS}",
  roles: [
    "clusterMonitor",
    { db: "${MONGO_DBNAME}", role: "dbOwner" },
    { db: "${MONGO_DBNAME}_stat", role: "dbOwner" },
    { db: "${MONGO_DBNAME}_audit", role: "dbOwner" },
    { db: "${MONGO_DBNAME}_restore", role: "dbOwner" }
  ]
})
EOF2
EOF

然后执行:

chmod +x /www/docker/unifi/init-mongo.sh

终端执行结束。

宝塔Docker操作:

宝塔 Docker → 添加编排

编排名称:unifi

来源:编辑

.env内容:留空

Compose 内容:

services:
  mongo:
    image: mongo:7.0
    container_name: unifi-mongo
    restart: unless-stopped

    environment:
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=root账号
      - MONGO_USER=unifi账号
      - MONGO_PASS=Unifi密码
      - MONGO_DBNAME=unifi
      - MONGO_AUTHSOURCE=admin

    volumes:
      - /www/docker/unifi/mongo-data:/data/db
      - /www/docker/unifi/init-mongo.sh:/docker-entrypoint-initdb.d/init-mongo.sh:ro

  unifi:
    image: lscr.io/linuxserver/unifi-network-application:10.3.58-ls130
    container_name: unifi-controller
    restart: unless-stopped

    depends_on:
      - mongo

    environment:
      - PUID=0
      - PGID=0
      - TZ=Asia/Taipei

      - MONGO_USER=unifi账号
      - MONGO_PASS=Unifi密码
      - MONGO_HOST=mongo
      - MONGO_PORT=27017
      - MONGO_DBNAME=unifi
      - MONGO_AUTHSOURCE=admin

      - MEM_LIMIT=1024
      - MEM_STARTUP=1024

    volumes:
      - /www/docker/unifi/unifi-data:/config

    ports:
      - "8443:8443"
      - "8080:8080"
      - "3478:3478/udp"
      - "10001:10001/udp"
      - "1900:1900/udp"
      - "8843:8843"
      - "8880:8880"
      - "6789:6789"
      - "5514:5514/udp"

然后直接点击“编排”即可。

确认容器:

编排完成后,应该能直接看到两个容器在运行,如果没看到,就终端执行命令:

docker ps

应该能看到:

unifi-controller
unifi-mongo

如果两个容器都在:Up 说明部署成功

访问 UniFi

浏览器访问:https://宝塔服务器IP:8443 ,一定要用https,不能用http。

首次打开会有 HTTPS 自签名证书警告,这是正常的。官方说明默认就是自签名证书。

注册账号,可以不用注册联网账号,进入页面后,应该不用做其它设置修改,就能搜索到AP了。

其它的网络信号之类的就不再描述了,自行设置即可。

AP 搜不到时必须设置这个

Inform Host 设置为:宝塔服务器真实局域网 IP,并启用 Override

因为 Docker 默认会让 UniFi 使用 Docker 内部 IP,而 AP 无法访问这个 IP。

LinuxServer 官方明确要求 Docker 部署时设置可被设备访问的 Inform Host,并且设备通信端口必须使用 8080:8080

如果 AP 仍然不自动出现,可以 SSH 到 AP:

ssh ubnt@AP的IP

然后:

set-inform http://宝塔服务器真实IP:8080/inform

官方文档中也提供了这个手动 Adopt 方法。

Docker对比Windows客户端的优势:

结构:

Centos
├── 宝塔
├── Docker
│ ├── unifi-controller
│ └── unifi-mongo

Windows 10
└── UniFi
├── 系统服务
├── Java
├── MongoDB
└── Windows 系统

UniFi 和 MongoDB 都运行在容器中,和 Windows 10 直接安装相比,隔离性明显更好。

如果 UniFi 出问题,通常可以:

docker restart unifi-controller

MongoDB 出问题:

docker restart unifi-mongo

而不需要重启整个服务器。

上面的编排文件中,MEM_LIMIT=1024 MEM_STARTUP=1024 也就是说 UniFi 启动就申请 1GB 内存。

如果服务器内存不多,例如:2G、4GB。可能就会比较紧张。

建议机器是4核6G的配置,硬盘无所谓了,50G就足够了。

UniFi 官方的最低硬件要求本身就是 2GB RAM,而设备数量和客户端数量增加会提高资源需求。

查看服务器资源的命令:

free -h
docker stats --no-stream

修改容器配置

如果你要修改正在运行的容器,则:

宝塔面板 → 宝塔 Docker → 容器编排 → 点左边列表中的“unifi”,右边就会显示“配置文件”。

修改前先明确:哪些可以改,哪些不要随便改。

以后最常见的修改:修改内存

- MEM_LIMIT=2048
- MEM_STARTUP=1024

LinuxServer 官方将 MEM_LIMIT 定义为 Java 最大内存(MB),MEM_STARTUP 定义为 Java 初始/最小内存(MB)。

其它的代码不要动,另外我觉得对于 6GB RAM的服务器来说,我认为这是比较合理的设置。

修改完成后,点“保存”

然后点“重新编排 / 重新创建”,这个非常重要。

不要只是点击 Docker 容器的“重启”,因为重启容器仍然使用旧配置。

Docker Compose 在配置改变后重新 up 时,会重新创建容器,但挂载的数据会保留。

数据会不会丢失???

只要不删除这两个目录:

MongoDB 数据:/www/docker/unifi/mongo-data

AND

UniFi 配置:/www/docker/unifi/unifi-data

数据就永远存在,所以"删除容器"通常没问题。

但是 rm -rf /www/docker/unifi/ 绝对不要执行。

另外,要养成好习惯,每次修改前先备份

终端执行:

mkdir -p /www/backup/unifi

备份 UniFi:

tar -czf /www/backup/unifi/unifi-data-$(date +%F-%H%M).tar.gz /www/docker/unifi/unifi-data

备份 MongoDB:

tar -czf /www/backup/unifi/mongo-data-$(date +%F-%H%M).tar.gz /www/docker/unifi/mongo-data

重新编排以后一定要检查。

docker ps

要看到:unifi-controller 和 unifi-mongo

然后执行:

docker stats --no-stream

观察内存和CPU状态及用量。

特别注意

绝对不要随便修改:

MONGO_USER
MONGO_PASS
MONGO_HOST
MONGO_PORT
MONGO_DBNAME
MONGO_AUTHSOURCE

LinuxServer 官方说明这些 MongoDB 连接参数主要在首次运行时写入 UniFi 配置,后续单纯修改 Compose 环境变量并不一定会改变已经保存的 UniFi 数据库连接配置。

因此可以随时修改

MEM_LIMIT
MEM_STARTUP
TZ
restart
镜像版本

不建议随便修改

MONGO_USER
MONGO_PASS
MONGO_HOST
MONGO_DBNAME
MONGO_AUTHSOURCE

这就是这套 UniFi Docker 的正确流程。

正文完
 11
沛霖主页
版权声明:本站原创文章,由 沛霖主页 2026-09-02发表,共计4286字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。