Running the UniFi controller in an nspawn container

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).


Getting Started

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

  • Reload the systemd daemon. systemctl daemon-reload

  • 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 stable ubiquiti" | tee -a /etc/apt/sources.list.d/100-ubnt.list
sudo apt-key adv --keyserver --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 
           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

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.