Corporation / Dockerfile
akra35567's picture
Upload 38 files
77df06f verified
# ================================
# 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"]