Some checks failed
Deploy to Phoenix / deploy (push) Has been cancelled
- ADD_CHAIN138_TO_LEDGER_LIVE: Ledger form done; public code review repo bis-innovations/LedgerLive; init/push commands - CONTRACT_DEPLOYMENT_RUNBOOK: Chain 138 gas price 1 gwei, 36-addr check, TransactionMirror workaround - CONTRACT_*: AddressMapper, MirrorManager deployed 2026-02-12; 36-address on-chain check - NEXT_STEPS_FOR_YOU: Ledger done; steps completable now (no LAN); run-completable-tasks-from-anywhere - MASTER_INDEX, OPERATOR_OPTIONAL, SMART_CONTRACTS_INVENTORY_SIMPLE: updates - LEDGER_BLOCKCHAIN_INTEGRATION_COMPLETE: bis-innovations/LedgerLive reference Co-authored-by: Cursor <cursoragent@cursor.com>
196 lines
6.6 KiB
Bash
Executable File
196 lines
6.6 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
# Load IP configuration
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
source "${PROJECT_ROOT}/config/ip-addresses.conf" 2>/dev/null || true
|
|
|
|
|
|
# Fix NPMplus installation - handles the compose.yaml issue
|
|
|
|
set -e
|
|
|
|
PROXMOX_HOST="${1:-192.168.11.11}"
|
|
CONTAINER_ID="${2}"
|
|
|
|
if [ -z "$CONTAINER_ID" ]; then
|
|
echo "Usage: $0 [PROXMOX_HOST] [CONTAINER_ID]"
|
|
echo ""
|
|
echo "Find container ID:"
|
|
echo " ssh root@$PROXMOX_HOST 'pct list | tail -5'"
|
|
exit 1
|
|
fi
|
|
|
|
TZ="${3:-America/New_York}"
|
|
ACME_EMAIL="${4:-nsatoshi2007@hotmail.com}"
|
|
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "🔧 Fixing NPMplus Installation"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|
|
echo "Container ID: $CONTAINER_ID"
|
|
echo ""
|
|
|
|
# Check if container exists and is running
|
|
CONTAINER_STATUS=$(ssh root@"$PROXMOX_HOST" "pct status $CONTAINER_ID 2>&1" || echo "not found")
|
|
if echo "$CONTAINER_STATUS" | grep -q "not found\|does not exist"; then
|
|
echo "❌ Container $CONTAINER_ID does not exist"
|
|
exit 1
|
|
fi
|
|
|
|
if ! echo "$CONTAINER_STATUS" | grep -q "running"; then
|
|
echo "🚀 Starting container..."
|
|
ssh root@"$PROXMOX_HOST" "pct start $CONTAINER_ID"
|
|
sleep 3
|
|
fi
|
|
|
|
echo "📦 Fixing NPMplus installation..."
|
|
ssh root@"$PROXMOX_HOST" "pct exec $CONTAINER_ID -- bash" << FIX_EOF
|
|
set -e
|
|
|
|
echo "📋 Checking current state..."
|
|
cd /opt
|
|
|
|
# Check if compose.yaml exists
|
|
if [ ! -f compose.yaml ]; then
|
|
echo " ⚠️ compose.yaml not found, downloading..."
|
|
curl -fsSL "https://raw.githubusercontent.com/ZoeyVid/NPMplus/refs/heads/develop/compose.yaml" -o compose.yaml || {
|
|
echo " ❌ Failed to download compose.yaml"
|
|
exit 1
|
|
}
|
|
echo " ✅ compose.yaml downloaded"
|
|
else
|
|
echo " ✅ compose.yaml exists"
|
|
fi
|
|
|
|
# Verify compose.yaml is valid
|
|
if ! docker compose config >/dev/null 2>&1; then
|
|
echo " ⚠️ compose.yaml is invalid, re-downloading..."
|
|
mv compose.yaml compose.yaml.bak
|
|
curl -fsSL "https://raw.githubusercontent.com/ZoeyVid/NPMplus/refs/heads/develop/compose.yaml" -o compose.yaml
|
|
fi
|
|
|
|
# Update compose file with timezone and email
|
|
echo " 📝 Updating compose.yaml with timezone and email..."
|
|
if command -v yq >/dev/null 2>&1; then
|
|
yq -i "
|
|
.services.npmplus.environment |=
|
|
(map(select(. != \"TZ=*\" and . != \"ACME_EMAIL=*\")) +
|
|
[\"TZ=$TZ\", \"ACME_EMAIL=$ACME_EMAIL\"])
|
|
" compose.yaml
|
|
echo " ✅ Updated with TZ=$TZ and ACME_EMAIL=$ACME_EMAIL"
|
|
else
|
|
echo " ⚠️ yq not found, skipping environment variable update"
|
|
echo " 💡 You may need to update compose.yaml manually"
|
|
fi
|
|
|
|
# Check if Docker is running
|
|
if ! pgrep dockerd >/dev/null; then
|
|
echo " 🐳 Starting Docker..."
|
|
rc-service docker start
|
|
rc-update add docker default
|
|
sleep 5
|
|
fi
|
|
|
|
# Check if docker compose plugin is available
|
|
if ! docker compose version >/dev/null 2>&1; then
|
|
echo " 📦 Installing docker compose plugin..."
|
|
|
|
# Install docker compose plugin
|
|
DOCKER_COMPOSE_VERSION=\$(curl -fsSL https://api.github.com/repos/docker/compose/releases/latest | grep '"tag_name":' | cut -d'"' -f4)
|
|
DOCKER_CONFIG=\${DOCKER_CONFIG:-\$HOME/.docker}
|
|
mkdir -p \$DOCKER_CONFIG/cli-plugins
|
|
curl -fsSL "https://github.com/docker/compose/releases/download/\$DOCKER_COMPOSE_VERSION/docker-compose-linux-x86_64" -o \$DOCKER_CONFIG/cli-plugins/docker-compose
|
|
chmod +x \$DOCKER_CONFIG/cli-plugins/docker-compose
|
|
echo " ✅ Docker compose plugin installed"
|
|
fi
|
|
|
|
# Verify we're in the right directory
|
|
echo " 📍 Current directory: \$(pwd)"
|
|
echo " 📄 Files in /opt:"
|
|
ls -la /opt/ | head -10
|
|
|
|
# Try to start NPMplus
|
|
echo ""
|
|
echo "🚀 Starting NPMplus..."
|
|
cd /opt
|
|
docker compose up -d || {
|
|
echo " ⚠️ docker compose up failed, checking logs..."
|
|
docker compose ps
|
|
echo ""
|
|
echo " 💡 Try running manually:"
|
|
echo " cd /opt"
|
|
echo " docker compose up -d"
|
|
exit 1
|
|
}
|
|
|
|
echo " ✅ NPMplus started"
|
|
|
|
# Wait for container to be ready
|
|
echo ""
|
|
echo "⏳ Waiting for NPMplus to be ready..."
|
|
CONTAINER_ID=""
|
|
for i in {1..60}; do
|
|
CONTAINER_ID=\$(docker ps --filter "name=npmplus" --format "{{.ID}}")
|
|
if [ -n "\$CONTAINER_ID" ]; then
|
|
STATUS=\$(docker inspect --format '{{.State.Health.Status}}' "\$CONTAINER_ID" 2>/dev/null || echo "starting")
|
|
if [ "\$STATUS" = "healthy" ]; then
|
|
echo " ✅ NPMplus is running and healthy"
|
|
break
|
|
fi
|
|
fi
|
|
echo " ⏳ Waiting... (\$i/60)"
|
|
sleep 2
|
|
done
|
|
|
|
# Get admin password
|
|
echo ""
|
|
echo "🔑 Retrieving admin password..."
|
|
PASSWORD_LINE=\$(docker logs "\$CONTAINER_ID" 2>&1 | grep -i "Creating a new user" | tail -1 || echo "")
|
|
if [ -n "\$PASSWORD_LINE" ]; then
|
|
PASSWORD=\$(echo "\$PASSWORD_LINE" | grep -oP "password: \K[^\s]+" || echo "")
|
|
if [ -n "\$PASSWORD" ]; then
|
|
echo "username: admin@example.org" > /opt/.npm_pwd
|
|
echo "password: \$PASSWORD" >> /opt/.npm_pwd
|
|
echo " ✅ Admin password saved to /opt/.npm_pwd"
|
|
echo " 📋 Password: \$PASSWORD"
|
|
else
|
|
echo " ⚠️ Could not extract password from logs"
|
|
fi
|
|
else
|
|
echo " ⚠️ Password not found in logs yet"
|
|
echo " 💡 Check manually: docker logs \$CONTAINER_ID | grep -i password"
|
|
fi
|
|
|
|
echo ""
|
|
echo "✅ NPMplus installation fixed!"
|
|
FIX_EOF
|
|
|
|
if [ $? -eq 0 ]; then
|
|
# Get container IP
|
|
CONTAINER_IP=$(ssh root@"$PROXMOX_HOST" "pct exec $CONTAINER_ID -- hostname -I | awk '{print \$1}'")
|
|
|
|
echo ""
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo "✅ Installation Fixed!"
|
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
echo ""
|
|
echo "📋 Container Information:"
|
|
echo " • Container ID: $CONTAINER_ID"
|
|
echo " • Container IP: $CONTAINER_IP"
|
|
echo " • Access URL: https://$CONTAINER_IP:81"
|
|
echo " • Admin Email: admin@example.org"
|
|
echo ""
|
|
echo "🔑 Get admin password:"
|
|
echo " ssh root@$PROXMOX_HOST \"pct exec $CONTAINER_ID -- cat /opt/.npm_pwd\""
|
|
echo ""
|
|
echo "📋 Next step: Run configuration migration:"
|
|
echo " bash scripts/nginx-proxy-manager/post-install-migration.sh $PROXMOX_HOST $CONTAINER_ID $CONTAINER_IP"
|
|
echo ""
|
|
else
|
|
echo ""
|
|
echo "❌ Fix failed. Check the output above."
|
|
exit 1
|
|
fi
|