Files
hermes-config/skills/devops/selfhosted-migration/references/service-migration-session.md
T
2026-07-12 10:17:17 -04:00

2.1 KiB

Service Migration Session Notes

Migrated from HP Mini i5-6500T/7GB (192.168.50.150) → rayserver i7-10700K/14GB/GTX1050Ti (192.168.50.98) running Ubuntu 26.04, Docker 29.1.3, NVIDIA Driver 580 with CUDA 13.0.

Services Migrated

Service Old Port New Port Notes
Immich v2.7.5 2283 2283 GPU ML with -cuda image tag
Hermes Web UI 8787 8787 Same password, STATE_DIR required
Portainer CE 9443 9443 Volume data preserved
Heimdall 8080 8080 Volume data preserved
Scrutiny 7272 7272 Volume data preserved
Uptime Kuma 3001 3001 Volume data preserved
PiHole 8090 8090 Port 53 bound to specific IP
Watchtower Replaced with cron.daily script

Volume Tar-Pipe Command

The working pattern for copying Docker volume data between machines:

sshpass -p '<pass>' ssh user@old-ip "sudo tar czf - -C /var/lib/docker/volumes/<src>/_data ." | ssh user@new-ip "sudo tar xzf - -C /var/lib/docker/volumes/<dst>/_data/"

Source volumes on old machine used hyphenated names (uptime-kuma_uptime_kuma_data, dashboard_heimdall_config). Destination volumes on new machine used simpler names (uptime_kuma_data, heimdall_config).

PiHole Details

  • PiHole password: @89 (same suffix as the user's SSH password pattern)
  • PiHole admin URL: http://192.168.50.98:8090/admin
  • Port 53 bound to 192.168.50.98:53:53/tcp and .udp (not 0.0.0.0:53) due to systemd-resolved conflict on Ubuntu 26.04
  • systemd-resolved on Ubuntu 26.04 listens on 127.0.0.53:53 (stub) AND 127.0.0.54:53 (proxy) — either can block Docker's 0.0.0.0:53

API Key Transfer

API keys were copied via piping cat over SSH:

sshpass -p '<pass>' ssh user@old-ip 'cat ~/.hermes/.env' | ssh user@new-ip 'cat > ~/.hermes/.env'

The terminal tool redacts secrets in output, making it hard to verify. Check by file byte count (wc -c) or hexdump the password field specifically.

VERSION

Last updated: 2026-05-31 Target: Internal reference for selfhosted-migration skill