#!/bin/bash # ntfy Migration Script # Target: network-services (.121) # Run this on the control server (CT 127) set -e COMPOSE_DIR=~/clustered-fucks/compose-files/network-services/ntfy PLAYBOOK_DIR=~/clustered-fucks/playbooks echo "=== ntfy Migration Script ===" echo "Target: network-services (.121)" echo "⚠️ CRITICAL: This is your notification hub - expect brief cluster-wide notification outage" echo "" # Create directories mkdir -p "$COMPOSE_DIR" mkdir -p "$PLAYBOOK_DIR" # Create docker-compose.yml cat > "$COMPOSE_DIR/docker-compose.yml" << 'EOF' services: ntfy: image: binwiederhier/ntfy:latest container_name: ntfy command: serve environment: - NTFY_BASE_URL=https://ntfy.3ddbrewery.com - NTFY_BEHIND_PROXY=true volumes: - ./data:/var/lib/ntfy - ./cache:/var/cache/ntfy ports: - "6741:80" restart: unless-stopped networks: - proxy deploy: resources: limits: memory: 256M cpus: '0.5' labels: - "autoheal=true" - "com.centurylinklabs.watchtower.enable=true" networks: proxy: external: true EOF echo "✅ Created $COMPOSE_DIR/docker-compose.yml" # Create Ansible playbook cat > "$PLAYBOOK_DIR/deploy-ntfy.yml" << 'EOF' --- - name: Deploy ntfy to network-services hosts: network-services vars: service_name: ntfy service_dir: "{{ docker_appdata }}/{{ service_name }}" compose_src: "{{ playbook_dir }}/../compose-files/network-services/{{ service_name }}" tasks: - name: Create service directory ansible.builtin.file: path: "{{ service_dir }}" state: directory mode: '0755' - name: Create data subdirectory ansible.builtin.file: path: "{{ service_dir }}/data" state: directory mode: '0755' - name: Create cache subdirectory ansible.builtin.file: path: "{{ service_dir }}/cache" state: directory mode: '0755' - name: Copy docker-compose.yml ansible.builtin.copy: src: "{{ compose_src }}/docker-compose.yml" dest: "{{ service_dir }}/docker-compose.yml" mode: '0644' - name: Pull latest image community.docker.docker_image: name: binwiederhier/ntfy:latest source: pull force_source: yes - name: Deploy container community.docker.docker_compose_v2: project_src: "{{ service_dir }}" state: present pull: missing EOF echo "✅ Created $PLAYBOOK_DIR/deploy-ntfy.yml" echo "" echo "=== FILES CREATED ===" echo " - $COMPOSE_DIR/docker-compose.yml" echo " - $PLAYBOOK_DIR/deploy-ntfy.yml" echo "" echo "=== MIGRATION STEPS ===" echo "" echo "1. STOP OLD CONTAINER:" echo " ssh alien 'docker stop ntfy'" echo "" echo "2. RSYNC DATA (run from network-services):" echo " ssh network-services" echo " sudo mkdir -p /home/docker/appdata/ntfy/{data,cache}" echo " sudo rsync -avP maddox@alien:/home/maddox/docker/appdata/ntfy/ /home/docker/appdata/ntfy/data/" echo " sudo rsync -avP maddox@alien:/home/maddox/docker/appdata/ntfy/cache/ /home/docker/appdata/ntfy/cache/" echo " exit" echo "" echo "3. DEPLOY:" echo " ansible-playbook playbooks/deploy-ntfy.yml" echo "" echo "4. VERIFY:" echo " curl -s http://192.168.1.121:6741/v1/health" echo " # Test notification:" echo " curl -d 'Migration test' http://192.168.1.121:6741/test-migration" echo "" echo "5. UPDATE TRAEFIK (on alien):" echo " # Change ntfy backend from 192.168.1.252:6741 to 192.168.1.121:6741" echo "" echo "6. VERIFY EXTERNAL ACCESS:" echo " curl -d 'External test' https://ntfy.3ddbrewery.com/test-migration" echo "" echo "7. CLEANUP:" echo " ssh alien 'docker rm ntfy'" echo "" echo "8. COMMIT:" echo " git add -A && git commit -m 'Migrate ntfy to network-services (.121)' && git push" echo "" echo "=== DONE ==="