Spaces:
Paused
Paused
# Legal Dashboard - One-Click Deployment Script | |
# ============================================= | |
# This script handles everything: validation, optimization, and deployment | |
set -e # Exit on any error | |
# Colors for beautiful output | |
RED='\033[0;31m' | |
GREEN='\033[0;32m' | |
YELLOW='\033[1;33m' | |
BLUE='\033[0;34m' | |
PURPLE='\033[0;35m' | |
CYAN='\033[0;36m' | |
WHITE='\033[1;37m' | |
NC='\033[0m' | |
# ASCII Art Banner | |
print_banner() { | |
echo -e "${PURPLE}" | |
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" | |
echo "β β" | |
echo "β ποΈ LEGAL DASHBOARD - ONE-CLICK DEPLOYMENT β" | |
echo "β β" | |
echo "β Comprehensive Legal Document Management System β" | |
echo "β Ready for HF Spaces β’ Docker β’ Local Deployment β" | |
echo "β β" | |
echo "ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ" | |
echo -e "${NC}" | |
} | |
# Utility functions | |
print_success() { echo -e "${GREEN}β $1${NC}"; } | |
print_error() { echo -e "${RED}β $1${NC}"; } | |
print_warning() { echo -e "${YELLOW}β οΈ $1${NC}"; } | |
print_info() { echo -e "${BLUE}βΉοΈ $1${NC}"; } | |
print_step() { echo -e "${CYAN}π§ $1${NC}"; } | |
# Progress indicator | |
show_progress() { | |
local duration=$1 | |
local message=$2 | |
echo -n -e "${YELLOW}β³ ${message}${NC}" | |
for ((i=0; i<duration; i++)); do | |
echo -n "." | |
sleep 1 | |
done | |
echo -e " ${GREEN}Done!${NC}" | |
} | |
# Check if command exists | |
command_exists() { | |
command -v "$1" >/dev/null 2>&1 | |
} | |
# Detect operating system | |
detect_os() { | |
if [[ "$OSTYPE" == "linux-gnu"* ]]; then | |
echo "linux" | |
elif [[ "$OSTYPE" == "darwin"* ]]; then | |
echo "macos" | |
elif [[ "$OSTYPE" == "msys" || "$OSTYPE" == "win32" ]]; then | |
echo "windows" | |
else | |
echo "unknown" | |
fi | |
} | |
# Main deployment function | |
main() { | |
local deployment_type="" | |
local project_ready=false | |
print_banner | |
echo "" | |
print_info "Legal Dashboard Deployment Assistant" | |
print_info "Detected OS: $(detect_os)" | |
echo "" | |
# Check if we're in the right directory | |
if [[ ! -f "app.py" && ! -f "run.py" ]]; then | |
print_error "This doesn't appear to be the Legal Dashboard directory." | |
print_info "Please run this script from the project root directory." | |
exit 1 | |
fi | |
print_success "Project directory confirmed" | |
# Deployment type selection | |
echo "" | |
print_step "Select Deployment Type:" | |
echo "" | |
echo -e " ${GREEN}1)${NC} π€ Hugging Face Spaces (Recommended for Demo)" | |
echo -e " ${BLUE}2)${NC} π³ Docker Deployment (Recommended for Production)" | |
echo -e " ${PURPLE}3)${NC} π» Local Development" | |
echo -e " ${CYAN}4)${NC} π§ͺ Run Tests Only" | |
echo -e " ${YELLOW}5)${NC} π Show Project Status" | |
echo "" | |
read -p "Enter your choice (1-5): " choice | |
case $choice in | |
1) | |
deployment_type="huggingface" | |
deploy_to_huggingface | |
;; | |
2) | |
deployment_type="docker" | |
deploy_with_docker | |
;; | |
3) | |
deployment_type="local" | |
setup_local_development | |
;; | |
4) | |
run_comprehensive_tests | |
;; | |
5) | |
show_project_status | |
;; | |
*) | |
print_error "Invalid choice. Please run the script again." | |
exit 1 | |
;; | |
esac | |
} | |
# Hugging Face Spaces deployment | |
deploy_to_huggingface() { | |
print_step "Preparing for Hugging Face Spaces Deployment" | |
echo "" | |
# Check if git is available | |
if ! command_exists git; then | |
print_error "Git is required for HF Spaces deployment" | |
exit 1 | |
fi | |
# Run pre-deployment tests | |
print_info "Running pre-deployment validation..." | |
if python3 final_test.py --quick; then | |
print_success "All critical tests passed" | |
else | |
print_warning "Some tests failed, but continuing with deployment" | |
fi | |
# Create HF Spaces optimized requirements | |
print_step "Creating HF Spaces optimized requirements..." | |
cp requirements-hf-spaces.txt requirements.txt | |
print_success "Requirements optimized for HF Spaces" | |
# Prepare files for HF Spaces | |
print_step "Preparing files for Hugging Face Spaces..." | |
# Create deployment checklist | |
cat > HF_SPACES_SETUP.md << EOF | |
# π€ Hugging Face Spaces Setup Instructions | |
## π Quick Setup Steps: | |
1. **Create New Space:** | |
- Go to https://huggingface.co/new-space | |
- Choose "Gradio" as SDK | |
- Set Python version to 3.10 | |
2. **Upload Files:** | |
- Upload all files from this directory to your Space | |
- The main entry point is \`app.py\` | |
3. **Set Environment Variables in Space Settings:** | |
\`\`\` | |
JWT_SECRET_KEY=your-unique-secret-key-here-$(date +%s) | |
DATABASE_DIR=/tmp/legal_dashboard/data | |
LOG_LEVEL=INFO | |
ENVIRONMENT=production | |
\`\`\` | |
4. **Default Login Credentials:** | |
- Username: \`admin\` | |
- Password: \`admin123\` | |
- **β οΈ CHANGE IMMEDIATELY AFTER FIRST LOGIN!** | |
## π Features Available in HF Spaces: | |
- β Document upload and processing | |
- β Authentication system | |
- β Persian/English interface | |
- β Basic OCR capabilities | |
- β Document management | |
- β Responsive design | |
## π Support: | |
- Check Space logs for any issues | |
- Health check available at your-space-url/health | |
- Report issues via GitHub | |
**Your Legal Dashboard is ready for HF Spaces! π** | |
EOF | |
print_success "HF Spaces setup guide created: HF_SPACES_SETUP.md" | |
echo "" | |
print_success "π Hugging Face Spaces deployment package ready!" | |
echo "" | |
print_info "Next steps:" | |
echo " 1. π Read HF_SPACES_SETUP.md for detailed instructions" | |
echo " 2. π Create a new Space at https://huggingface.co/new-space" | |
echo " 3. π Upload all files from this directory" | |
echo " 4. βοΈ Set environment variables as shown in the guide" | |
echo " 5. π Your Space will automatically build and deploy!" | |
echo "" | |
print_warning "Remember to change the default admin password after deployment!" | |
} | |
# Docker deployment | |
deploy_with_docker() { | |
print_step "Setting up Docker Deployment" | |
echo "" | |
# Check Docker availability | |
if ! command_exists docker; then | |
print_error "Docker is not installed. Please install Docker first." | |
echo " π₯ Download from: https://www.docker.com/get-started" | |
exit 1 | |
fi | |
if ! command_exists docker-compose; then | |
print_warning "Docker Compose not found. Using docker compose instead." | |
fi | |
# Check if Docker is running | |
if ! docker info >/dev/null 2>&1; then | |
print_error "Docker is not running. Please start Docker first." | |
exit 1 | |
fi | |
print_success "Docker is available and running" | |
# Run pre-deployment tests | |
print_info "Running pre-deployment validation..." | |
if python3 final_test.py --quick; then | |
print_success "All critical tests passed" | |
else | |
print_error "Critical tests failed. Please fix issues before deploying." | |
exit 1 | |
fi | |
# Create optimized requirements for Docker | |
print_step "Preparing Docker environment..." | |
cp requirements-docker.txt requirements.txt | |
# Ensure .env file exists | |
if [[ ! -f ".env" ]]; then | |
print_step "Creating .env file..." | |
cat > .env << EOF | |
# Legal Dashboard Environment Configuration | |
JWT_SECRET_KEY=super-secret-jwt-key-change-in-production-$(date +%s) | |
DATABASE_DIR=/app/data | |
LOG_LEVEL=INFO | |
ENVIRONMENT=production | |
WORKERS=4 | |
PORT=8000 | |
PYTHONPATH=/app | |
PYTHONUNBUFFERED=1 | |
EOF | |
print_success ".env file created" | |
fi | |
# Build and start containers | |
print_step "Building Docker containers..." | |
show_progress 5 "Building images" | |
if command_exists docker-compose; then | |
docker-compose build --no-cache | |
print_success "Docker containers built successfully" | |
print_step "Starting Legal Dashboard..." | |
docker-compose up -d | |
# Wait for services to be ready | |
print_info "Waiting for services to start..." | |
sleep 15 | |
# Check if services are running | |
if docker-compose ps | grep -q "Up"; then | |
print_success "π Legal Dashboard is running!" | |
echo "" | |
print_info "π Access your Legal Dashboard:" | |
echo " β’ Dashboard: http://localhost:8000" | |
echo " β’ API Docs: http://localhost:8000/docs" | |
echo " β’ Health Check: http://localhost:8000/api/health" | |
echo "" | |
print_info "π Default Login:" | |
echo " β’ Username: admin" | |
echo " β’ Password: admin123" | |
echo "" | |
print_warning "β οΈ Change the default password immediately!" | |
# Test health endpoint | |
echo "" | |
print_step "Testing deployment..." | |
sleep 5 | |
if curl -f http://localhost:8000/api/health >/dev/null 2>&1; then | |
print_success "Health check passed - deployment successful!" | |
else | |
print_warning "Health check failed - check container logs" | |
echo " π Debug: docker-compose logs" | |
fi | |
else | |
print_error "Failed to start services" | |
echo " π Check logs: docker-compose logs" | |
exit 1 | |
fi | |
else | |
# Use docker build and run | |
docker build -t legal-dashboard . | |
print_success "Docker image built successfully" | |
print_step "Starting Legal Dashboard container..." | |
docker run -d \ | |
--name legal-dashboard \ | |
-p 8000:8000 \ | |
-v $(pwd)/data:/app/data \ | |
-v $(pwd)/logs:/app/logs \ | |
--env-file .env \ | |
legal-dashboard | |
print_success "π Legal Dashboard container started!" | |
echo "" | |
print_info "π Access: http://localhost:8000" | |
print_info "π Logs: docker logs legal-dashboard" | |
print_info "π Stop: docker stop legal-dashboard" | |
fi | |
} | |
# Local development setup | |
setup_local_development() { | |
print_step "Setting up Local Development Environment" | |
echo "" | |
# Check Python version | |
if ! command_exists python3; then | |
print_error "Python 3 is required but not installed" | |
exit 1 | |
fi | |
local python_version=$(python3 --version | cut -d' ' -f2 | cut -d'.' -f1-2) | |
print_info "Python version: $python_version" | |
# Check if virtual environment exists | |
if [[ ! -d "venv" ]]; then | |
print_step "Creating virtual environment..." | |
python3 -m venv venv | |
print_success "Virtual environment created" | |
fi | |
# Activate virtual environment | |
print_step "Activating virtual environment..." | |
source venv/bin/activate 2>/dev/null || source venv/Scripts/activate 2>/dev/null | |
# Install dependencies | |
print_step "Installing dependencies..." | |
show_progress 3 "Installing packages" | |
pip install --upgrade pip | |
pip install -r requirements-dev.txt | |
print_success "Dependencies installed" | |
# Create .env file if it doesn't exist | |
if [[ ! -f ".env" ]]; then | |
print_step "Creating development .env file..." | |
cat > .env << EOF | |
# Legal Dashboard Development Configuration | |
JWT_SECRET_KEY=dev-secret-key-$(date +%s) | |
DATABASE_DIR=./data | |
LOG_LEVEL=DEBUG | |
ENVIRONMENT=development | |
WORKERS=1 | |
PORT=8000 | |
PYTHONPATH=. | |
PYTHONUNBUFFERED=1 | |
EOF | |
print_success ".env file created for development" | |
fi | |
# Run tests | |
print_step "Running comprehensive tests..." | |
if python final_test.py; then | |
print_success "All tests passed!" | |
else | |
print_warning "Some tests failed, but you can still run the development server" | |
fi | |
# Create development startup script | |
cat > start_dev.sh << 'EOF' | |
#!/bin/bash | |
echo "π Starting Legal Dashboard Development Server..." | |
echo "" | |
# Activate virtual environment | |
source venv/bin/activate 2>/dev/null || source venv/Scripts/activate 2>/dev/null | |
# Set development environment | |
export ENVIRONMENT=development | |
export LOG_LEVEL=DEBUG | |
# Start the application | |
echo "π Development server will be available at:" | |
echo " β’ FastAPI: http://localhost:8000" | |
echo " β’ Gradio: http://localhost:7860 (if running app.py)" | |
echo "" | |
echo "π Default Login: admin / admin123" | |
echo "π Press Ctrl+C to stop" | |
echo "" | |
python run.py | |
EOF | |
chmod +x start_dev.sh | |
print_success "π Local development environment ready!" | |
echo "" | |
print_info "π Development files created:" | |
echo " β’ venv/ - Virtual environment" | |
echo " β’ .env - Development configuration" | |
echo " β’ start_dev.sh - Development server launcher" | |
echo "" | |
print_info "π To start development:" | |
echo " ./start_dev.sh" | |
echo "" | |
print_info "π§ͺ To run tests:" | |
echo " python final_test.py" | |
echo "" | |
print_warning "β οΈ Remember to activate the virtual environment:" | |
echo " source venv/bin/activate" | |
} | |
# Run comprehensive tests | |
run_comprehensive_tests() { | |
print_step "Running Comprehensive Test Suite" | |
echo "" | |
# Check if Python is available | |
if ! command_exists python3; then | |
print_error "Python 3 is required for testing" | |
exit 1 | |
fi | |
# Run the test suite | |
print_info "Starting comprehensive validation..." | |
echo "" | |
if python3 final_test.py; then | |
echo "" | |
print_success "π All tests passed! Your Legal Dashboard is ready for deployment." | |
echo "" | |
print_info "π You can now:" | |
echo " 1. Deploy to Hugging Face Spaces" | |
echo " 2. Deploy with Docker" | |
echo " 3. Run locally for development" | |
echo "" | |
print_info "π Need help? Check README_FINAL.md" | |
else | |
echo "" | |
print_warning "β οΈ Some tests failed. Please review the issues above." | |
echo "" | |
print_info "π§ Common fixes:" | |
echo " β’ Install missing dependencies: pip install -r requirements.txt" | |
echo " β’ Check file permissions" | |
echo " β’ Ensure you're in the project directory" | |
echo "" | |
print_info "π For detailed troubleshooting, see DEPLOYMENT_CHECKLIST.md" | |
fi | |
} | |
# Show project status | |
show_project_status() { | |
print_step "Legal Dashboard Project Status" | |
echo "" | |
# Check project structure | |
local files_present=0 | |
local total_files=0 | |
declare -a required_files=( | |
"app.py:Gradio interface" | |
"run.py:Universal runner" | |
"config.py:Configuration manager" | |
"final_test.py:Test suite" | |
"requirements.txt:Dependencies" | |
"Dockerfile:Container config" | |
"docker-compose.yml:Multi-service setup" | |
".env:Environment variables" | |
"app/main.py:FastAPI application" | |
"frontend/index.html:Web dashboard" | |
) | |
print_info "π Project Structure:" | |
for file_info in "${required_files[@]}"; do | |
local file=$(echo $file_info | cut -d':' -f1) | |
local desc=$(echo $file_info | cut -d':' -f2) | |
total_files=$((total_files + 1)) | |
if [[ -f "$file" ]]; then | |
print_success "$file - $desc" | |
files_present=$((files_present + 1)) | |
else | |
print_error "$file - $desc (MISSING)" | |
fi | |
done | |
echo "" | |
local completeness=$((files_present * 100 / total_files)) | |
print_info "π Project Completeness: $completeness% ($files_present/$total_files files)" | |
# Check dependencies | |
echo "" | |
print_info "π§ System Dependencies:" | |
if command_exists python3; then | |
local python_version=$(python3 --version) | |
print_success "Python: $python_version" | |
else | |
print_error "Python 3: Not installed" | |
fi | |
if command_exists docker; then | |
local docker_version=$(docker --version | cut -d' ' -f3 | cut -d',' -f1) | |
print_success "Docker: $docker_version" | |
else | |
print_warning "Docker: Not installed (optional)" | |
fi | |
if command_exists git; then | |
local git_version=$(git --version | cut -d' ' -f3) | |
print_success "Git: $git_version" | |
else | |
print_warning "Git: Not installed (needed for HF Spaces)" | |
fi | |
# Deployment readiness | |
echo "" | |
if [[ $completeness -eq 100 ]]; then | |
print_success "π Project Status: READY FOR DEPLOYMENT" | |
echo "" | |
print_info "π Available deployment options:" | |
echo " 1. Hugging Face Spaces (demo/sharing)" | |
echo " 2. Docker (production)" | |
echo " 3. Local development" | |
echo "" | |
print_info "Run ./deploy_now.sh again to start deployment!" | |
else | |
print_warning "β οΈ Project Status: INCOMPLETE" | |
echo "" | |
print_info "π§ Missing files need to be restored or created" | |
print_info "Please ensure all required files are present" | |
fi | |
# Show environment info | |
echo "" | |
print_info "π Environment Information:" | |
echo " β’ OS: $(detect_os)" | |
echo " β’ Shell: $SHELL" | |
echo " β’ Working Directory: $(pwd)" | |
echo " β’ User: $(whoami)" | |
# Quick health check | |
echo "" | |
print_step "Running quick health check..." | |
if python3 -c " | |
import sys | |
try: | |
from config import config | |
print('β Configuration system: OK') | |
print(f'β Environment detected: {config.environment}') | |
print('β Import test: PASSED') | |
except Exception as e: | |
print(f'β Import test failed: {e}') | |
sys.exit(1) | |
"; then | |
print_success "Quick health check passed" | |
else | |
print_warning "Quick health check failed - some modules may be missing" | |
fi | |
} | |
# Run main function | |
main "$@" | |
echo "" | |
print_info "Legal Dashboard Deployment Assistant - Complete" | |
print_info "For support, check README_FINAL.md or DEPLOYMENT_CHECKLIST.md" | |
echo "" |