217 lines
7.0 KiB
Bash
217 lines
7.0 KiB
Bash
#!/bin/bash
|
|
|
|
# LandPPT Docker Entrypoint Script
|
|
# This script handles initialization and startup of the LandPPT application
|
|
|
|
set -e
|
|
|
|
# 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() {
|
|
echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] $1${NC}"
|
|
}
|
|
|
|
warn() {
|
|
echo -e "${YELLOW}[$(date +'%Y-%m-%d %H:%M:%S')] WARNING: $1${NC}"
|
|
}
|
|
|
|
error() {
|
|
echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ERROR: $1${NC}"
|
|
}
|
|
|
|
info() {
|
|
echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')] INFO: $1${NC}"
|
|
}
|
|
|
|
# Banner
|
|
print_banner() {
|
|
echo -e "${BLUE}"
|
|
echo "╔══════════════════════════════════════════════════════════════════════════════╗"
|
|
echo "║ LandPPT ║"
|
|
echo "║ AI-Powered PPT Generation Platform ║"
|
|
echo "║ Docker Container ║"
|
|
echo "╚══════════════════════════════════════════════════════════════════════════════╝"
|
|
echo -e "${NC}"
|
|
}
|
|
|
|
# Check environment variables
|
|
check_environment() {
|
|
log "Checking environment configuration..."
|
|
|
|
# Check if at least one AI provider is configured
|
|
local ai_configured=false
|
|
|
|
if [ -n "$OPENAI_API_KEY" ] && [ "$OPENAI_API_KEY" != "your_openai_api_key_here" ]; then
|
|
info "✅ OpenAI API key configured"
|
|
ai_configured=true
|
|
fi
|
|
|
|
if [ -n "$ANTHROPIC_API_KEY" ] && [ "$ANTHROPIC_API_KEY" != "your_anthropic_api_key_here" ]; then
|
|
info "✅ Anthropic API key configured"
|
|
ai_configured=true
|
|
fi
|
|
|
|
if [ -n "$GOOGLE_API_KEY" ] && [ "$GOOGLE_API_KEY" != "your_google_api_key_here" ]; then
|
|
info "✅ Google API key configured"
|
|
ai_configured=true
|
|
fi
|
|
|
|
if [ -n "$AZURE_OPENAI_API_KEY" ] && [ "$AZURE_OPENAI_API_KEY" != "your_azure_openai_key_here" ]; then
|
|
info "✅ Azure OpenAI API key configured"
|
|
ai_configured=true
|
|
fi
|
|
|
|
if [ "$ENABLE_LOCAL_MODELS" = "true" ] && [ -n "$OLLAMA_BASE_URL" ]; then
|
|
info "✅ Ollama configuration detected"
|
|
ai_configured=true
|
|
fi
|
|
|
|
if [ "$ai_configured" = false ]; then
|
|
warn "⚠️ No AI provider API keys configured. Please set at least one:"
|
|
warn " - OPENAI_API_KEY"
|
|
warn " - ANTHROPIC_API_KEY"
|
|
warn " - GOOGLE_API_KEY"
|
|
warn " - AZURE_OPENAI_API_KEY"
|
|
warn " - Or enable ENABLE_LOCAL_MODELS=true with Ollama"
|
|
fi
|
|
|
|
# Check secret key
|
|
if [ "$SECRET_KEY" = "your-very-secure-secret-key-change-this-in-production" ] || [ "$SECRET_KEY" = "dev-secret-key-not-for-production" ]; then
|
|
warn "⚠️ Using default SECRET_KEY. Please change it for production!"
|
|
fi
|
|
}
|
|
|
|
# Create necessary directories
|
|
create_directories() {
|
|
log "Creating necessary directories..."
|
|
|
|
local dirs=(
|
|
"/app/data"
|
|
"/app/uploads"
|
|
"/app/temp/ai_responses_cache"
|
|
"/app/temp/style_genes_cache"
|
|
"/app/temp/summeryanyfile_cache"
|
|
"/app/temp/templates_cache"
|
|
"/app/research_reports"
|
|
"/app/lib/Linux"
|
|
"/app/lib/MacOS"
|
|
"/app/lib/Windows"
|
|
)
|
|
|
|
for dir in "${dirs[@]}"; do
|
|
if [ ! -d "$dir" ]; then
|
|
mkdir -p "$dir"
|
|
log "Created directory: $dir"
|
|
fi
|
|
done
|
|
}
|
|
|
|
|
|
# Import default templates
|
|
import_templates() {
|
|
log "Checking template imports..."
|
|
|
|
if [ -d "/app/template_examples" ] && [ "$(ls -A /app/template_examples/*.json 2>/dev/null)" ]; then
|
|
info "Template examples found, they will be imported on first run"
|
|
else
|
|
warn "No template examples found in /app/template_examples"
|
|
fi
|
|
}
|
|
|
|
# Wait for dependencies
|
|
wait_for_dependencies() {
|
|
if [ -n "$OLLAMA_BASE_URL" ] && [ "$ENABLE_LOCAL_MODELS" = "true" ]; then
|
|
log "Waiting for Ollama service..."
|
|
|
|
local ollama_host=$(echo "$OLLAMA_BASE_URL" | sed 's|http://||' | sed 's|https://||' | cut -d':' -f1)
|
|
local ollama_port=$(echo "$OLLAMA_BASE_URL" | sed 's|http://||' | sed 's|https://||' | cut -d':' -f2)
|
|
|
|
if [ "$ollama_port" = "$ollama_host" ]; then
|
|
ollama_port="11434"
|
|
fi
|
|
|
|
local max_attempts=30
|
|
local attempt=1
|
|
|
|
while [ $attempt -le $max_attempts ]; do
|
|
if nc -z "$ollama_host" "$ollama_port" 2>/dev/null; then
|
|
log "✅ Ollama service is ready"
|
|
break
|
|
fi
|
|
|
|
if [ $attempt -eq $max_attempts ]; then
|
|
warn "⚠️ Ollama service not available after $max_attempts attempts"
|
|
break
|
|
fi
|
|
|
|
info "Waiting for Ollama... (attempt $attempt/$max_attempts)"
|
|
sleep 2
|
|
attempt=$((attempt + 1))
|
|
done
|
|
fi
|
|
}
|
|
|
|
# Fix .env file permissions
|
|
fix_env_permissions() {
|
|
log "Checking .env file permissions..."
|
|
|
|
if [ -f "/app/.env" ]; then
|
|
# Check if we can read the .env file
|
|
if [ ! -r "/app/.env" ]; then
|
|
warn "⚠️ .env file is not readable by current user"
|
|
info "Attempting to fix .env file permissions..."
|
|
|
|
# Running as root, so we can fix permissions directly
|
|
if chmod 644 "/app/.env" 2>/dev/null; then
|
|
log "✅ .env file permissions fixed"
|
|
else
|
|
warn "⚠️ Could not fix .env file permissions"
|
|
warn " Creating a copy with correct permissions..."
|
|
|
|
# Create a copy with correct permissions
|
|
if cp "/app/.env" "/app/.env.tmp" 2>/dev/null && mv "/app/.env.tmp" "/app/.env" 2>/dev/null; then
|
|
chmod 644 "/app/.env" 2>/dev/null
|
|
log "✅ .env file copied with correct permissions"
|
|
else
|
|
warn "⚠️ Could not create .env copy"
|
|
warn " Please check the mounted .env file"
|
|
fi
|
|
fi
|
|
else
|
|
log "✅ .env file is readable"
|
|
fi
|
|
else
|
|
warn "⚠️ .env file not found, using default configuration"
|
|
fi
|
|
}
|
|
|
|
# Main initialization
|
|
main() {
|
|
print_banner
|
|
|
|
log "Starting LandPPT initialization..."
|
|
|
|
check_environment
|
|
fix_env_permissions
|
|
create_directories
|
|
wait_for_dependencies
|
|
import_templates
|
|
|
|
log "🚀 Starting LandPPT application..."
|
|
info "📍 Server will be available at: http://0.0.0.0:${PORT:-8000}"
|
|
info "📚 API Documentation: http://0.0.0.0:${PORT:-8000}/docs"
|
|
info "🌐 Web Interface: http://0.0.0.0:${PORT:-8000}/web"
|
|
|
|
# Execute the main command
|
|
exec "$@"
|
|
}
|
|
|
|
# Run main function with all arguments
|
|
main "$@"
|