写简单一点,时间不够,各位自行摸索吧。
宝塔新版不再用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.0 和 lscr.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 的正确流程。