# ================================ # SoftEdge Corporation — Multi-SDK # Python + PHP + Node.js (FLEXÍVEL) # ================================ FROM python:3.11-slim # ---------------- # VARIÁVEIS DE AMBIENTE # ---------------- ENV PORT=7860 ENV PYTHONUNBUFFERED=1 ENV DEBIAN_FRONTEND=noninteractive # ---------------- # DEPENDÊNCIAS DO SISTEMA (PYTHON + PHP + NODE) # ---------------- RUN apt-get update && apt-get install -y --no-install-recommends \ # PHP e Apache php8.2 \ php8.2-cli \ php8.2-common \ php8.2-curl \ php8.2-zip \ php8.2-gd \ php8.2-mysql \ php8.2-xml \ php8.2-mbstring \ php8.2-sqlite3 \ php8.2-intl \ apache2 \ libapache2-mod-php8.2 \ # Node.js nodejs \ npm \ # Utilitários curl \ wget \ git \ sqlite3 \ unzip \ ca-certificates \ build-essential \ && rm -rf /var/lib/apt/lists/* # ---------------- # PYTHON DEPENDENCIES # ---------------- COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt \ && pip install --no-cache-dir gradio flask gunicorn # ---------------- # COMPOSER (PHP) # ---------------- RUN curl -sS https://getcomposer.org/installer | php -- \ --install-dir=/usr/local/bin \ --filename=composer # ---------------- # APACHE CONFIG (PHP MODE) # ---------------- RUN a2enmod rewrite headers php8.2 # ServerName para evitar warnings RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf # Porta HF Spaces RUN sed -i 's/Listen 80/Listen 7860/' /etc/apache2/ports.conf # VirtualHost para PHP RUN echo '\n\ ServerName localhost\n\ DocumentRoot /var/www/html\n\ \n\ AllowOverride All\n\ Require all granted\n\ Options Indexes FollowSymLinks\n\ php_value upload_max_filesize 10M\n\ php_value post_max_size 10M\n\ php_value memory_limit 256M\n\ \n\ ErrorLog /var/log/apache2/error.log\n\ CustomLog /var/log/apache2/access.log combined\n\ ' > /etc/apache2/sites-available/000-default.conf # ---------------- # APP SETUP # ---------------- WORKDIR /var/www/html COPY . . # Permissões RUN mkdir -p logs storage \ && chown -R www-data:www-data /var/www/html \ && chmod -R 755 /var/www/html \ && chmod -R 775 logs storage # ---------------- # DEPENDENCY INSTALLATION # ---------------- # Composer (se existir composer.json) RUN if [ -f composer.json ]; then \ composer install --no-dev --optimize-autoloader --no-interaction; \ fi # Node.js (se existir package.json) RUN if [ -f package.json ]; then \ npm install && npm run build 2>/dev/null || echo "Build failed, continuing..."; \ fi # ---------------- # STARTUP SCRIPT # ---------------- RUN echo '#!/bin/bash\n\ set -e\n\ \n\ # Detectar modo de execução baseado em variáveis ou arquivos\n\ if [ "$SDK_MODE" = "docker" ] || [ -f "Dockerfile" ]; then\n\ echo "🚀 Starting in DOCKER mode (Multi-SDK)"\n\ \n\ # Verificar se existe app.py (Python/Gradio)\n\ if [ -f "app.py" ]; then\n\ echo "📊 Detected Python/Gradio app"\n\ cd /var/www/html\n\ python app.py\n\ \n\ # Verificar se existe index.php (PHP)\n\ elif [ -f "index.php" ]; then\n\ echo "🐘 Detected PHP app"\n\ service apache2 start\n\ tail -f /var/log/apache2/error.log /var/log/apache2/access.log\n\ \n\ else\n\ echo "❌ No app.py or index.php found"\n\ exit 1\n\ fi\n\ \n\ elif [ "$SDK_MODE" = "gradio" ] || [ ! -f "Dockerfile" ]; then\n\ echo "🎨 Starting in GRADIO mode"\n\ cd /var/www/html\n\ python app.py\n\ \n\ else\n\ echo "🤔 Auto-detecting mode..."\n\ if [ -f "app.py" ] && [ -f "index.php" ]; then\n\ echo "🔀 Both Python and PHP detected, defaulting to Python/Gradio"\n\ cd /var/www/html\n\ python app.py\n\ elif [ -f "app.py" ]; then\n\ echo "🐍 Python app detected"\n\ cd /var/www/html\n\ python app.py\n\ elif [ -f "index.php" ]; then\n\ echo "🐘 PHP app detected"\n\ service apache2 start\n\ tail -f /var/log/apache2/error.log /var/log/apache2/access.log\n\ else\n\ echo "❌ No valid app found"\n\ exit 1\n\ fi\n\ fi\n\ ' > /usr/local/bin/start-app.sh && chmod +x /usr/local/bin/start-app.sh # ---------------- # HEALTHCHECK # ---------------- RUN echo ' "ok",\n\ "mode" => getenv("SDK_MODE") ?: "auto",\n\ "timestamp" => date("c")\n\ ]);\n\ ?>' > /var/www/html/health.php HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD curl -f http://localhost:7860/health.php || exit 1 # ---------------- # EXPOSE & START # ---------------- EXPOSE 7860 # Default command (pode ser sobreposto) CMD ["/usr/local/bin/start-app.sh"]