feat: prompt for HA token interactively when SSH fails, honour HA_TOKEN env var as fallback
This commit is contained in:
+39
-10
@@ -41,7 +41,6 @@ BRIDGE="vmbr0"
|
|||||||
|
|
||||||
HAOS_IP="10.0.0.55"
|
HAOS_IP="10.0.0.55"
|
||||||
ADDON_SLUG="a0d7b954_nginxproxymanager"
|
ADDON_SLUG="a0d7b954_nginxproxymanager"
|
||||||
NPM_DATA="/opt/npm/data"
|
|
||||||
|
|
||||||
echo "============================================"
|
echo "============================================"
|
||||||
echo " Nginx Proxy Manager LXC Setup + Migration"
|
echo " Nginx Proxy Manager LXC Setup + Migration"
|
||||||
@@ -129,7 +128,7 @@ DCEOF
|
|||||||
echo "[7/9] Attempting data migration from HA addon..."
|
echo "[7/9] Attempting data migration from HA addon..."
|
||||||
MIGRATED=false
|
MIGRATED=false
|
||||||
|
|
||||||
# Try SSH first (ports 22222 and 22)
|
# --- Approach 1: Try SSH (ports 22222 and 22) ---
|
||||||
for PORT in 22222 22; do
|
for PORT in 22222 22; do
|
||||||
if ssh -o ConnectTimeout=3 -o StrictHostKeyChecking=no -p ${PORT} \
|
if ssh -o ConnectTimeout=3 -o StrictHostKeyChecking=no -p ${PORT} \
|
||||||
root@${HAOS_IP} "test -d /addon_data/${ADDON_SLUG}" 2>/dev/null; then
|
root@${HAOS_IP} "test -d /addon_data/${ADDON_SLUG}" 2>/dev/null; then
|
||||||
@@ -157,14 +156,29 @@ for PORT in 22222 22; do
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# Try HA Supervisor partial backup if SSH failed
|
# --- Approach 2: HA Supervisor partial backup (prompt for token) ---
|
||||||
if [ "$MIGRATED" = false ]; then
|
if [ "$MIGRATED" = false ]; then
|
||||||
echo " SSH failed. Trying HA Supervisor partial backup..."
|
echo ""
|
||||||
echo " (requires HA long-lived token set in HA_TOKEN env var)"
|
echo " SSH to HAOS failed."
|
||||||
|
echo ""
|
||||||
|
echo " To migrate your NPM data automatically, this script can"
|
||||||
|
echo " use the Home Assistant API to create a partial backup."
|
||||||
|
echo ""
|
||||||
|
echo " You need a Long-Lived Access Token from HA:"
|
||||||
|
echo " Profile > Security > Long-lived access tokens > Create"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
if [ -n "${HA_TOKEN:-}" ]; then
|
||||||
|
echo " Using HA_TOKEN from environment."
|
||||||
|
else
|
||||||
|
read -r -p " Paste your HA token (or press Enter to skip): " HA_TOKEN
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -n "${HA_TOKEN:-}" ]; then
|
if [ -n "${HA_TOKEN:-}" ]; then
|
||||||
HA_URL="http://${HAOS_IP}:8123"
|
HA_URL="http://${HAOS_IP}:8123"
|
||||||
TMPDIR=$(mktemp -d)
|
TMPDIR=$(mktemp -d)
|
||||||
|
|
||||||
|
echo " Creating partial backup of NPM addon..."
|
||||||
BACKUP_SLUG=$(curl -s -X POST \
|
BACKUP_SLUG=$(curl -s -X POST \
|
||||||
-H "Authorization: Bearer ${HA_TOKEN}" \
|
-H "Authorization: Bearer ${HA_TOKEN}" \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
@@ -184,8 +198,10 @@ if [ "$MIGRATED" = false ]; then
|
|||||||
if [ -n "${ADDON_TAR}" ]; then
|
if [ -n "${ADDON_TAR}" ]; then
|
||||||
mkdir -p "${TMPDIR}/npm_data"
|
mkdir -p "${TMPDIR}/npm_data"
|
||||||
tar xzf "${ADDON_TAR}" -C "${TMPDIR}/npm_data/" 2>/dev/null || true
|
tar xzf "${ADDON_TAR}" -C "${TMPDIR}/npm_data/" 2>/dev/null || true
|
||||||
|
|
||||||
DB_SRC=$(find "${TMPDIR}/npm_data" -name "database.sqlite" -type f 2>/dev/null | head -1)
|
DB_SRC=$(find "${TMPDIR}/npm_data" -name "database.sqlite" -type f 2>/dev/null | head -1)
|
||||||
[ -n "${DB_SRC}" ] && pct push "${CT_ID}" "${DB_SRC}" /opt/npm/data/database.sqlite && echo " DB migrated"
|
[ -n "${DB_SRC}" ] && pct push "${CT_ID}" "${DB_SRC}" /opt/npm/data/database.sqlite && echo " DB migrated"
|
||||||
|
|
||||||
CERT_DIR=$(find "${TMPDIR}/npm_data" -type d -name "letsencrypt" 2>/dev/null | head -1)
|
CERT_DIR=$(find "${TMPDIR}/npm_data" -type d -name "letsencrypt" 2>/dev/null | head -1)
|
||||||
if [ -n "${CERT_DIR}" ]; then
|
if [ -n "${CERT_DIR}" ]; then
|
||||||
tar -czf "${TMPDIR}/c.tar.gz" -C "${CERT_DIR}" . 2>/dev/null
|
tar -czf "${TMPDIR}/c.tar.gz" -C "${CERT_DIR}" . 2>/dev/null
|
||||||
@@ -194,27 +210,40 @@ if [ "$MIGRATED" = false ]; then
|
|||||||
echo " Certs migrated"
|
echo " Certs migrated"
|
||||||
fi
|
fi
|
||||||
MIGRATED=true
|
MIGRATED=true
|
||||||
|
else
|
||||||
|
echo " Could not find addon data in backup"
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
echo " Backup download failed"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Clean up the backup from HA
|
||||||
curl -s -X DELETE -H "Authorization: Bearer ${HA_TOKEN}" \
|
curl -s -X DELETE -H "Authorization: Bearer ${HA_TOKEN}" \
|
||||||
"${HA_URL}/api/hassio/backups/${BACKUP_SLUG}" 2>/dev/null || true
|
"${HA_URL}/api/hassio/backups/${BACKUP_SLUG}" 2>/dev/null || true
|
||||||
|
else
|
||||||
|
echo " Backup creation failed (check token permissions)"
|
||||||
fi
|
fi
|
||||||
rm -rf "${TMPDIR}"
|
rm -rf "${TMPDIR}"
|
||||||
|
else
|
||||||
|
echo " Skipping API migration."
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$MIGRATED" = false ]; then
|
if [ "$MIGRATED" = false ]; then
|
||||||
echo ""
|
echo ""
|
||||||
echo " AUTO-MIGRATION FAILED."
|
echo " ========================================="
|
||||||
echo " Manual steps after setup:"
|
echo " DATA MIGRATION SKIPPED"
|
||||||
|
echo " ========================================="
|
||||||
|
echo " NPM will start fresh. To migrate later:"
|
||||||
echo " 1. HA > Settings > Backups > Create > Partial"
|
echo " 1. HA > Settings > Backups > Create > Partial"
|
||||||
echo " Select ONLY 'Nginx Proxy Manager', create it"
|
echo " Select ONLY 'Nginx Proxy Manager'"
|
||||||
echo " 2. Download the backup .tar file"
|
echo " 2. Download the .tar backup"
|
||||||
echo " 3. Copy to Proxmox: scp backup.tar root@10.0.0.240:/tmp/"
|
echo " 3. Copy to Proxmox: scp backup.tar root@10.0.0.240:/tmp/"
|
||||||
echo " 4. Extract and push the database:"
|
echo " 4. Extract:"
|
||||||
echo " cd /tmp && tar xf *.tar"
|
echo " cd /tmp && tar xf *.tar"
|
||||||
echo " tar xzf *nginxproxymanager*.tar.gz -C /tmp/npm_extract/"
|
echo " tar xzf *nginxproxymanager*.tar.gz -C /tmp/npm_extract/"
|
||||||
echo " find /tmp/npm_extract -name database.sqlite"
|
echo " find /tmp/npm_extract -name database.sqlite"
|
||||||
|
echo " 5. Push to NPM LXC:"
|
||||||
echo " pct exec ${CT_ID} -- bash -c 'cd /opt/npm && docker compose down'"
|
echo " pct exec ${CT_ID} -- bash -c 'cd /opt/npm && docker compose down'"
|
||||||
echo " pct push ${CT_ID} <path>/database.sqlite /opt/npm/data/database.sqlite"
|
echo " pct push ${CT_ID} <path>/database.sqlite /opt/npm/data/database.sqlite"
|
||||||
echo " pct exec ${CT_ID} -- bash -c 'cd /opt/npm && docker compose up -d'"
|
echo " pct exec ${CT_ID} -- bash -c 'cd /opt/npm && docker compose up -d'"
|
||||||
|
|||||||
Reference in New Issue
Block a user