Files
ansible-playbooks/roles/unifi
Clément Désiles 1970564c8f refactor: drop shared-service meta dependencies from service roles
podman, postgres, valkey, and nginx are shared services deployed once
per host. Declaring them in meta/main.yml re-ran them on every service
deploy, adding significant time to targeted runs. Playbooks now list
shared services first (tagged 'infra') and every role entry carries a
group tag plus its own name, so '--tags <role>' deploys just that role.

Roles still fail fast when a shared service is missing (password
asserts, postgresql tasks). Prerequisites are documented in role
READMEs. CLAUDE.md updated to reflect the new convention.
2026-07-04 00:15:50 +02:00
..
2026-07-03 00:09:02 +02:00

UniFi Controller

Deploys the UniFi Network Controller via rootless Podman using the jacobalberty/unifi image (embedded MongoDB, no external DB required).

Configuration

See defaults/main.yml for all variables.

Required variables (inventory)

Variable Description Example
unifi_bind_address LAN IP for AP communication 192.168.2.1

Optional variables

Variable Description Default
unifi_admin_address Bind address for web UI (8443) unifi_bind_address

Set unifi_admin_address to a WireGuard IP to restrict admin access to VPN only while keeping AP ports on the LAN.

# Example: LAN for APs, VPN-only admin
unifi_bind_address: 192.168.2.1     # lan1 — APs reach this
unifi_admin_address: 192.168.20.4   # wg0 — admin via VPN only

Firewall ports

On unifi_bind_address (LAN):

Port Protocol Purpose
8080 TCP Device inform
3478 UDP STUN
10001 UDP AP discovery

On unifi_admin_address (defaults to unifi_bind_address):

Port Protocol Purpose
8443 TCP Web UI

AP adoption

APs on the same L2 network discover the controller automatically via port 10001/udp. For L3 adoption, configure the AP inform URL: http://<unifi_bind_address>:8080/inform.