Spaces:
Build error
Build error
| # ================================ | |
| # 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 '<VirtualHost *:7860>\n\ | |
| ServerName localhost\n\ | |
| DocumentRoot /var/www/html\n\ | |
| <Directory /var/www/html>\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\ | |
| </Directory>\n\ | |
| ErrorLog /var/log/apache2/error.log\n\ | |
| CustomLog /var/log/apache2/access.log combined\n\ | |
| </VirtualHost>' > /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 '<?php\n\ | |
| header("Content-Type: application/json");\n\ | |
| echo json_encode([\n\ | |
| "status" => "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"] | |