Sign inSign up

blitzrk/unifi-controller

By blitzrk

•Updated over 8 years ago

Arch Linux based Unifi Controller for GCE with separate MongoDB service

Image
0

252

blitzrk/unifi-controller repository overview

⁠UniFi Controller

⁠Setup for GCE (Free Tier)

  • Create an instance of Container-Optimized OS (f1-micro is fine)
  • Set VPC Network firewall rules to open tcp:8880; tcp:8443; tcp:8843; tcp:8080 on 0.0.0.0/0 ingress
  • Configure services for startup by setting metadata (see below)
  • Reset instance
⁠Configure Services

Run locally or set custom metadata in UI:

$ cat <<-EOF > init
#cloud-config

write_files:
- path: /etc/systemd/system/mongodb.service
  permissions: 0644
  owner: root
  content: |
    [Unit]
    Description=MongoDB Database Service
    After=syslog.target network.target

    [Service]
    ExecStart=/usr/bin/docker run --rm --init -v /home/mongodb:/data/db -p 27017:27017/tcp --name mongodb mongo:3.6.3
    ExecStop=/usr/bin/docker stop mongodb
    ExecStopPost=/usr/bin/docker rm mongodb
- path: /etc/systemd/system/unifi.service
  permissions: 0644
  owner: root
  content: |
    [Unit]
    Description=UniFi Controller Service
    After=syslog.target network.target mongodb.service

    [Service]
    ExecStart=/usr/bin/docker run --rm --init -v /home/unifi:/var/lib/unifi/data --net host --name unifi blitzrk/unifi-controller
    ExecStop=/usr/bin/docker stop unifi
    ExecStopPost=/usr/bin/docker rm unifi

runcmd:
- systemctl daemon-reload
- systemctl start mongodb.service
- systemctl start unifi.service
- iptables -w -A INPUT -p tcp --match multiport --dports 8080,8443,8880,8843 -j ACCEPT
EOF

$ gcloud compute instances add-metadata $INSTANCE --metadata-from-file user-data=./init

⁠Dockerfile

FROM base/archlinux

# Install Unifi Controller
RUN set -x; \
        pacman -Sy --noconfirm sudo base-devel git go fontconfig jre8-openjdk-headless; \
        echo '%wheel ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers; \
        useradd -m -s /bin/bash unifi; \
        usermod -a -G wheel unifi; \
        sudo -H -u unifi go get github.com/Jguer/yay; \
        sudo -H -u unifi bash -c "\
                cd && ./go/bin/yay -G unifi && \
                cd unifi && \
                sed -i \"s|'mongodb' ||\" ./PKGBUILD && \
                makepkg -i --noconfirm && \
                cd .. && \
                rm -rf unifi"; \
        rm -rf /home/unifi/go; \
        bash -c 'pacman -R --noconfirm $(comm -23 <(pacman -Qq | sort) <((for i in unifi $(pacman -Qqg base); do pactree -ul "$i"; done) | sort -u))'; \
        yes | pacman -Scc

WORKDIR /usr/lib/unifi

COPY docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
CMD ["/usr/bin/java", "-jar", "/usr/lib/unifi/lib/ace.jar", "start"]
⁠docker-entrypoint.sh
#!/bin/bash
set -euo pipefail

if [ ! -f /usr/lib/unifi/data/system.properties ]; then
  {
                echo "uuid=$(uuidgen)";
                echo "db.mongo.local=false";
                echo "db.mongo.uri=mongodb://localhost:27017/unifi-test";
                echo "statdb.mongo.uri=mongodb://localhost:27017/unifi-test_stat";
                echo "unifi.db.name=unifi-test";
        } > /usr/lib/unifi/data/system.properties
fi

echo "Running" "$@"
exec "$@"

Tag summary

Content type

Image

Digest

Size

311.2 MB

Last updated

over 8 years ago

docker pull blitzrk/unifi-controller