Complete PDF Sort and Merge Flask Application
- Full-featured web application for PDF processing - Microsoft Entra (Azure AD) authentication with PKCE - Parallel PDF sorting and merging capabilities - Job management system with real-time progress tracking - Modern web UI with responsive design - Comprehensive error handling and logging - Ubuntu installation script for easy deployment - Environment configuration for secure credential management
This commit is contained in:
1 parent
31c2d27a62
commit
144adf64c4
18 files changed
+2903
-2
No files matched your search
@@ -0,0 +1,237 @@
|
||||
#!/bin/bash
|
||||
|
||||
# PDF Sort and Merge Application - Ubuntu Installation Script
|
||||
# This script installs and configures the Flask web application for PDF processing
|
||||
|
||||
set -e # Exit on any error
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Logging functions
|
||||
log_info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
log_success() {
|
||||
echo -e "${GREEN}[SUCCESS]${NC} $1"
|
||||
}
|
||||
|
||||
log_warning() {
|
||||
echo -e "${YELLOW}[WARNING]${NC} $1"
|
||||
}
|
||||
|
||||
log_error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1"
|
||||
}
|
||||
|
||||
# Check if running as root
|
||||
if [[ $EUID -eq 0 ]]; then
|
||||
log_error "This script should not be run as root. Please run as a regular user with sudo privileges."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Check Ubuntu version
|
||||
UBUNTU_VERSION=$(lsb_release -rs)
|
||||
log_info "Detected Ubuntu version: $UBUNTU_VERSION"
|
||||
|
||||
# Update system
|
||||
log_info "Updating system packages..."
|
||||
sudo apt update && sudo apt upgrade -y
|
||||
|
||||
# Install Python 3.9+ and pip
|
||||
log_info "Installing Python and pip..."
|
||||
sudo apt install -y python3 python3-pip python3-venv python3-dev
|
||||
|
||||
# Install system dependencies for PDF processing
|
||||
log_info "Installing system dependencies..."
|
||||
sudo apt install -y build-essential libpoppler-cpp-dev pkg-config
|
||||
|
||||
# Install Node.js and npm (for potential frontend assets)
|
||||
log_info "Installing Node.js and npm..."
|
||||
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
|
||||
sudo apt install -y nodejs
|
||||
|
||||
# Create application directory
|
||||
APP_DIR="$HOME/pdf-sort-merge"
|
||||
log_info "Creating application directory: $APP_DIR"
|
||||
mkdir -p "$APP_DIR"
|
||||
cd "$APP_DIR"
|
||||
|
||||
# Clone or download the application
|
||||
# Note: Replace with your actual repository URL
|
||||
REPO_URL="https://github.com/yourusername/pdf-sort-merge.git"
|
||||
log_info "Cloning application repository..."
|
||||
if command -v git &> /dev/null; then
|
||||
sudo apt install -y git
|
||||
git clone "$REPO_URL" .
|
||||
else
|
||||
log_warning "Git not available. Please manually download and extract the application files to $APP_DIR"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Create Python virtual environment
|
||||
log_info "Creating Python virtual environment..."
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
|
||||
# Install Python dependencies
|
||||
log_info "Installing Python dependencies..."
|
||||
pip install --upgrade pip
|
||||
pip install -r requirements.txt
|
||||
|
||||
# Create .env file template
|
||||
log_info "Creating environment configuration..."
|
||||
if [ ! -f .env ]; then
|
||||
cat > .env << 'EOF'
|
||||
# Microsoft Entra (Azure AD) Configuration
|
||||
# Get these values from your Azure AD app registration in the Azure portal
|
||||
|
||||
# Azure AD Tenant ID (Directory ID)
|
||||
AZURE_TENANT_ID=your-tenant-id-here
|
||||
|
||||
# Azure AD Client ID (Application ID)
|
||||
AZURE_CLIENT_ID=your-client-id-here
|
||||
|
||||
# Azure AD Client Secret
|
||||
AZURE_CLIENT_SECRET=your-client-secret-here
|
||||
|
||||
# Azure AD Authority URL (usually https://login.microsoftonline.com/{tenant_id})
|
||||
AZURE_AUTHORITY=https://login.microsoftonline.com/your-tenant-id-here
|
||||
|
||||
# Redirect URI (must match what's configured in Azure AD app registration)
|
||||
AZURE_REDIRECT_URI=http://localhost:5000/auth/callback
|
||||
|
||||
# Scopes to request (openid, profile, email are common)
|
||||
AZURE_SCOPES=openid profile email
|
||||
|
||||
# Flask Configuration
|
||||
SECRET_KEY=your-secret-key-here-change-this-in-production
|
||||
EOF
|
||||
log_warning "Created .env template. You MUST edit it with your Azure AD credentials before running the app."
|
||||
else
|
||||
log_info ".env file already exists"
|
||||
fi
|
||||
|
||||
# Create systemd service file
|
||||
log_info "Creating systemd service..."
|
||||
SERVICE_FILE="/etc/systemd/system/pdf-sort-merge.service"
|
||||
sudo tee "$SERVICE_FILE" > /dev/null << EOF
|
||||
[Unit]
|
||||
Description=PDF Sort and Merge Flask Application
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=$USER
|
||||
WorkingDirectory=$APP_DIR
|
||||
Environment=PATH=$APP_DIR/venv/bin
|
||||
ExecStart=$APP_DIR/venv/bin/python $APP_DIR/app.py
|
||||
Restart=always
|
||||
RestartSec=5
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
EOF
|
||||
|
||||
# Set proper permissions
|
||||
sudo chmod 644 "$SERVICE_FILE"
|
||||
|
||||
# Create log directory
|
||||
log_info "Creating log directory..."
|
||||
sudo mkdir -p /var/log/pdf-sort-merge
|
||||
sudo chown $USER:$USER /var/log/pdf-sort-merge
|
||||
|
||||
# Create application data directories
|
||||
log_info "Creating application data directories..."
|
||||
mkdir -p results static templates
|
||||
|
||||
# Set up firewall (optional)
|
||||
log_info "Configuring firewall..."
|
||||
sudo ufw allow 5000/tcp || log_warning "Failed to configure firewall - you may need to do this manually"
|
||||
|
||||
# Enable and start service
|
||||
log_info "Enabling and starting service..."
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable pdf-sort-merge
|
||||
sudo systemctl start pdf-sort-merge
|
||||
|
||||
# Check service status
|
||||
sleep 3
|
||||
if sudo systemctl is-active --quiet pdf-sort-merge; then
|
||||
log_success "Service started successfully!"
|
||||
else
|
||||
log_error "Service failed to start. Check logs with: sudo journalctl -u pdf-sort-merge -f"
|
||||
fi
|
||||
|
||||
# Create management script
|
||||
log_info "Creating management script..."
|
||||
cat > manage.sh << 'EOF'
|
||||
#!/bin/bash
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
sudo systemctl start pdf-sort-merge
|
||||
echo "Service started"
|
||||
;;
|
||||
stop)
|
||||
sudo systemctl stop pdf-sort-merge
|
||||
echo "Service stopped"
|
||||
;;
|
||||
restart)
|
||||
sudo systemctl restart pdf-sort-merge
|
||||
echo "Service restarted"
|
||||
;;
|
||||
status)
|
||||
sudo systemctl status pdf-sort-merge
|
||||
;;
|
||||
logs)
|
||||
sudo journalctl -u pdf-sort-merge -f
|
||||
;;
|
||||
update)
|
||||
cd /home/$USER/pdf-sort-merge
|
||||
source venv/bin/activate
|
||||
git pull
|
||||
pip install -r requirements.txt
|
||||
sudo systemctl restart pdf-sort-merge
|
||||
echo "Application updated"
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {start|stop|restart|status|logs|update}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
EOF
|
||||
|
||||
chmod +x manage.sh
|
||||
|
||||
# Final instructions
|
||||
log_success "Installation completed!"
|
||||
echo ""
|
||||
echo "=================================================================="
|
||||
echo "NEXT STEPS:"
|
||||
echo "1. Edit the .env file with your Azure AD credentials:"
|
||||
echo " nano $APP_DIR/.env"
|
||||
echo ""
|
||||
echo "2. Configure your Azure AD app registration with redirect URI:"
|
||||
echo " http://your-server-ip:5000/auth/callback"
|
||||
echo ""
|
||||
echo "3. Access the application at:"
|
||||
echo " http://localhost:5000"
|
||||
echo ""
|
||||
echo "MANAGEMENT COMMANDS:"
|
||||
echo " Start service: sudo systemctl start pdf-sort-merge"
|
||||
echo " Stop service: sudo systemctl stop pdf-sort-merge"
|
||||
echo " Check status: sudo systemctl status pdf-sort-merge"
|
||||
echo " View logs: sudo journalctl -u pdf-sort-merge -f"
|
||||
echo " Update app: ./manage.sh update"
|
||||
echo "=================================================================="
|
||||
|
||||
# Check if .env needs configuration
|
||||
if grep -q "your-tenant-id-here" .env; then
|
||||
log_warning "IMPORTANT: Configure your .env file before using the application!"
|
||||
fi
|
||||
Reference in new issue
Block a user