117 lines
4.1 KiB
Bash
117 lines
4.1 KiB
Bash
|
|
#!/bin/bash
|
||
|
|
|
||
|
|
# Update NPMplus to 2026-01-20-r2
|
||
|
|
# Run this script on Proxmox host (r630-01) - it uses pct exec to run Docker commands in LXC container
|
||
|
|
# Usage: ssh root@r630-01 'bash' < update-npmplus-direct.sh
|
||
|
|
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
LXC_CONTAINER="10233"
|
||
|
|
DOCKER_CONTAINER="npmplus"
|
||
|
|
NEW_IMAGE="zoeyvid/npmplus:2026-01-20-r2"
|
||
|
|
BACKUP_DIR="/data/npmplus-backups"
|
||
|
|
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
|
||
|
|
|
||
|
|
echo "=========================================="
|
||
|
|
echo "Update NPMplus to 2026-01-20-r2"
|
||
|
|
echo "=========================================="
|
||
|
|
echo ""
|
||
|
|
|
||
|
|
# Step 1: Check current version
|
||
|
|
echo "Step 1: Checking current version..."
|
||
|
|
CURRENT_IMAGE=$(pct exec $LXC_CONTAINER -- docker inspect $DOCKER_CONTAINER --format '{{.Config.Image}}' 2>/dev/null || echo "not found")
|
||
|
|
echo "Current: $CURRENT_IMAGE"
|
||
|
|
|
||
|
|
if echo "$CURRENT_IMAGE" | grep -q "2026-01-20-r2"; then
|
||
|
|
echo "✅ Already running 2026-01-20-r2"
|
||
|
|
exit 0
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Step 2: Create backup
|
||
|
|
echo ""
|
||
|
|
echo "Step 2: Creating backup..."
|
||
|
|
mkdir -p "$BACKUP_DIR"
|
||
|
|
pct exec $LXC_CONTAINER -- docker exec $DOCKER_CONTAINER tar -czf /tmp/npmplus-backup-${TIMESTAMP}.tar.gz -C /data . 2>/dev/null || echo "Backup warning"
|
||
|
|
pct exec $LXC_CONTAINER -- docker cp $DOCKER_CONTAINER:/tmp/npmplus-backup-${TIMESTAMP}.tar.gz /tmp/ 2>/dev/null || echo "Backup copy warning"
|
||
|
|
pct exec $LXC_CONTAINER -- docker exec $DOCKER_CONTAINER rm -f /tmp/npmplus-backup-*.tar.gz 2>/dev/null || true
|
||
|
|
# Copy from container to host
|
||
|
|
pct exec $LXC_CONTAINER -- cp /tmp/npmplus-backup-${TIMESTAMP}.tar.gz "$BACKUP_DIR/" 2>/dev/null || echo "Final copy warning"
|
||
|
|
|
||
|
|
if [ -f "$BACKUP_DIR/npmplus-backup-${TIMESTAMP}.tar.gz" ]; then
|
||
|
|
echo "✅ Backup created: $BACKUP_DIR/npmplus-backup-${TIMESTAMP}.tar.gz"
|
||
|
|
else
|
||
|
|
echo "⚠️ Backup may have failed, but continuing (volumes are preserved)"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Step 3: Pull new image
|
||
|
|
echo ""
|
||
|
|
echo "Step 3: Pulling new image (this may take 2-5 minutes)..."
|
||
|
|
echo "Note: If this times out, the image will be pulled when creating the container"
|
||
|
|
pct exec $LXC_CONTAINER -- timeout 180 docker pull $NEW_IMAGE 2>&1 | tail -5 || echo "Pull timeout (will retry during container creation)"
|
||
|
|
|
||
|
|
# Step 4: Stop container
|
||
|
|
echo ""
|
||
|
|
echo "Step 4: Stopping container..."
|
||
|
|
pct exec $LXC_CONTAINER -- docker stop $DOCKER_CONTAINER
|
||
|
|
|
||
|
|
# Step 5: Get volume mounts
|
||
|
|
echo ""
|
||
|
|
echo "Step 5: Getting volume configuration..."
|
||
|
|
VOLUMES=$(pct exec $LXC_CONTAINER -- docker inspect $DOCKER_CONTAINER --format '{{range .Mounts}}-v {{.Source}}:{{.Destination}} {{end}}' 2>/dev/null || echo "-v /data/npmplus:/data -v /data/letsencrypt:/etc/letsencrypt")
|
||
|
|
echo "Volumes: $VOLUMES"
|
||
|
|
|
||
|
|
# Step 6: Remove old container
|
||
|
|
echo ""
|
||
|
|
echo "Step 6: Removing old container..."
|
||
|
|
pct exec $LXC_CONTAINER -- docker rm $DOCKER_CONTAINER
|
||
|
|
|
||
|
|
# Step 7: Create new container
|
||
|
|
echo ""
|
||
|
|
echo "Step 7: Creating new container..."
|
||
|
|
pct exec $LXC_CONTAINER -- docker run -d \
|
||
|
|
--name $DOCKER_CONTAINER \
|
||
|
|
--restart unless-stopped \
|
||
|
|
--network bridge \
|
||
|
|
-p 80:80 \
|
||
|
|
-p 443:443 \
|
||
|
|
-p 81:81 \
|
||
|
|
$VOLUMES \
|
||
|
|
$NEW_IMAGE
|
||
|
|
|
||
|
|
# Step 8: Verify
|
||
|
|
echo ""
|
||
|
|
echo "Step 8: Verifying..."
|
||
|
|
sleep 10
|
||
|
|
pct exec $LXC_CONTAINER -- docker ps --filter name=$DOCKER_CONTAINER
|
||
|
|
|
||
|
|
NEW_VERSION=$(pct exec $LXC_CONTAINER -- docker inspect $DOCKER_CONTAINER --format '{{.Config.Image}}' 2>/dev/null)
|
||
|
|
echo ""
|
||
|
|
echo "New version: $NEW_VERSION"
|
||
|
|
|
||
|
|
if echo "$NEW_VERSION" | grep -q "2026-01-20-r2"; then
|
||
|
|
echo "✅ Successfully updated to 2026-01-20-r2"
|
||
|
|
else
|
||
|
|
echo "⚠️ Version check inconclusive"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Step 9: Test accessibility
|
||
|
|
echo ""
|
||
|
|
echo "Step 9: Testing accessibility..."
|
||
|
|
sleep 5
|
||
|
|
HTTP_167=$(curl -s -o /dev/null -w '%{http_code}' --connect-timeout 5 http://192.168.11.167:80 2>&1 || echo "000")
|
||
|
|
if [ "$HTTP_167" = "200" ] || [ "$HTTP_167" = "301" ] || [ "$HTTP_167" = "302" ] || [ "$HTTP_167" = "308" ]; then
|
||
|
|
echo "✅ NPMplus is accessible (HTTP ${HTTP_167})"
|
||
|
|
else
|
||
|
|
echo "⚠️ NPMplus returned HTTP ${HTTP_167} (may need more time to start)"
|
||
|
|
fi
|
||
|
|
|
||
|
|
echo ""
|
||
|
|
echo "=========================================="
|
||
|
|
echo "Update Complete!"
|
||
|
|
echo "=========================================="
|
||
|
|
echo ""
|
||
|
|
echo "Test NPMplus:"
|
||
|
|
echo " curl -I http://192.168.11.167:80"
|
||
|
|
echo " curl -I https://192.168.11.167:81 -k"
|
||
|
|
echo ""
|