Files
proxmox/scripts/deploy-to-proxmox-host.sh

226 lines
7.6 KiB
Bash
Executable File

#!/bin/bash
# Script to copy deployment package to Proxmox host and run deployment
# This is the recommended approach for remote deployment
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'
# Load environment
source "$SCRIPT_DIR/load-env.sh"
load_env_file
PROXMOX_HOST="${PROXMOX_HOST:-192.168.11.10}"
DEPLOY_DIR="/opt/smom-dbis-138-proxmox"
DEPLOY_SOURCE="$PROJECT_ROOT/smom-dbis-138-proxmox"
echo ""
echo -e "${CYAN}╔════════════════════════════════════════════════════════════════╗${NC}"
echo -e "${CYAN}${NC} Deploy to Proxmox Host: ${PROXMOX_HOST} ${CYAN}${NC}"
echo -e "${CYAN}╚════════════════════════════════════════════════════════════════╝${NC}"
echo ""
# Check if deployment directory exists locally
if [ ! -d "$DEPLOY_SOURCE" ]; then
echo -e "${RED}❌ Deployment directory not found: $DEPLOY_SOURCE${NC}"
echo -e "${YELLOW}Current directory: $(pwd)${NC}"
echo -e "${YELLOW}Project root: $PROJECT_ROOT${NC}"
exit 1
fi
echo -e "${BLUE}This script will:${NC}"
echo " 1. Copy deployment package to Proxmox host"
echo " 2. SSH into Proxmox host"
echo " 3. Run deployment on Proxmox host"
echo ""
read -p "$(echo -e ${YELLOW}Continue? [y/N]: ${NC})" -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo -e "${YELLOW}Deployment cancelled${NC}"
exit 0
fi
echo ""
echo -e "${BLUE}Step 1: Copying deployment package to Proxmox host...${NC}"
# Create deployment package (exclude unnecessary files)
TEMP_DIR=$(mktemp -d)
DEPLOY_PACKAGE="$TEMP_DIR/smom-dbis-138-proxmox"
echo -e "${BLUE}Creating deployment package...${NC}"
if command -v rsync &> /dev/null; then
rsync -av --exclude='.git' --exclude='node_modules' --exclude='*.log' \
"$DEPLOY_SOURCE/" "$DEPLOY_PACKAGE/"
else
# Fallback to tar if rsync not available
cd "$PROJECT_ROOT"
tar --exclude='.git' --exclude='node_modules' --exclude='*.log' \
-czf "$TEMP_DIR/smom-dbis-138-proxmox.tar.gz" smom-dbis-138-proxmox/
ssh root@"${PROXMOX_HOST}" "mkdir -p /opt && cd /opt && tar -xzf -" < "$TEMP_DIR/smom-dbis-138-proxmox.tar.gz"
rm -f "$TEMP_DIR/smom-dbis-138-proxmox.tar.gz"
echo -e "${GREEN}✅ Deployment package copied${NC}"
DEPLOY_PACKAGE="" # Skip scp step
fi
if [ -n "$DEPLOY_PACKAGE" ]; then
echo -e "${BLUE}Copying to Proxmox host...${NC}"
# Add host to known_hosts if not present (non-interactive)
if ! ssh-keygen -F "${PROXMOX_HOST}" &>/dev/null; then
echo -e "${YELLOW}Adding ${PROXMOX_HOST} to known_hosts...${NC}"
ssh-keyscan -H "${PROXMOX_HOST}" >> ~/.ssh/known_hosts 2>/dev/null || true
fi
# Use StrictHostKeyChecking=accept-new for first connection (or if key changed)
# Note: Will prompt for password if SSH key not configured
echo -e "${YELLOW}Note: You may be prompted for the root password${NC}"
# Ensure /opt exists on remote host
ssh -o StrictHostKeyChecking=accept-new -o UserKnownHostsFile=~/.ssh/known_hosts \
-o PreferredAuthentications=publickey,password \
root@"${PROXMOX_HOST}" "mkdir -p /opt" || {
echo -e "${RED}❌ Failed to create /opt directory. Check SSH authentication.${NC}"
exit 1
}
# Remove old deployment if exists
ssh -o StrictHostKeyChecking=accept-new -o UserKnownHostsFile=~/.ssh/known_hosts \
-o PreferredAuthentications=publickey,password \
root@"${PROXMOX_HOST}" "rm -rf $DEPLOY_DIR" 2>/dev/null || true
# Copy files
scp -o StrictHostKeyChecking=accept-new -o UserKnownHostsFile=~/.ssh/known_hosts \
-o PreferredAuthentications=publickey,password \
-r "$DEPLOY_PACKAGE" root@"${PROXMOX_HOST}:/opt/" || {
echo -e "${RED}❌ Failed to copy files. Check SSH authentication.${NC}"
echo -e "${YELLOW}You may need to:${NC}"
echo " 1. Set up SSH key: ssh-copy-id root@${PROXMOX_HOST}"
echo " 2. Or enter password when prompted"
exit 1
}
# Verify files were copied
echo -e "${BLUE}Verifying files were copied...${NC}"
ssh -o StrictHostKeyChecking=accept-new -o UserKnownHostsFile=~/.ssh/known_hosts \
-o PreferredAuthentications=publickey,password \
root@"${PROXMOX_HOST}" "ls -la $DEPLOY_DIR/scripts/deployment/ 2>/dev/null | head -5 || echo 'Files not found at expected location'" || true
fi
# Cleanup temp directory
rm -rf "$TEMP_DIR"
echo -e "${GREEN}✅ Deployment package copied${NC}"
echo ""
echo -e "${BLUE}Step 2: Running deployment on Proxmox host...${NC}"
echo ""
# SSH and run deployment (with host key acceptance)
# Note: Will prompt for password if SSH key not configured
echo -e "${YELLOW}Note: You may be prompted for the root password again${NC}"
# Create a temporary script file to avoid heredoc issues
REMOTE_SCRIPT=$(cat << 'REMOTE_SCRIPT_END'
#!/bin/bash
set -e
DEPLOY_DIR="/opt/smom-dbis-138-proxmox"
echo "=========================================="
echo "Remote Deployment Script"
echo "=========================================="
echo "Target directory: $DEPLOY_DIR"
echo ""
# Check if directory exists
if [ ! -d "$DEPLOY_DIR" ]; then
echo "ERROR: Directory $DEPLOY_DIR does not exist"
echo ""
echo "Checking /opt/ contents:"
ls -la /opt/ || echo "Cannot access /opt/"
echo ""
echo "Looking for smom directories:"
find /opt -type d -name "*smom*" 2>/dev/null || echo "No smom directories found"
exit 1
fi
# Change to deployment directory
cd "$DEPLOY_DIR" || {
echo "ERROR: Cannot change to $DEPLOY_DIR"
exit 1
}
echo "Current directory: $(pwd)"
echo ""
echo "Directory structure:"
ls -la
echo ""
# Check for scripts directory
if [ ! -d "scripts" ]; then
echo "ERROR: scripts directory not found"
echo "Available directories:"
find . -maxdepth 2 -type d | head -20
exit 1
fi
# Check for deployment scripts
if [ ! -d "scripts/deployment" ]; then
echo "ERROR: scripts/deployment directory not found"
echo "Available in scripts/:"
ls -la scripts/ || echo "Cannot list scripts/"
exit 1
fi
# Make scripts executable
echo "Making scripts executable..."
find scripts/deployment -name "*.sh" -type f -exec chmod +x {} \; 2>/dev/null || true
find install -name "*.sh" -type f -exec chmod +x {} \; 2>/dev/null || true
# Verify deploy-all.sh exists
if [ ! -f "scripts/deployment/deploy-all.sh" ]; then
echo "ERROR: scripts/deployment/deploy-all.sh not found"
echo ""
echo "Available deployment scripts:"
find scripts/deployment -name "*.sh" -type f || echo "No .sh files found"
exit 1
fi
echo "✅ Found deploy-all.sh"
echo ""
echo "Starting deployment..."
echo "=========================================="
echo ""
# Run deployment
exec ./scripts/deployment/deploy-all.sh
REMOTE_SCRIPT_END
)
# Execute the remote script via SSH
ssh -o StrictHostKeyChecking=accept-new -o UserKnownHostsFile=~/.ssh/known_hosts \
-o PreferredAuthentications=publickey,password \
root@"${PROXMOX_HOST}" bash <<< "$REMOTE_SCRIPT"
echo ""
echo -e "${GREEN}✅ Deployment completed!${NC}"
echo ""
echo "Next steps:"
echo " 1. Verify containers: ssh root@${PROXMOX_HOST} 'pct list'"
echo " 2. Check logs: ssh root@${PROXMOX_HOST} 'tail -f $DEPLOY_DIR/logs/*.log'"
echo " 3. Configure services as needed"
echo ""
echo -e "${BLUE}Tip:${NC} To avoid password prompts, set up SSH key:"
echo " ssh-copy-id root@${PROXMOX_HOST}"