|
|
#!/bin/bash |
|
|
|
|
|
# PoWHD Analysis Website Deployment Script |
|
|
# Deploys nginx container to remote server on port 14888 |
|
|
|
|
|
set -e |
|
|
|
|
|
# Configuration |
|
|
WEB_SERVER="192.168.1.140" |
|
|
WEB_USER="crappy" |
|
|
REMOTE_PATH="/home/crappy/ponzi" |
|
|
CONTAINER_NAME="powhd-analysis-site" |
|
|
PORT="14888" |
|
|
|
|
|
echo "==========================================" |
|
|
echo "PoWHD Analysis Website Deployment" |
|
|
echo "==========================================" |
|
|
echo "Target: $WEB_USER@$WEB_SERVER:$REMOTE_PATH" |
|
|
echo "Port: $PORT" |
|
|
echo "" |
|
|
|
|
|
# Check if we can reach the server |
|
|
echo "Testing connection to web server..." |
|
|
if ! ping -c 1 -W 3 $WEB_SERVER > /dev/null 2>&1; then |
|
|
echo "❌ Cannot reach web server at $WEB_SERVER" |
|
|
echo "Please check network connectivity and try again." |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
echo "✅ Web server is reachable" |
|
|
|
|
|
# Create deployment directory locally |
|
|
DEPLOY_DIR="deployment-$(date +%Y%m%d-%H%M%S)" |
|
|
echo "Creating local deployment package: $DEPLOY_DIR" |
|
|
mkdir -p $DEPLOY_DIR |
|
|
|
|
|
# Copy all website files |
|
|
echo "📦 Packaging website files..." |
|
|
cp Dockerfile $DEPLOY_DIR/ |
|
|
cp docker-compose.yml $DEPLOY_DIR/ |
|
|
cp nginx.conf $DEPLOY_DIR/ |
|
|
cp index.html $DEPLOY_DIR/ |
|
|
cp styles.css $DEPLOY_DIR/ |
|
|
cp script.js $DEPLOY_DIR/ |
|
|
cp -r assets $DEPLOY_DIR/ |
|
|
|
|
|
# Create deployment info |
|
|
cat > $DEPLOY_DIR/deployment-info.txt << EOF |
|
|
PoWHD Analysis Website Deployment |
|
|
================================= |
|
|
|
|
|
Deployment Date: $(date) |
|
|
Source: $(hostname):$(pwd) |
|
|
Target: $WEB_USER@$WEB_SERVER:$REMOTE_PATH |
|
|
Port: $PORT |
|
|
Container: $CONTAINER_NAME |
|
|
|
|
|
Files included: |
|
|
$(find $DEPLOY_DIR -type f | sort) |
|
|
|
|
|
To start the container: |
|
|
cd $REMOTE_PATH |
|
|
docker-compose up -d |
|
|
|
|
|
To view logs: |
|
|
docker-compose logs -f |
|
|
|
|
|
To stop: |
|
|
docker-compose down |
|
|
|
|
|
Access URL: http://$WEB_SERVER:$PORT/ |
|
|
Health check: http://$WEB_SERVER:$PORT/health |
|
|
EOF |
|
|
|
|
|
# Copy files to web server |
|
|
echo "📤 Copying files to web server..." |
|
|
echo "Creating remote directory..." |
|
|
ssh $WEB_USER@$WEB_SERVER "mkdir -p $REMOTE_PATH" || { |
|
|
echo "❌ Failed to create remote directory. Check SSH access." |
|
|
exit 1 |
|
|
} |
|
|
|
|
|
echo "Transferring files..." |
|
|
scp -r $DEPLOY_DIR/* $WEB_USER@$WEB_SERVER:$REMOTE_PATH/ || { |
|
|
echo "❌ Failed to copy files. Check SSH access and permissions." |
|
|
exit 1 |
|
|
} |
|
|
|
|
|
echo "✅ Files copied successfully" |
|
|
|
|
|
# Deploy on remote server |
|
|
echo "🚀 Building and starting container on web server..." |
|
|
ssh $WEB_USER@$WEB_SERVER << EOF |
|
|
cd $REMOTE_PATH |
|
|
|
|
|
echo "Stopping existing container (if running)..." |
|
|
docker-compose down 2>/dev/null || true |
|
|
docker rm -f $CONTAINER_NAME 2>/dev/null || true |
|
|
|
|
|
echo "Building new container..." |
|
|
docker-compose build --no-cache |
|
|
|
|
|
echo "Starting container on port $PORT..." |
|
|
docker-compose up -d |
|
|
|
|
|
echo "Waiting for container to be ready..." |
|
|
sleep 5 |
|
|
|
|
|
# Check if container is running |
|
|
if docker ps | grep -q $CONTAINER_NAME; then |
|
|
echo "✅ Container is running successfully!" |
|
|
docker-compose ps |
|
|
else |
|
|
echo "❌ Container failed to start. Checking logs..." |
|
|
docker-compose logs |
|
|
exit 1 |
|
|
fi |
|
|
|
|
|
# Test health endpoint |
|
|
echo "Testing health endpoint..." |
|
|
if curl -s http://localhost:$PORT/health > /dev/null; then |
|
|
echo "✅ Health check passed!" |
|
|
else |
|
|
echo "⚠️ Health check failed, but container is running" |
|
|
fi |
|
|
|
|
|
echo "" |
|
|
echo "=== DEPLOYMENT SUMMARY ===" |
|
|
echo "Container: $CONTAINER_NAME" |
|
|
echo "Status: \$(docker ps --format 'table {{.Names}}\\t{{.Status}}\\t{{.Ports}}' | grep $CONTAINER_NAME)" |
|
|
echo "Access URL: http://$WEB_SERVER:$PORT/" |
|
|
echo "==========================" |
|
|
EOF |
|
|
|
|
|
# Clean up local deployment directory |
|
|
echo "🧹 Cleaning up local files..." |
|
|
rm -rf $DEPLOY_DIR |
|
|
|
|
|
# Final status check |
|
|
echo "" |
|
|
echo "🎯 Testing final deployment..." |
|
|
if curl -s --connect-timeout 10 http://$WEB_SERVER:$PORT/health | grep -q "healthy"; then |
|
|
echo "✅ Website is live and healthy!" |
|
|
echo "" |
|
|
echo "==========================================" |
|
|
echo "🚀 DEPLOYMENT SUCCESSFUL!" |
|
|
echo "==========================================" |
|
|
echo "Website URL: http://$WEB_SERVER:$PORT/" |
|
|
echo "Health Check: http://$WEB_SERVER:$PORT/health" |
|
|
echo "" |
|
|
echo "Container Management:" |
|
|
echo " View logs: ssh $WEB_USER@$WEB_SERVER 'cd $REMOTE_PATH && docker-compose logs -f'" |
|
|
echo " Restart: ssh $WEB_USER@$WEB_SERVER 'cd $REMOTE_PATH && docker-compose restart'" |
|
|
echo " Stop: ssh $WEB_USER@$WEB_SERVER 'cd $REMOTE_PATH && docker-compose down'" |
|
|
echo " Update: Re-run this script" |
|
|
echo "" |
|
|
echo "NPM Reverse Proxy Config:" |
|
|
echo " Scheme: http" |
|
|
echo " Forward Hostname/IP: $WEB_SERVER" |
|
|
echo " Forward Port: $PORT" |
|
|
echo " Block Common Exploits: ✓" |
|
|
echo " Websockets Support: ✓" |
|
|
echo "==========================================" |
|
|
else |
|
|
echo "❌ Health check failed. Website may not be accessible." |
|
|
echo "Check the container status manually:" |
|
|
echo " ssh $WEB_USER@$WEB_SERVER 'docker ps'" |
|
|
echo " ssh $WEB_USER@$WEB_SERVER 'cd $REMOTE_PATH && docker-compose logs'" |
|
|
exit 1 |
|
|
fi |