UniFi 控制器
![]() 由于以下警告 ⬇️,控制器图像文件不可用(以下链接已失效多年),并且 Alpine Linux 3.9 的支持级别为“无”,因此没有理由再保留这篇文章。(讨论) |

简介
本指南介绍了如何安装通用的 Unix UniFi 控制器,可从 Ubiquiti Networks 获取。 在撰写本文时,尚无可用的原生 Alpine Linux 软件包。
此外,本指南使用极其可靠和高效的 s6 监控套件来启动和控制 UniFi 控制器。
以下是将在文件系统上安装内容的概要示意图。
选择 /srv 作为 UniFi 控制器的根目录是基于它包含运行时和配置数据的事实,因此安装到 /usr/local、/opt 或 /home 似乎不合适。 请随意调整以下步骤,将 /srv/unifi 替换为您希望安装 UniFi 控制器软件的任何位置。
/ `--etc |-- unifi | `-- log |-- srv | `-- unifi | |-- bin | |-- conf | |-- data | |-- dl | |-- lib | |-- logs | |-- run | `-- webapps |-- run | `-- openrc | `-- s6-scan | `-- unifi --> /etc/unifi `-- var `-- log `-- unifi
先决条件软件包
OpenJDK 8 JRE
从 community 仓库安装 openjdk8-jre
。
编辑 /etc/apk/repositories
并取消注释适用于您的 Alpine 版本的 community 仓库
http://host.name/alpine_version/community
更新软件包缓存。
apk update
安装软件包。
apk add openjdk8-jre
MongoDB
安装 MongoDB
apk add mongodb
s6
安装 s6
apk add s6
,这是一个服务监控套件,用于可靠和高效地启动、停止和保持服务运行。
下面显示了 UniFi 控制器如何通过 s6 启动和监控的示意性进程树。 控制器是用 Java 编写的,因此有 Java 进程,它反过来启动 MongoDB 的专用实例来存储其配置和运行时数据。
init `-- s6-svscan `-- s6-supervise |-- s6-log `-- java `-- mongod
安装 UniFi 控制器
创建 unifi
用户和组。
adduser -D -H -h /srv/unifi unifi
切换到您希望在其中安装 UniFi 控制器的父文件夹。
cd /srv
下载您希望安装的 VERSION
的通用 unix 归档文件。
wget https://www.ubnt.com/downloads/unifi/VERSION/UniFi.unix.zip
[死链]
解压归档文件。
unzip UniFi.unix.zip
重命名解压后的目录。
mv UniFi unifi
更改所有权。
chown -R unifi:unifi unifi
锁定权限。
chmod o-rwx unifi
进入 UniFi bin 目录。
cd /srv/unifi/bin
删除现有文件。
rm mongod
创建到 /usr/bin/mongod
的符号链接
ln -s /usr/bin/mongod
配置服务管理
创建 UniFi 服务目录和文件
为 UniFi 创建 s6 服务目录。
mkdir -p /etc/unifi/log
添加 run
脚本,使用您喜欢的编辑器。
vim /etc/unifi/run
复制并粘贴以下内容。
#!/bin/ash user='unifi' group='unifi' exec 2>&1 base='/srv/unifi' if [ -d $base ]; then cd $base chown -R $user:$group . version=`head -1 webapps/ROOT/app-unifi/.version` echo "Starting UniFi Controller $version" exec s6-setuidgid $user java -jar lib/ace.jar start else echo "Missing $base ... aborting" touch down fi
确保 run
脚本是可执行的
chmod 755 /etc/unifi/run
添加 log/run
脚本,使用您喜欢的编辑器。
vim /etc/unifi/log/run
复制并粘贴以下内容。
#!/bin/ash log_user='log' exec s6-setuidgid $log_user s6-log -b n20 s1000000 t /var/log/unifi
确保 log/run 脚本是可执行的
chmod 755 /etc/unifi/log/run
创建日志用户和目录
创建 log
用户和组。
adduser -D -H -h /var/log log
创建 /var/log/unifi
目录
mkdir -p /var/log/unifi
更新目录所有权。
chown log:log /var/log/unifi
锁定权限。
chmod 750 /var/log/unifi
创建 OpenRC 服务脚本
使用您喜欢的编辑器打开脚本文件。
vim /etc/init.d/unifi
粘贴以下内容。
#!/sbin/openrc-run name="unifi" supervisor=s6 s6_service_path="${RC_SVCDIR}/s6-scan/${name}" depend() { need net s6-svscan after firewall } start_pre() { if [ ! -L "${RC_SVCDIR}/s6-scan/${name}" ]; then ln -s "/etc/${name}" "${RC_SVCDIR}/s6-scan/${name}" fi }
确保脚本是可执行的。
chmod 755 /etc/init.d/unifi
启动 UniFi 控制器服务
rc-service unifi start
配置 UniFi 控制器服务在启动时运行
rc-update add unifi boot
简单备份脚本
使用您喜欢的编辑器创建 /usr/local/bin/unifi-backup
。
注意: 此脚本假定使用 s6-svc 来控制 unifi。 我会在稍后修改它,以改用 rc-service。
将以下内容粘贴到文件中。
#!/bin/ash conf_dir='/etc/unifi' backup_dir='/srv/backup/unifi' service_dir='/run/openrc/s6-scan/unifi' start_state='down' if s6-svok $service_dir; then if s6-svstat -o up,ready $service_dir | grep -q true; then echo 'Stopping the UniFi Controller' start_state='up' s6-svc -d $service_dir sleep 3 fi else echo 'Warning: The UniFi Controller is not supervised' exit 1 fi if s6-svstat -o up $service_dir | grep -q false; then echo 'Success: The UniFi Controller was stopped' else echo 'Error: The UniFi Controller is still running' exit 1 fi stamp=`date +%Y-%m-%d_%H%M%S` mkdir -p $backup_dir cd $backup_dir mkdir "data-$stamp" echo "Backing up to /srv/backup/unifi/data-$stamp.tar.gz" if rsync -az /srv/unifi/data/ "data-$stamp"; then echo '* rsync succeeded' if tar czf "data-$stamp.tar.gz" "data-$stamp"; then echo '* tar succeeded' rm -rf "data-$stamp" echo 'Backup succeeded' else echo 'Backup failed: tar failed' exit 1 fi fi if [ "$start_state" == 'up' ]; then echo 'Starting the UniFi Controller' s6-svc -u $service_dir sleep 5 s6-svstat $service_dir fi