Spaces:
Sleeping
Sleeping
File size: 4,983 Bytes
d817e2b 3057bbb d817e2b 3057bbb 220b380 d817e2b 3057bbb d817e2b 3057bbb d817e2b 3057bbb d817e2b 3057bbb d817e2b 3057bbb d817e2b 3057bbb d817e2b 3057bbb d817e2b 3057bbb d817e2b 3057bbb d817e2b 3057bbb d817e2b 3057bbb d817e2b 3057bbb d817e2b 3057bbb d817e2b 3057bbb d817e2b 3057bbb d817e2b 3057bbb d817e2b 220b380 9f404e4 220b380 3057bbb d817e2b 3057bbb d817e2b 220b380 d817e2b 3057bbb d817e2b 3057bbb d817e2b 2eba9b8 3057bbb 9f404e4 3057bbb 9f404e4 220b380 d817e2b 3057bbb d817e2b 3057bbb 2eba9b8 3057bbb d817e2b 3057bbb d817e2b 3057bbb | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | # ================================
# 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"]
|