Files
LandPPT/docker-entrypoint.sh
2025-11-07 09:05:06 +08:00

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 "$@"