- compose-files/network-services/unifi: Full stack (MongoDB + Unifi app) - compose-files/databases/mongodb: Deprecated, kept for reference - playbooks/deploy-unifi-local.yml: Local deployment with resource limits - playbooks/migrate-unifi.yml: Original migration playbook (deprecated) Stack runs locally on network-services (.121) with: - unifi-db: MongoDB 4.4.29 (512M/1CPU) - unifi: Network Application (1G/1CPU) - Proper labels for autoheal and watchtower
169 lines
4.7 KiB
YAML
169 lines
4.7 KiB
YAML
---
|
|
# Unifi Migration Playbook
|
|
# MongoDB -> databases (.81), Unifi app -> network-services (.121)
|
|
#
|
|
# Usage:
|
|
# ansible-playbook playbooks/migrate-unifi.yml --tags=setup-nfs
|
|
# ansible-playbook playbooks/migrate-unifi.yml --tags=stop-old
|
|
# ansible-playbook playbooks/migrate-unifi.yml --tags=deploy
|
|
# ansible-playbook playbooks/migrate-unifi.yml # full migration
|
|
|
|
- name: Setup NFS mount on network-services
|
|
hosts: network-services
|
|
gather_facts: no
|
|
become: yes
|
|
tags: [setup-nfs, deploy]
|
|
tasks:
|
|
- name: Create mount directory
|
|
file:
|
|
path: /mnt/nas/docker
|
|
state: directory
|
|
mode: '0755'
|
|
|
|
- name: Check if NFS already in fstab
|
|
shell: grep -q "192.168.1.251:/volume1/docker" /etc/fstab
|
|
register: fstab_check
|
|
ignore_errors: yes
|
|
changed_when: false
|
|
|
|
- name: Add NFS mount to fstab
|
|
lineinfile:
|
|
path: /etc/fstab
|
|
line: "192.168.1.251:/volume1/docker /mnt/nas/docker nfs defaults 0 0"
|
|
state: present
|
|
when: fstab_check.rc != 0
|
|
|
|
- name: Mount NFS
|
|
shell: mount -a
|
|
changed_when: false
|
|
|
|
- name: Verify mount
|
|
stat:
|
|
path: /mnt/nas/docker/unifi
|
|
register: mount_check
|
|
|
|
- name: Fail if mount not working
|
|
fail:
|
|
msg: "NFS mount failed - /mnt/nas/docker/unifi not accessible"
|
|
when: not mount_check.stat.exists
|
|
|
|
- name: Stop Unifi on docker666
|
|
hosts: docker666
|
|
gather_facts: no
|
|
tags: [stop-old]
|
|
tasks:
|
|
- name: Stop old Unifi stack
|
|
shell: |
|
|
cd /volume1/docker/unifi
|
|
docker compose down
|
|
register: stop_result
|
|
ignore_errors: yes
|
|
|
|
- name: Show result
|
|
debug:
|
|
msg: "{{ stop_result.stdout_lines | default(['Stopped']) }}"
|
|
|
|
- name: Deploy MongoDB on databases
|
|
hosts: databases
|
|
gather_facts: no
|
|
tags: [deploy, deploy-mongo]
|
|
tasks:
|
|
- name: Ensure database network exists
|
|
shell: docker network inspect database >/dev/null 2>&1 || docker network create database
|
|
changed_when: false
|
|
|
|
- name: Create compose directory
|
|
file:
|
|
path: /home/docker/appdata/mongodb
|
|
state: directory
|
|
mode: '0755'
|
|
|
|
- name: Copy MongoDB compose
|
|
copy:
|
|
src: "../compose-files/databases/mongodb/docker-compose.yml"
|
|
dest: /home/docker/appdata/mongodb/docker-compose.yml
|
|
mode: '0644'
|
|
|
|
- name: Deploy MongoDB
|
|
shell: |
|
|
cd /home/docker/appdata/mongodb
|
|
docker compose pull
|
|
docker compose up -d
|
|
|
|
- name: Wait for MongoDB
|
|
shell: |
|
|
for i in $(seq 1 30); do
|
|
if docker exec unifi-db mongo --eval "db.adminCommand('ping')" 2>/dev/null | grep -q "ok"; then
|
|
echo "MongoDB ready"
|
|
exit 0
|
|
fi
|
|
sleep 2
|
|
done
|
|
exit 1
|
|
register: mongo_wait
|
|
changed_when: false
|
|
|
|
- name: Deploy Unifi on network-services
|
|
hosts: network-services
|
|
gather_facts: no
|
|
tags: [deploy, deploy-unifi]
|
|
tasks:
|
|
- name: Ensure proxy network exists
|
|
shell: docker network inspect proxy >/dev/null 2>&1 || docker network create proxy
|
|
changed_when: false
|
|
|
|
- name: Create compose directory
|
|
file:
|
|
path: /root/docker/appdata/unifi
|
|
state: directory
|
|
mode: '0755'
|
|
|
|
- name: Copy Unifi compose
|
|
copy:
|
|
src: "../compose-files/network-services/unifi/docker-compose.yml"
|
|
dest: /root/docker/appdata/unifi/docker-compose.yml
|
|
mode: '0644'
|
|
|
|
- name: Deploy Unifi
|
|
shell: |
|
|
cd /root/docker/appdata/unifi
|
|
docker compose pull
|
|
docker compose up -d
|
|
|
|
- name: Wait for Unifi startup
|
|
pause:
|
|
seconds: 60
|
|
prompt: "Waiting for Unifi to initialize..."
|
|
|
|
- name: Check Unifi status
|
|
shell: docker ps --filter name=unifi --format "table {{'{{'}}.Names{{'}}'}}\t{{'{{'}}.Status{{'}}'}}"
|
|
register: unifi_status
|
|
|
|
- name: Show status
|
|
debug:
|
|
msg: "{{ unifi_status.stdout_lines }}"
|
|
|
|
- name: Migration summary
|
|
hosts: localhost
|
|
gather_facts: no
|
|
tags: [always]
|
|
tasks:
|
|
- name: Next steps
|
|
debug:
|
|
msg:
|
|
- "============================================"
|
|
- "UNIFI MIGRATION SUMMARY"
|
|
- "============================================"
|
|
- "MongoDB: 192.168.1.81:27017"
|
|
- "Unifi: https://192.168.1.121:8443"
|
|
- ""
|
|
- "UPDATE YOUR 4 APs:"
|
|
- " ssh admin@<AP-IP>"
|
|
- " set-inform http://192.168.1.121:8080/inform"
|
|
- ""
|
|
- "Or from Unifi UI: Settings > System > Advanced"
|
|
- " Set 'Inform Host' to: 192.168.1.121"
|
|
- ""
|
|
- "CLEANUP (after APs reconnect):"
|
|
- " ssh docker666 'cd /volume1/docker/unifi && docker compose down'"
|
|
- "============================================"
|