Running the UniFi controller in an nspawn container
The UniFi controller is an essential part of the Ubiquiti Networks UniFi platform. Getting this controller installed allows you access to metrics, analytics, and features you'd not have otherwise.
I've been on a Ubiquiti Networks tear recently and have been replacing my home gear with theirs and I have to say it's quite nice. The newest addition is an 24 port UniFi switch which is building to my existing 8 port UniFi switch.
This switch will be replacing my old TP-Link (TL-SG108).
After installing the switch, and then reading the manual that came with it, I discovered that I should be running the UniFi controller on a dedicated piece of hardware. Being that I don't want to do run the controller on a dedicated machine, I figured I'd give running it in a container a try. If you've not read my write up on nspawn I'd recommend giving that a read for insight into the basic configuration I'll be running this container within.
Provisioning the container
Create a rootfs for the container.
machinectl clone xenial-base unifi
Generate a unit file for the new container config.
cat > /etc/systemd/nspawn/unifi.nspawn <<EOF [Exec] Boot=on [Network] VirtualEthernet=yes Bridge=br0 EOF
Reload the systemd daemon.
Ensure the container is started at system boot (optional)
systemctl enable systemd-nspawn@unifi
Start the new container.
machinectl start unifi
Installing the UniFi controller
The basic steps can be found here. I'm installing the latest stable UniFi Version 5.
First thing to do is access the container.
machinectl shell root@unifi -- /bin/bash
Now install the unifi controller.
echo unifi > /etc/hostname echo "deb http://www.ubnt.com/downloads/unifi/debian stable ubiquiti" | tee -a /etc/apt/sources.list.d/100-ubnt.list sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 06E85760C0A52C50 apt-get update apt-get -y install unifi
After everything is finished, log-out of the container, and restart it.
machinectl poweroff unifi machinectl start unifi
This should finalize the installation by setting the hostname correctly and giving the system a clean start.
Setting up UniFi in the container
Get the IP address of the container and paste it into a browser. You can retrieve the IP address of the container by simply querying it's status.
machinectl status unifi unifi Since: Mon 2017-04-24 00:06:55 CDT; 11min ago Leader: 9334 (systemd) Service: systemd-nspawn; class container Root: /var/lib/machines/unifi Iface: br0 Address: 172.16.24.215 ...
With the IP in hand paste this into the browser with port 8080 attached. This will bring you to the UniFi setup wizard and redirect you to port 8443. Note you will need to accept the self signed certificate to continue.
Once you've made it through the setup screens, you can access all of the UniFi features from your containerized controller.