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"]