Initial Commit
This commit is contained in:
255
setup.sh
Executable file
255
setup.sh
Executable file
@@ -0,0 +1,255 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Docker Dashboard Setup Script
|
||||
# This script sets up and launches the Docker Dashboard as a background process
|
||||
|
||||
set -e
|
||||
|
||||
echo "🚀 Docker Dashboard Setup Script"
|
||||
echo "================================"
|
||||
|
||||
# Get script directory
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Function to print colored output
|
||||
print_status() {
|
||||
echo -e "${GREEN}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
print_warning() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
print_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# Check if running as root for Docker access
|
||||
check_permissions() {
|
||||
if [[ $EUID -ne 0 ]]; then
|
||||
print_warning "This script needs to run with sudo for Docker access"
|
||||
print_warning "Rerunning with sudo..."
|
||||
exec sudo "$0" "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
# Check if Docker is running
|
||||
check_docker() {
|
||||
if ! systemctl is-active --quiet docker; then
|
||||
print_warning "Docker service is not running. Starting Docker..."
|
||||
systemctl start docker
|
||||
fi
|
||||
|
||||
if ! docker info >/dev/null 2>&1; then
|
||||
print_error "Docker is not accessible. Please check Docker installation"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
print_status "Docker is running and accessible"
|
||||
}
|
||||
|
||||
# Install Python dependencies
|
||||
install_dependencies() {
|
||||
print_status "Installing Python dependencies..."
|
||||
|
||||
# Check if pip is available
|
||||
if ! command -v pip3 &> /dev/null; then
|
||||
print_error "pip3 is not installed. Please install pip3 first"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Install requirements
|
||||
if [[ -f "requirements.txt" ]]; then
|
||||
pip3 install -r requirements.txt
|
||||
else
|
||||
pip3 install flask flask-cors docker requests python-dotenv
|
||||
fi
|
||||
|
||||
print_status "Dependencies installed successfully"
|
||||
}
|
||||
|
||||
# Setup environment file
|
||||
setup_environment() {
|
||||
if [[ ! -f ".env" ]]; then
|
||||
print_status "Creating .env file from template..."
|
||||
cp .env.example .env
|
||||
print_status "Please edit .env file with your specific configuration"
|
||||
else
|
||||
print_status ".env file already exists"
|
||||
fi
|
||||
|
||||
# Source the environment file
|
||||
source .env
|
||||
|
||||
# Set defaults if not provided
|
||||
export PORT=${PORT:-5000}
|
||||
export HOST=${HOST:-0.0.0.0}
|
||||
export DEBUG=${DEBUG:-False}
|
||||
export REFRESH_INTERVAL=${REFRESH_INTERVAL:-30}
|
||||
|
||||
print_status "Environment configured"
|
||||
}
|
||||
|
||||
# Initialize database
|
||||
initialize_database() {
|
||||
print_status "Initializing database..."
|
||||
|
||||
# Create database if it doesn't exist
|
||||
if [[ ! -f "dashboard.db" ]]; then
|
||||
python3 -c "
|
||||
import database
|
||||
db = database.DatabaseManager()
|
||||
db.init_db()
|
||||
print('Database initialized successfully')
|
||||
"
|
||||
else
|
||||
print_status "Database already exists"
|
||||
fi
|
||||
}
|
||||
|
||||
# Kill existing processes
|
||||
kill_existing_processes() {
|
||||
print_status "Checking for existing processes..."
|
||||
|
||||
# Kill existing Python processes on the port
|
||||
PID=$(lsof -t -i :${PORT} 2>/dev/null || echo "")
|
||||
if [[ -n "$PID" ]]; then
|
||||
print_warning "Killing existing process on port ${PORT} (PID: $PID)"
|
||||
kill -TERM "$PID" 2>/dev/null || true
|
||||
sleep 2
|
||||
kill -KILL "$PID" 2>/dev/null || true
|
||||
fi
|
||||
}
|
||||
|
||||
# Launch application
|
||||
launch_application() {
|
||||
print_status "Launching Docker Dashboard..."
|
||||
|
||||
# Create logs directory
|
||||
mkdir -p logs
|
||||
|
||||
# Launch the application in background
|
||||
nohup python3 api.py > logs/dashboard.log 2>&1 &
|
||||
|
||||
# Get the process ID
|
||||
APP_PID=$!
|
||||
|
||||
# Wait a moment for the app to start
|
||||
sleep 3
|
||||
|
||||
# Check if the process is still running
|
||||
if kill -0 "$APP_PID" 2>/dev/null; then
|
||||
print_status "Application started successfully (PID: $APP_PID)"
|
||||
print_status "Dashboard available at: http://localhost:${PORT}"
|
||||
print_status "Logs available at: logs/dashboard.log"
|
||||
|
||||
# Save PID to file
|
||||
echo "$APP_PID" > dashboard.pid
|
||||
|
||||
print_status ""
|
||||
print_status "To stop the application, run:"
|
||||
print_status " sudo ./stop.sh"
|
||||
print_status ""
|
||||
print_status "To view logs:"
|
||||
print_status " tail -f logs/dashboard.log"
|
||||
else
|
||||
print_error "Failed to start application. Check logs/dashboard.log for details"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Create stop script
|
||||
create_stop_script() {
|
||||
cat > stop.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
|
||||
# Stop Docker Dashboard Script
|
||||
|
||||
if [[ -f "dashboard.pid" ]]; then
|
||||
PID=$(cat dashboard.pid)
|
||||
if kill -0 "$PID" 2>/dev/null; then
|
||||
echo "Stopping Docker Dashboard (PID: $PID)..."
|
||||
kill -TERM "$PID"
|
||||
sleep 2
|
||||
|
||||
if kill -0 "$PID" 2>/dev/null; then
|
||||
echo "Force stopping..."
|
||||
kill -KILL "$PID"
|
||||
fi
|
||||
|
||||
rm dashboard.pid
|
||||
echo "Application stopped successfully"
|
||||
else
|
||||
echo "Application is not running"
|
||||
rm -f dashboard.pid
|
||||
fi
|
||||
else
|
||||
echo "PID file not found. Attempting to kill by port..."
|
||||
PID=$(lsof -t -i :5000 2>/dev/null || echo "")
|
||||
if [[ -n "$PID" ]]; then
|
||||
echo "Stopping process on port 5000 (PID: $PID)..."
|
||||
kill -TERM "$PID"
|
||||
sleep 2
|
||||
|
||||
if kill -0 "$PID" 2>/dev/null; then
|
||||
echo "Force stopping..."
|
||||
kill -KILL "$PID"
|
||||
fi
|
||||
|
||||
echo "Application stopped successfully"
|
||||
else
|
||||
echo "No application found running on port 5000"
|
||||
fi
|
||||
fi
|
||||
EOF
|
||||
|
||||
chmod +x stop.sh
|
||||
print_status "Stop script created: stop.sh"
|
||||
}
|
||||
|
||||
# Main execution
|
||||
main() {
|
||||
print_status "Starting Docker Dashboard setup..."
|
||||
|
||||
check_permissions
|
||||
check_docker
|
||||
install_dependencies
|
||||
setup_environment
|
||||
initialize_database
|
||||
kill_existing_processes
|
||||
create_stop_script
|
||||
launch_application
|
||||
|
||||
print_status ""
|
||||
print_status "🎉 Docker Dashboard setup complete!"
|
||||
print_status "Dashboard is running at: http://localhost:${PORT}"
|
||||
print_status ""
|
||||
print_status "Next steps:"
|
||||
print_status "1. Open your browser to http://localhost:${PORT}"
|
||||
print_status "2. Click 'Sync Apps' to load your Docker containers"
|
||||
print_status "3. Edit tiles by clicking the 'Edit' button on each tile"
|
||||
print_status "4. Use ./stop.sh to stop the application"
|
||||
}
|
||||
|
||||
# Handle command line arguments
|
||||
case "${1:-}" in
|
||||
"--help"|"-h")
|
||||
echo "Usage: $0 [--help]"
|
||||
echo ""
|
||||
echo "This script sets up and launches the Docker Dashboard"
|
||||
echo ""
|
||||
echo "Options:"
|
||||
echo " --help, -h Show this help message"
|
||||
exit 0
|
||||
;;
|
||||
*)
|
||||
main
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user