Commit All
This commit is contained in:
		
							
								
								
									
										108
									
								
								start_minimal.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										108
									
								
								start_minimal.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,108 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Minimal startup script for Turmli Calendar on Raspberry Pi Zero
 | 
			
		||||
# Uses minimal resources and avoids problematic dependencies
 | 
			
		||||
 | 
			
		||||
set -e
 | 
			
		||||
 | 
			
		||||
# Configuration
 | 
			
		||||
APP_DIR="/opt/turmli-calendar"
 | 
			
		||||
APP_USER="pi"
 | 
			
		||||
APP_PORT="8000"
 | 
			
		||||
VENV_PATH="$APP_DIR/venv"
 | 
			
		||||
 | 
			
		||||
# Colors for output
 | 
			
		||||
RED='\033[0;31m'
 | 
			
		||||
GREEN='\033[0;32m'
 | 
			
		||||
YELLOW='\033[1;33m'
 | 
			
		||||
BLUE='\033[0;34m'
 | 
			
		||||
NC='\033[0m'
 | 
			
		||||
 | 
			
		||||
print_info() {
 | 
			
		||||
    echo -e "${BLUE}ℹ${NC} $1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print_success() {
 | 
			
		||||
    echo -e "${GREEN}✓${NC} $1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print_error() {
 | 
			
		||||
    echo -e "${RED}✗${NC} $1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
print_warning() {
 | 
			
		||||
    echo -e "${YELLOW}⚠${NC} $1"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
# Check if running as correct user
 | 
			
		||||
if [ "$EUID" -eq 0 ]; then 
 | 
			
		||||
    print_error "Don't run this script as root. Use: ./start_minimal.sh"
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Check if application directory exists
 | 
			
		||||
if [ ! -d "$APP_DIR" ]; then
 | 
			
		||||
    print_error "Application directory not found: $APP_DIR"
 | 
			
		||||
    print_info "Please run the deployment script first: sudo ./deploy_rpi.sh install"
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Check if virtual environment exists
 | 
			
		||||
if [ ! -d "$VENV_PATH" ]; then
 | 
			
		||||
    print_error "Virtual environment not found: $VENV_PATH"
 | 
			
		||||
    print_info "Please run the deployment script first: sudo ./deploy_rpi.sh install"
 | 
			
		||||
    exit 1
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Change to application directory
 | 
			
		||||
cd "$APP_DIR"
 | 
			
		||||
 | 
			
		||||
# Show system resources before starting
 | 
			
		||||
print_info "System resources before startup:"
 | 
			
		||||
echo "  Memory: $(free -m | grep Mem | awk '{printf "Used: %dMB / Total: %dMB (%.1f%%)", $3, $2, $3*100/$2}')"
 | 
			
		||||
echo "  Swap: $(free -m | grep Swap | awk '{printf "Used: %dMB / Total: %dMB", $3, $2}')"
 | 
			
		||||
echo "  CPU Load: $(uptime | awk -F'load average:' '{print $2}')"
 | 
			
		||||
echo "  Disk: $(df -h / | tail -1 | awk '{printf "Used: %s / Total: %s (%s)", $3, $2, $5}')"
 | 
			
		||||
echo
 | 
			
		||||
 | 
			
		||||
# Set environment variables for minimal resource usage
 | 
			
		||||
export PYTHONUNBUFFERED=1
 | 
			
		||||
export PYTHONDONTWRITEBYTECODE=1
 | 
			
		||||
export MALLOC_ARENA_MAX=2  # Limit memory fragmentation
 | 
			
		||||
export MALLOC_MMAP_THRESHOLD_=131072
 | 
			
		||||
export MALLOC_TRIM_THRESHOLD_=131072
 | 
			
		||||
export MALLOC_MMAP_MAX_=65536
 | 
			
		||||
 | 
			
		||||
# Set a custom temp directory to avoid filling /tmp
 | 
			
		||||
export TMPDIR="$APP_DIR/tmp"
 | 
			
		||||
mkdir -p "$TMPDIR"
 | 
			
		||||
 | 
			
		||||
# Clear Python cache to free memory
 | 
			
		||||
find "$APP_DIR" -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
 | 
			
		||||
find "$APP_DIR" -name "*.pyc" -delete 2>/dev/null || true
 | 
			
		||||
 | 
			
		||||
print_info "Starting Turmli Calendar with minimal resources..."
 | 
			
		||||
print_info "Access the application at: http://$(hostname -I | cut -d' ' -f1):${APP_PORT}"
 | 
			
		||||
print_info "Press Ctrl+C to stop"
 | 
			
		||||
echo
 | 
			
		||||
 | 
			
		||||
# Start uvicorn with minimal configuration
 | 
			
		||||
# --workers 1: Single worker process
 | 
			
		||||
# --loop asyncio: Standard event loop (no uvloop)
 | 
			
		||||
# --no-access-log: Disable access logging to save resources
 | 
			
		||||
# --log-level warning: Only log warnings and errors
 | 
			
		||||
# --limit-concurrency 10: Limit concurrent connections
 | 
			
		||||
# --timeout-keep-alive 5: Short keepalive timeout
 | 
			
		||||
# --backlog 32: Smaller connection backlog
 | 
			
		||||
 | 
			
		||||
exec "$VENV_PATH/bin/python" -m uvicorn main:app \
 | 
			
		||||
    --host 0.0.0.0 \
 | 
			
		||||
    --port ${APP_PORT} \
 | 
			
		||||
    --workers 1 \
 | 
			
		||||
    --loop asyncio \
 | 
			
		||||
    --no-access-log \
 | 
			
		||||
    --log-level warning \
 | 
			
		||||
    --limit-concurrency 10 \
 | 
			
		||||
    --timeout-keep-alive 5 \
 | 
			
		||||
    --backlog 32 \
 | 
			
		||||
    --no-use-colors
 | 
			
		||||
		Reference in New Issue
	
	Block a user