| FROM node:20-bookworm-slim AS frontend |
|
|
| WORKDIR /app |
|
|
| COPY package.json package-lock.json ./ |
| COPY postcss.config.js tailwind.config.js vite.config.js ./ |
| COPY resources ./resources |
|
|
| RUN npm ci && npm run build |
|
|
| FROM php:8.2-apache |
|
|
| # Install system dependencies |
| RUN apt-get update && apt-get install -y \ |
| git \ |
| unzip \ |
| libsqlite3-dev \ |
| libzip-dev \ |
| zip \ |
| libpng-dev \ |
| libonig-dev \ |
| libxml2-dev \ |
| libjpeg-dev \ |
| libfreetype6-dev \ |
| libwebp-dev \ |
| zlib1g-dev \ |
| python3-pip \ |
| ffmpeg \ |
| curl \ |
| && pip3 install --no-cache-dir edge-tts "huggingface_hub[cli,hf_transfer]" --break-system-packages \ |
| && docker-php-ext-install pdo_mysql pdo_sqlite zip mbstring exif pcntl bcmath \ |
| && docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp \ |
| && docker-php-ext-install -j$(nproc) gd \ |
| && a2enmod rewrite \ |
| && sed -i 's/max_execution_time = 30/max_execution_time = 300/' /usr/local/etc/php/php.ini-production \ |
| && sed -i 's/memory_limit = 128M/memory_limit = 512M/' /usr/local/etc/php/php.ini-production \ |
| && cp /usr/local/etc/php/php.ini-production /usr/local/etc/php/php.ini |
|
|
| # Composer |
| COPY --from=composer:2.7 /usr/bin/composer /usr/bin/composer |
|
|
| WORKDIR /var/www/html |
|
|
| # Log and PID directories writable at runtime on HF Spaces. |
| ENV APACHE_LOG_DIR=/tmp |
| ENV APACHE_PID_FILE=/tmp/apache2.pid |
| ENV APACHE_RUN_DIR=/tmp |
| ENV APACHE_LOCK_DIR=/tmp |
|
|
| # Copy Apache config |
| COPY laravel.conf /etc/apache2/sites-available/000-default.conf |
| RUN echo "Listen 7860" > /etc/apache2/ports.conf |
|
|
| # Copy source code |
| COPY . /var/www/html |
| COPY --from=frontend /app/public/build /var/www/html/public/build |
|
|
| # Install PHP dependencies |
| RUN composer install --no-dev --optimize-autoloader --no-interaction |
|
|
| # Create runtime env |
| RUN cp .env.example .env \ |
| && sed -i 's|^APP_ENV=.*|APP_ENV=production|' .env \ |
| && sed -i 's|^APP_DEBUG=.*|APP_DEBUG=true|' .env \ |
| && sed -i 's|^APP_URL=.*|APP_URL=https://medilis-teknolis.hf.space|' .env \ |
| && sed -i 's|^DB_DATABASE=.*|DB_DATABASE=/var/www/html/database/database.sqlite|' .env \ |
| && sed -i 's|^FREEPIK_API_KEY=.*|FREEPIK_API_KEY=false|' .env \ |
| && sed -i 's|^TOOLS_HF_ONLY=.*|TOOLS_HF_ONLY=true|' .env \ |
| && php artisan key:generate --force |
|
|
| # Final database and permissions setup |
| RUN mkdir -p /var/www/html/database \ |
| /var/www/html/storage/framework/cache/data \ |
| /var/www/html/storage/framework/sessions \ |
| /var/www/html/storage/framework/views \ |
| /var/www/html/storage/logs \ |
| && touch /var/www/html/database/database.sqlite \ |
| && chmod -R 777 /var/www/html/storage /var/www/html/bootstrap/cache /var/www/html/database \ |
| && php artisan migrate --force \ |
| && php artisan db:seed --force \ |
| && php artisan storage:link --force \ |
| && chown -R www-data:www-data /var/www/html |
|
|
| COPY entrypoint.sh /usr/local/bin/entrypoint.sh |
| RUN chmod +x /usr/local/bin/entrypoint.sh |
|
|
| EXPOSE 7860 |
|
|
| ENTRYPOINT ["/usr/local/bin/entrypoint.sh"] |
|
|