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

161 lines
4.2 KiB
Bash
Executable file

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