scripts/migration/migrate-jellyseer-watchstate.yml
2026-01-27 01:57:38 +00:00

195 lines
5.3 KiB
Bash
Executable file

#!/bin/bash
# Watchstate + Jellyseerr Migration Script
# Target: replicant (.80)
# Run this on the control server (CT 127)
set -e
echo "=== Watchstate + Jellyseerr Migration Script ==="
echo "Target: replicant (192.168.1.80)"
echo ""
# ============================================
# WATCHSTATE
# ============================================
WATCHSTATE_COMPOSE_DIR=~/clustered-fucks/compose-files/replicant/watchstate
PLAYBOOK_DIR=~/clustered-fucks/playbooks
mkdir -p "$WATCHSTATE_COMPOSE_DIR"
mkdir -p "$PLAYBOOK_DIR"
cat > "$WATCHSTATE_COMPOSE_DIR/docker-compose.yml" << 'EOF'
services:
watchstate:
image: ghcr.io/arabcoders/watchstate:latest
container_name: watchstate
user: "1000:1000"
environment:
- TZ=America/Indiana/Indianapolis
volumes:
- ./config:/config:rw
ports:
- "8585:8080"
restart: unless-stopped
networks:
- proxy
deploy:
resources:
limits:
memory: 512M
cpus: '1.0'
labels:
- "autoheal=true"
- "com.centurylinklabs.watchtower.enable=true"
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:8080/v1/api/system/healthcheck || exit 1"]
interval: 30s
timeout: 10s
retries: 3
networks:
proxy:
external: true
EOF
echo "✅ Created $WATCHSTATE_COMPOSE_DIR/docker-compose.yml"
cat > "$PLAYBOOK_DIR/deploy-watchstate.yml" << 'EOF'
---
- name: Deploy Watchstate to replicant
hosts: replicant
vars:
service_name: watchstate
service_dir: /home/maddox/docker/appdata/{{ service_name }}
compose_src: "{{ playbook_dir }}/../compose-files/replicant/{{ service_name }}"
tasks:
- name: Create service directory
ansible.builtin.file:
path: "{{ service_dir }}"
state: directory
mode: '0755'
- name: Create config subdirectory
ansible.builtin.file:
path: "{{ service_dir }}/config"
state: directory
owner: "1000"
group: "1000"
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: Deploy container
community.docker.docker_compose_v2:
project_src: "{{ service_dir }}"
state: present
pull: always
EOF
echo "✅ Created $PLAYBOOK_DIR/deploy-watchstate.yml"
# ============================================
# JELLYSEERR
# ============================================
JELLYSEERR_COMPOSE_DIR=~/clustered-fucks/compose-files/replicant/jellyseerr
mkdir -p "$JELLYSEERR_COMPOSE_DIR"
cat > "$JELLYSEERR_COMPOSE_DIR/docker-compose.yml" << 'EOF'
services:
jellyseerr:
image: fallenbagel/jellyseerr:latest
container_name: jellyseerr
environment:
- LOG_LEVEL=info
- TZ=America/Indiana/Indianapolis
volumes:
- ./config:/app/config
ports:
- "5055:5055"
restart: unless-stopped
networks:
- proxy
deploy:
resources:
limits:
memory: 1G
cpus: '1.0'
labels:
- "autoheal=true"
- "com.centurylinklabs.watchtower.enable=true"
networks:
proxy:
external: true
EOF
echo "✅ Created $JELLYSEERR_COMPOSE_DIR/docker-compose.yml"
cat > "$PLAYBOOK_DIR/deploy-jellyseerr.yml" << 'EOF'
---
- name: Deploy Jellyseerr to replicant
hosts: replicant
vars:
service_name: jellyseerr
service_dir: /home/maddox/docker/appdata/{{ service_name }}
compose_src: "{{ playbook_dir }}/../compose-files/replicant/{{ service_name }}"
tasks:
- name: Create service directory
ansible.builtin.file:
path: "{{ service_dir }}"
state: directory
mode: '0755'
- name: Create config subdirectory
ansible.builtin.file:
path: "{{ service_dir }}/config"
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: Deploy container
community.docker.docker_compose_v2:
project_src: "{{ service_dir }}"
state: present
pull: always
EOF
echo "✅ Created $PLAYBOOK_DIR/deploy-jellyseerr.yml"
echo ""
echo "=========================================="
echo "=== MIGRATION STEPS ==="
echo "=========================================="
echo ""
echo "--- WATCHSTATE ---"
echo "1. STOP: ssh alien 'docker stop watchstate'"
echo "2. RSYNC: ssh replicant"
echo " rsync -avP maddox@alien:/home/maddox/docker/appdata/watchstate/ /home/maddox/docker/appdata/watchstate/config/"
echo "3. DEPLOY: ansible-playbook playbooks/deploy-watchstate.yml"
echo "4. VERIFY: curl http://192.168.1.80:8585/v1/api/system/healthcheck"
echo ""
echo "--- JELLYSEERR ---"
echo "5. STOP: ssh alien 'docker stop jellyseerr'"
echo "6. RSYNC: ssh replicant"
echo " rsync -avP maddox@alien:/home/maddox/docker/appdata/jellyseerr/ /home/maddox/docker/appdata/jellyseerr/config/"
echo "7. DEPLOY: ansible-playbook playbooks/deploy-jellyseerr.yml"
echo "8. VERIFY: curl -I http://192.168.1.80:5055"
echo ""
echo "--- CLEANUP ---"
echo "9. UPDATE TRAEFIK: Change backend IPs to 192.168.1.80"
echo "10. CLEANUP: ssh alien 'docker rm watchstate jellyseerr'"
echo "11. COMMIT: git add -A && git commit -m 'Migrate watchstate + jellyseerr to replicant' && git push"