#!/bin/bash # SilverBullet Migration Script # Target: databases (.81) # Run this on the control server (CT 127) set -e COMPOSE_DIR=~/clustered-fucks/compose-files/databases/silverbullet PLAYBOOK_DIR=~/clustered-fucks/playbooks # Create directories mkdir -p "$COMPOSE_DIR" mkdir -p "$PLAYBOOK_DIR" # Create docker-compose.yml cat > "$COMPOSE_DIR/docker-compose.yml" << 'EOF' services: silverbullet: image: ghcr.io/silverbulletmd/silverbullet container_name: silverbullet restart: unless-stopped env_file: - .env volumes: - ./space:/space ports: - "53510:3000" networks: - proxy labels: - "autoheal=true" - "com.centurylinklabs.watchtower.enable=true" deploy: resources: limits: memory: 512M cpus: '0.5' healthcheck: test: ["CMD-SHELL", "curl --fail http://localhost:3000/.ping || exit 1"] interval: 30s timeout: 10s retries: 3 networks: proxy: external: true EOF # Create .env file cat > "$COMPOSE_DIR/.env" << 'EOF' SB_USER=maddox:./sk8nh8 SB_HOSTNAME=0.0.0.0 SB_FOLDER=/space EOF # Create Ansible playbook cat > "$PLAYBOOK_DIR/deploy-silverbullet.yml" << 'EOF' --- - name: Deploy SilverBullet to databases hosts: databases become: yes vars: appdata_path: /home/docker/appdata/silverbullet compose_src: ~/clustered-fucks/compose-files/databases/silverbullet tasks: - name: Create appdata directory file: path: "{{ appdata_path }}" state: directory mode: '0755' - name: Copy docker-compose.yml copy: src: "{{ compose_src }}/docker-compose.yml" dest: "{{ appdata_path }}/docker-compose.yml" mode: '0644' - name: Copy .env file copy: src: "{{ compose_src }}/.env" dest: "{{ appdata_path }}/.env" mode: '0600' - name: Pull latest image community.docker.docker_compose_v2: project_src: "{{ appdata_path }}" pull: always state: present - name: Start SilverBullet community.docker.docker_compose_v2: project_src: "{{ appdata_path }}" state: present - name: Wait for container to be healthy shell: | for i in {1..30}; do status=$(docker inspect --format='{{.State.Health.Status}}' silverbullet 2>/dev/null || echo "not_found") if [ "$status" = "healthy" ]; then echo "Container is healthy" exit 0 fi sleep 2 done echo "Timeout waiting for healthy status" exit 1 register: health_check changed_when: false - name: Show container status shell: docker ps --filter name=silverbullet --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" register: container_status changed_when: false - name: Display status debug: var: container_status.stdout_lines EOF echo "" echo "==========================================" echo " SilverBullet Migration - Next Steps" echo "==========================================" echo "" echo "1. RSYNC DATA FROM ALIEN" echo " SSH to databases and pull the space directory:" echo "" echo " ssh databases" echo " sudo mkdir -p /home/docker/appdata/silverbullet" echo " sudo rsync -avP maddox@alien:/home/maddox/docker/appdata/silverbullet/space/ /home/docker/appdata/silverbullet/space/" echo " exit" echo "" echo "2. DEPLOY VIA ANSIBLE" echo " cd ~/clustered-fucks" echo " ansible-playbook playbooks/deploy-silverbullet.yml" echo "" echo "3. VERIFY" echo " curl -u maddox:./sk8nh8 http://192.168.1.81:53510/.ping" echo " # Should return: OK" echo "" echo "4. UPDATE TRAEFIK ON ALIEN" echo " Edit Traefik dynamic config to point silverbullet to:" echo " http://192.168.1.81:53510" echo "" echo "5. TEST VIA DOMAIN" echo " Access via your SilverBullet domain" echo " Verify Authentik auth + SilverBullet loads" echo "" echo "6. CLEANUP ALIEN" echo " ssh alien" echo " cd /home/maddox/docker/appdata/silverbullet" echo " docker compose down" echo "" echo "7. COMMIT TO GIT" echo " cd ~/clustered-fucks" echo " git add -A" echo " git commit -m 'Add SilverBullet migration to databases'" echo " git push" echo "" echo "=========================================="