feat: Implement comprehensive backup web application with Docker, systemd service, and Gunicorn support

This commit is contained in:
Peter Wood
2025-06-18 10:02:07 -04:00
parent 6d726cb015
commit 8cd33d4568
11 changed files with 799 additions and 42 deletions

150
run-backup-web-screen.sh Executable file
View File

@@ -0,0 +1,150 @@
#!/bin/bash
# Simple script to run backup web app in a persistent screen session
SESSION_NAME="backup-web-app"
APP_DIR="/home/acedanger/shell"
PYTHON_CMD="python3"
# Colors for output
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
print_status() {
echo -e "${GREEN}[INFO]${NC} $1"
}
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
check_screen() {
if ! command -v screen &> /dev/null; then
print_error "Screen is not installed. Install it with: sudo apt install screen"
exit 1
fi
}
start_app() {
check_screen
# Check if session already exists
if screen -list | grep -q "$SESSION_NAME"; then
print_warning "Session '$SESSION_NAME' already exists"
print_status "Use './run-backup-web-screen.sh status' to check or './run-backup-web-screen.sh stop' to stop"
exit 1
fi
print_status "Starting backup web app in screen session '$SESSION_NAME'..."
# Start new detached screen session
cd "$APP_DIR" || exit 1
screen -dmS "$SESSION_NAME" bash -c "
export BACKUP_ROOT=/mnt/share/media/backups
export FLASK_ENV=production
$PYTHON_CMD backup-web-app.py
"
sleep 2
if screen -list | grep -q "$SESSION_NAME"; then
print_status "✅ Backup web app started successfully!"
print_status "Session: $SESSION_NAME"
print_status "URL: http://localhost:5000"
print_status ""
print_status "Commands:"
print_status " View logs: ./run-backup-web-screen.sh logs"
print_status " Stop app: ./run-backup-web-screen.sh stop"
print_status " Status: ./run-backup-web-screen.sh status"
else
print_error "Failed to start the application"
exit 1
fi
}
stop_app() {
if screen -list | grep -q "$SESSION_NAME"; then
print_status "Stopping backup web app..."
screen -S "$SESSION_NAME" -X quit
print_status "✅ Application stopped"
else
print_warning "No session '$SESSION_NAME' found"
fi
}
status_app() {
if screen -list | grep -q "$SESSION_NAME"; then
print_status "✅ Backup web app is running"
print_status "Session details:"
screen -list | grep "$SESSION_NAME"
print_status ""
print_status "Access the session with: screen -r $SESSION_NAME"
print_status "Detach from session with: Ctrl+A, then D"
else
print_warning "❌ Backup web app is not running"
fi
}
show_logs() {
if screen -list | grep -q "$SESSION_NAME"; then
print_status "Connecting to session '$SESSION_NAME'..."
print_status "Press Ctrl+A, then D to detach from the session"
screen -r "$SESSION_NAME"
else
print_error "No session '$SESSION_NAME' found. App is not running."
fi
}
restart_app() {
print_status "Restarting backup web app..."
stop_app
sleep 2
start_app
}
show_help() {
echo "Backup Web App Screen Manager"
echo
echo "Usage: $0 {start|stop|restart|status|logs|help}"
echo
echo "Commands:"
echo " start - Start the app in a screen session"
echo " stop - Stop the app"
echo " restart - Restart the app"
echo " status - Check if app is running"
echo " logs - Connect to the screen session to view logs"
echo " help - Show this help message"
}
case "${1:-}" in
start)
start_app
;;
stop)
stop_app
;;
restart)
restart_app
;;
status)
status_app
;;
logs)
show_logs
;;
help|--help|-h)
show_help
;;
*)
print_error "Invalid command: ${1:-}"
echo
show_help
exit 1
;;
esac