mirror of
https://github.com/pacnpal/simpleguardhome.git
synced 2025-12-20 04:21:13 -05:00
refactor(docker): simplify Dockerfile by removing unnecessary monitoring tools and backup hierarchy setup
This commit is contained in:
111
Dockerfile
111
Dockerfile
@@ -1,113 +1,38 @@
|
||||
# ULTIMATE SAFETY VERSION 9000
|
||||
FROM python:3.11-slim-bullseye
|
||||
|
||||
# Install ALL monitoring and verification tools
|
||||
RUN apt-get update && \
|
||||
DEBIAN_FRONTEND=noninteractive apt-get install -y \
|
||||
--no-install-recommends \
|
||||
tree \
|
||||
curl \
|
||||
procps \
|
||||
htop \
|
||||
net-tools \
|
||||
lsof \
|
||||
sysstat \
|
||||
iproute2 \
|
||||
&& apt-get clean \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# STEP 1: CREATE BACKUP HIERARCHY
|
||||
RUN for backup in main backup1 backup2 backup3 backup4 rescue emergency last_resort ultrabackup; do \
|
||||
mkdir -p "/app/$backup/src/simpleguardhome" && \
|
||||
mkdir -p "/app/$backup/logs" && \
|
||||
mkdir -p "/app/$backup/monitor" && \
|
||||
chmod -R 755 "/app/$backup" && \
|
||||
echo "Created $backup hierarchy"; \
|
||||
done && \
|
||||
mkdir -p /app/monitor
|
||||
# Install essential system packages
|
||||
RUN apt-get update && \
|
||||
apt-get install -y --no-install-recommends \
|
||||
curl && \
|
||||
apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# STEP 2: Install Python packages with verification
|
||||
# Install Python packages
|
||||
COPY requirements.txt .
|
||||
RUN pip install --no-cache-dir -r requirements.txt && \
|
||||
pip install --no-cache-dir \
|
||||
debugpy \
|
||||
psutil \
|
||||
requests \
|
||||
watchdog \
|
||||
prometheus_client \
|
||||
checksumdir \
|
||||
&& \
|
||||
pip freeze > /app/requirements.frozen.txt && \
|
||||
echo "⚡ Installed and verified packages:" && \
|
||||
pip list
|
||||
RUN pip install --no-cache-dir -r requirements.txt
|
||||
|
||||
# STEP 3: Copy source with CHECKSUM verification and create symlink
|
||||
COPY src/simpleguardhome /app/main/src/simpleguardhome/
|
||||
RUN mkdir -p /app/src && \
|
||||
ln -s /app/main/src /app/src && \
|
||||
echo "Creating verified backups..." && \
|
||||
for backup in backup1 backup2 backup3 backup4 rescue emergency last_resort ultrabackup; do \
|
||||
cp -r /app/main/src/simpleguardhome/* "/app/$backup/src/simpleguardhome/" && \
|
||||
find "/app/$backup/src/simpleguardhome" -type f -exec md5sum {} \; > "/app/$backup/checksums.md5" && \
|
||||
echo "✓ Created and verified $backup"; \
|
||||
done
|
||||
# Copy source code
|
||||
COPY src/simpleguardhome /app/src/simpleguardhome/
|
||||
|
||||
# STEP 4: Set up monitoring
|
||||
COPY monitor.py /app/monitor/
|
||||
RUN chmod +x /app/monitor/monitor.py && \
|
||||
echo "✓ Installed monitoring system"
|
||||
|
||||
# STEP 5: Set up health check script
|
||||
# Set up health check
|
||||
COPY healthcheck.py /usr/local/bin/
|
||||
RUN chmod +x /usr/local/bin/healthcheck.py
|
||||
|
||||
# Add health check
|
||||
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
||||
CMD python3 /usr/local/bin/healthcheck.py
|
||||
|
||||
# Set up environment with ALL backup paths
|
||||
ENV PYTHONPATH=/app/main/src:/app/backup1/src:/app/backup2/src:/app/backup3/src:/app/backup4/src:/app/rescue/src:/app/emergency/src:/app/last_resort/src:/app/ultrabackup/src \
|
||||
PYTHONBREAKPOINT=debugpy.breakpoint
|
||||
# Environment setup
|
||||
ENV PYTHONPATH=/app/src \
|
||||
ADGUARD_HOST="http://localhost" \
|
||||
ADGUARD_PORT=3000
|
||||
|
||||
# Environment variables with ALL recovery modes
|
||||
ENV ADGUARD_HOST="http://localhost" \
|
||||
ADGUARD_PORT=3000 \
|
||||
RESCUE_MODE=0 \
|
||||
EMERGENCY_MODE=0 \
|
||||
LAST_RESORT_MODE=0 \
|
||||
ULTRA_SAFE_MODE=0 \
|
||||
BACKUP_MONITOR=1
|
||||
# Expose application port
|
||||
EXPOSE 8000
|
||||
|
||||
# Expose ports (including debug and monitoring)
|
||||
EXPOSE 8000 5678 9090
|
||||
|
||||
# Set up backup volume hierarchy
|
||||
RUN for backup in rules_backup rules_backup.1 rules_backup.2 rules_backup.3 rules_backup.4 rules_backup.emergency; do \
|
||||
mkdir -p "/app/$backup" && \
|
||||
chmod 777 "/app/$backup" && \
|
||||
echo "Created and verified: /app/$backup"; \
|
||||
done
|
||||
|
||||
# ULTRA FINAL VERIFICATION
|
||||
RUN echo "=== 🚀 ULTRA FINAL VERIFICATION ===" && \
|
||||
for backup in main backup1 backup2 backup3 backup4 rescue emergency last_resort ultrabackup; do \
|
||||
echo "Verifying $backup:" && \
|
||||
tree "/app/$backup" && \
|
||||
echo "Testing import from $backup:" && \
|
||||
export BACKUP_NAME="$backup" && \
|
||||
PYTHONPATH="/app/$backup/src" python3 -c "import os; from simpleguardhome.main import app; print(f'Import from {os.environ[\"BACKUP_NAME\"]} successful')" && \
|
||||
echo "Verifying checksums for $backup:" && \
|
||||
cd "/app/$backup" && md5sum -c checksums.md5; \
|
||||
done && \
|
||||
echo "Testing monitoring system:" && \
|
||||
python3 -c "import psutil; print('Monitoring system ready')" && \
|
||||
echo "✅ EVERYTHING IS VERIFIED, BACKED UP, AND MONITORED!"
|
||||
|
||||
# Copy entrypoint script
|
||||
# Copy and set up entrypoint
|
||||
COPY docker-entrypoint.sh /usr/local/bin/
|
||||
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
|
||||
|
||||
# Start monitoring and application
|
||||
ENTRYPOINT ["docker-entrypoint.sh"]
|
||||
@@ -1,266 +1,13 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# ULTIMATE SAFETY CONTROL SYSTEM V9000
|
||||
echo "[$(date '+%Y-%m-%d %H:%M:%S')] Starting SimpleGuardHome..."
|
||||
|
||||
# If we're not in ANY recovery mode, exit on ANY error
|
||||
if [[ "$RESCUE_MODE" != "1" && "$EMERGENCY_MODE" != "1" && "$LAST_RESORT_MODE" != "1" && "$ULTRA_SAFE_MODE" != "1" ]]; then
|
||||
set -e
|
||||
fi
|
||||
|
||||
# Colors for ALL THE WARNINGS
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
PURPLE='\033[0;35m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m'
|
||||
|
||||
# Logging with timestamps, colors, and BACKUP LOGGING
|
||||
log() {
|
||||
local msg="$1"
|
||||
local color="${2:-$NC}"
|
||||
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
||||
echo -e "${color}[${timestamp}] $msg${NC}"
|
||||
|
||||
# Write to ALL log files for redundancy!
|
||||
for backup in main backup1 backup2 backup3 backup4 rescue emergency last_resort ultrabackup; do
|
||||
echo "[${timestamp}] $msg" >> "/app/$backup/logs/system.log"
|
||||
done
|
||||
}
|
||||
|
||||
# ULTRA monitoring of EVERYTHING
|
||||
monitor_everything() {
|
||||
while true; do
|
||||
# Monitor the process
|
||||
if [ -n "$1" ]; then
|
||||
cpu_usage=$(ps -p $1 -o %cpu | tail -1)
|
||||
mem_usage=$(ps -p $1 -o %mem | tail -1)
|
||||
if (( $(echo "$cpu_usage > 90" | bc -l) )) || (( $(echo "$mem_usage > 90" | bc -l) )); then
|
||||
log "⚠️ HIGH RESOURCE USAGE - CPU: ${cpu_usage}%, MEM: ${mem_usage}%" $YELLOW
|
||||
fi
|
||||
fi
|
||||
|
||||
# Monitor the monitoring system
|
||||
if ! pgrep -f "/app/monitor/monitor.py" > /dev/null; then
|
||||
log "🚨 MONITOR SYSTEM DOWN - RESTARTING!" $RED
|
||||
python3 /app/monitor/monitor.py &
|
||||
fi
|
||||
|
||||
# Verify ALL backups
|
||||
for backup in main backup1 backup2 backup3 backup4 rescue emergency last_resort ultrabackup; do
|
||||
if [ ! -d "/app/$backup/src/simpleguardhome" ]; then
|
||||
log "💥 BACKUP MISSING: $backup - INITIATING RECOVERY!" $RED
|
||||
# Try to restore from another backup
|
||||
for source in main backup1 backup2 backup3 backup4 rescue emergency last_resort ultrabackup; do
|
||||
if [ "$source" != "$backup" ] && [ -d "/app/$source/src/simpleguardhome" ]; then
|
||||
cp -r "/app/$source/src/simpleguardhome" "/app/$backup/src/"
|
||||
log "🔄 Restored $backup from $source" $GREEN
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
done
|
||||
|
||||
# Verify checksums
|
||||
for backup in main backup1 backup2 backup3 backup4 rescue emergency last_resort ultrabackup; do
|
||||
if [ -f "/app/$backup/checksums.md5" ]; then
|
||||
if ! (cd "/app/$backup" && md5sum -c --quiet checksums.md5 2>/dev/null); then
|
||||
log "🚨 CHECKSUM FAILURE IN $backup - INITIATING REPAIR!" $RED
|
||||
repair_backup "$backup"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
sleep 5
|
||||
done
|
||||
}
|
||||
|
||||
# EMERGENCY debug with EVERYTHING
|
||||
emergency_debug() {
|
||||
log "🚨 ULTRA EMERGENCY DEBUG ACTIVATED 🚨" $RED
|
||||
|
||||
# System state
|
||||
log "System Status:" $YELLOW
|
||||
uptime
|
||||
log "Memory Usage:" $YELLOW
|
||||
free -h
|
||||
log "Disk Usage:" $YELLOW
|
||||
df -h
|
||||
log "Process Tree:" $YELLOW
|
||||
pstree -p
|
||||
log "Network Status:" $YELLOW
|
||||
netstat -tulpn
|
||||
log "File Systems:" $YELLOW
|
||||
lsof
|
||||
|
||||
# Backup verification
|
||||
log "Backup Status:" $YELLOW
|
||||
for backup in main backup1 backup2 backup3 backup4 rescue emergency last_resort ultrabackup; do
|
||||
log "Checking $backup:" $BLUE
|
||||
tree "/app/$backup"
|
||||
if [ -f "/app/$backup/checksums.md5" ]; then
|
||||
(cd "/app/$backup" && md5sum -c checksums.md5) || log "❌ Checksum verification failed for $backup" $RED
|
||||
fi
|
||||
done
|
||||
|
||||
# Monitor status
|
||||
log "Monitor Status:" $YELLOW
|
||||
if [ -f "/app/monitor/stats.json" ]; then
|
||||
cat "/app/monitor/stats.json"
|
||||
fi
|
||||
}
|
||||
|
||||
# Repair backup from ANY valid source
|
||||
repair_backup() {
|
||||
local broken_backup=$1
|
||||
log "🔧 Attempting to repair $broken_backup..." $YELLOW
|
||||
|
||||
for source in main backup1 backup2 backup3 backup4 rescue emergency last_resort ultrabackup; do
|
||||
if [ "$source" != "$broken_backup" ] && [ -d "/app/$source/src/simpleguardhome" ]; then
|
||||
if (cd "/app/$source" && md5sum -c --quiet checksums.md5 2>/dev/null); then
|
||||
log "Found valid source: $source" $GREEN
|
||||
cp -r "/app/$source/src/simpleguardhome"/* "/app/$broken_backup/src/simpleguardhome/"
|
||||
cp "/app/$source/checksums.md5" "/app/$broken_backup/"
|
||||
log "✅ Repaired $broken_backup from $source" $GREEN
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
log "💥 CRITICAL: Could not repair $broken_backup from any source!" $RED
|
||||
return 1
|
||||
}
|
||||
|
||||
# Verify EVERYTHING
|
||||
verify_everything() {
|
||||
local error_count=0
|
||||
local repair_count=0
|
||||
|
||||
log "=== 🔍 ULTRA VERIFICATION SYSTEM STARTING ===" $BLUE
|
||||
|
||||
# 1. Verify ALL backup directories
|
||||
for backup in main backup1 backup2 backup3 backup4 rescue emergency last_resort ultrabackup; do
|
||||
if [ ! -d "/app/$backup/src/simpleguardhome" ]; then
|
||||
log "Missing $backup directory - attempting repair..." $RED
|
||||
if ! repair_backup "$backup"; then
|
||||
error_count=$((error_count + 1))
|
||||
else
|
||||
repair_count=$((repair_count + 1))
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# 2. Verify ALL files in ALL backups
|
||||
local required_files=(
|
||||
"__init__.py"
|
||||
"main.py"
|
||||
"adguard.py"
|
||||
"config.py"
|
||||
"templates/index.html"
|
||||
"favicon.ico"
|
||||
)
|
||||
|
||||
for backup in main backup1 backup2 backup3 backup4 rescue emergency last_resort ultrabackup; do
|
||||
for file in "${required_files[@]}"; do
|
||||
if [ ! -f "/app/$backup/src/simpleguardhome/$file" ]; then
|
||||
log "Missing $file in $backup - attempting repair..." $RED
|
||||
if ! repair_backup "$backup"; then
|
||||
error_count=$((error_count + 1))
|
||||
else
|
||||
repair_count=$((repair_count + 1))
|
||||
fi
|
||||
break
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
# 3. Verify ALL checksums
|
||||
for backup in main backup1 backup2 backup3 backup4 rescue emergency last_resort ultrabackup; do
|
||||
if ! (cd "/app/$backup" && md5sum -c --quiet checksums.md5 2>/dev/null); then
|
||||
log "Checksum verification failed for $backup - attempting repair..." $RED
|
||||
if ! repair_backup "$backup"; then
|
||||
error_count=$((error_count + 1))
|
||||
else
|
||||
repair_count=$((repair_count + 1))
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# 4. Verify Python imports from ALL backups
|
||||
for backup in main backup1 backup2 backup3 backup4 rescue emergency last_resort ultrabackup; do
|
||||
if ! PYTHONPATH="/app/$backup/src" python3 -c "
|
||||
import sys
|
||||
import simpleguardhome
|
||||
from simpleguardhome.main import app
|
||||
print(f'Successfully imported from {sys.path[0]}')
|
||||
"; then
|
||||
log "Import verification failed for $backup" $RED
|
||||
error_count=$((error_count + 1))
|
||||
fi
|
||||
done
|
||||
|
||||
# Final verdict with ALL safety modes
|
||||
if [ $error_count -gt 0 ]; then
|
||||
if [ "$ULTRA_SAFE_MODE" = "1" ]; then
|
||||
log "⚠️ ULTRA SAFE MODE: Continuing with $error_count errors" $PURPLE
|
||||
return 0
|
||||
elif [ "$LAST_RESORT_MODE" = "1" ]; then
|
||||
log "⚠️ LAST RESORT MODE: Continuing with $error_count errors" $RED
|
||||
return 0
|
||||
elif [ "$EMERGENCY_MODE" = "1" ]; then
|
||||
log "⚠️ EMERGENCY MODE: $error_count errors remain" $RED
|
||||
return 0
|
||||
elif [ "$RESCUE_MODE" = "1" ]; then
|
||||
log "⚠️ RESCUE MODE: $error_count errors remain" $YELLOW
|
||||
return 0
|
||||
else
|
||||
log "💥 FATAL: Found $error_count errors!" $RED
|
||||
log "Try: RESCUE_MODE=1, EMERGENCY_MODE=1, LAST_RESORT_MODE=1, or ULTRA_SAFE_MODE=1" $YELLOW
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
log "✅ ULTRA VERIFICATION PASSED! ($repair_count repairs performed)" $GREEN
|
||||
return 0
|
||||
}
|
||||
|
||||
# Start monitoring system
|
||||
python3 /app/monitor/monitor.py &
|
||||
|
||||
# Run verification with ALL safety modes
|
||||
if ! verify_everything; then
|
||||
if [[ "$RESCUE_MODE" != "1" && "$EMERGENCY_MODE" != "1" && "$LAST_RESORT_MODE" != "1" && "$ULTRA_SAFE_MODE" != "1" ]]; then
|
||||
log "💥 FATAL: System verification failed!" $RED
|
||||
log "Available recovery modes:" $YELLOW
|
||||
log " 1. RESCUE_MODE=1 (Basic recovery)" $YELLOW
|
||||
log " 2. EMERGENCY_MODE=1 (Aggressive recovery)" $RED
|
||||
log " 3. LAST_RESORT_MODE=1 (Maximum tolerance)" $PURPLE
|
||||
log " 4. ULTRA_SAFE_MODE=1 (Nothing can stop it)" $CYAN
|
||||
# Verify the package is importable
|
||||
if ! python3 -c "from simpleguardhome.main import app"; then
|
||||
echo "Error: Failed to import SimpleGuardHome package"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
log "🚀 Starting SimpleGuardHome with ULTRA SAFETY..." $GREEN
|
||||
|
||||
# Start with ALL safety features
|
||||
if [ "$ULTRA_SAFE_MODE" = "1" ]; then
|
||||
log "👾 ULTRA SAFE MODE ACTIVATED" $PURPLE
|
||||
python3 -m debugpy --listen 0.0.0.0:5678 -m uvicorn simpleguardhome.main:app --host 0.0.0.0 --port 8000 &
|
||||
elif [ "$RESCUE_MODE" = "1" ]; then
|
||||
log "🛠️ RESCUE MODE with debugger on port 5678" $YELLOW
|
||||
python3 -m debugpy --listen 0.0.0.0:5678 -m uvicorn simpleguardhome.main:app --host 0.0.0.0 --port 8000 &
|
||||
elif [ "$EMERGENCY_MODE" = "1" ]; then
|
||||
log "🚨 EMERGENCY MODE with full monitoring" $RED
|
||||
python3 -m uvicorn simpleguardhome.main:app --host 0.0.0.0 --port 8000 &
|
||||
else
|
||||
python3 -m uvicorn simpleguardhome.main:app --host 0.0.0.0 --port 8000 &
|
||||
fi
|
||||
|
||||
# Get server PID and monitor EVERYTHING
|
||||
server_pid=$!
|
||||
monitor_everything $server_pid &
|
||||
monitor_pid=$!
|
||||
|
||||
# Wait for server while monitoring the monitors
|
||||
wait $server_pid
|
||||
# Start the application
|
||||
exec python3 -m uvicorn simpleguardhome.main:app --host 0.0.0.0 --port 8000
|
||||
Reference in New Issue
Block a user