scripts/migration/migrate-ntfy.sh
2026-01-27 01:57:38 +00:00

141 lines
3.8 KiB
Bash
Executable file

#!/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 ==="