116 lines
3.4 KiB
Docker
116 lines
3.4 KiB
Docker
FROM php:8.4.8-cli
|
|
|
|
# Install system dependencies including libraries for GD and other extensions
|
|
RUN apt-get update && apt-get install -y \
|
|
git \
|
|
curl \
|
|
libpng-dev \
|
|
libjpeg62-turbo-dev \
|
|
libfreetype6-dev \
|
|
libonig-dev \
|
|
libxml2-dev \
|
|
libzip-dev \
|
|
libicu-dev \
|
|
zip \
|
|
unzip \
|
|
procps \
|
|
&& rm -rf /var/lib/apt/lists/* \
|
|
&& apt-get clean
|
|
|
|
# Configure GD extension with JPEG and FreeType support
|
|
RUN docker-php-ext-configure gd --with-freetype --with-jpeg
|
|
|
|
# Install PHP extensions for worker functionality and web features
|
|
RUN docker-php-ext-install -j$(nproc) \
|
|
pdo_mysql \
|
|
mbstring \
|
|
exif \
|
|
pcntl \
|
|
posix \
|
|
sockets \
|
|
gd \
|
|
zip \
|
|
intl \
|
|
opcache
|
|
|
|
# Install Composer
|
|
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
|
|
|
|
# Set working directory
|
|
WORKDIR /var/www/html
|
|
|
|
# Copy application files
|
|
COPY . .
|
|
|
|
# Install dependencies (composer.lock wird automatisch erstellt falls nicht vorhanden)
|
|
# Check if composer.json exists, if not create a minimal one
|
|
RUN if [ ! -f composer.json ]; then \
|
|
echo "Creating minimal composer.json..."; \
|
|
echo '{\
|
|
"name": "worker/app",\
|
|
"description": "Worker application",\
|
|
"type": "project",\
|
|
"require": {\
|
|
"php": ">=8.4"\
|
|
},\
|
|
"autoload": {\
|
|
"psr-4": {\
|
|
"App\\\\": "src/"\
|
|
}\
|
|
},\
|
|
"minimum-stability": "stable",\
|
|
"prefer-stable": true\
|
|
}' > composer.json; \
|
|
fi && \
|
|
composer install \
|
|
--no-dev \
|
|
--optimize-autoloader \
|
|
--no-interaction || echo "Composer install skipped or failed - continuing without dependencies"
|
|
|
|
# Create startup script for permission fixing
|
|
RUN echo '#!/bin/bash\n\
|
|
set -e\n\
|
|
\n\
|
|
echo "🔧 Fixing permissions..."\n\
|
|
\n\
|
|
# Create directories if they do not exist\n\
|
|
mkdir -p /var/www/html/src/Framework/CommandBus/storage/queue\n\
|
|
mkdir -p /var/www/html/storage/logs\n\
|
|
mkdir -p /var/www/html/storage/cache\n\
|
|
\n\
|
|
# Fix permissions on mounted volumes\n\
|
|
chown -R www-data:www-data /var/www/html/storage || true\n\
|
|
chown -R www-data:www-data /var/www/html/src/Framework/CommandBus/storage || true\n\
|
|
chmod -R 775 /var/www/html/storage || true\n\
|
|
chmod -R 775 /var/www/html/src/Framework/CommandBus/storage || true\n\
|
|
\n\
|
|
echo "✅ Permissions fixed"\n\
|
|
echo "🚀 Starting worker..."\n\
|
|
\n\
|
|
# Switch to www-data user and run the worker\n\
|
|
exec gosu www-data php /var/www/html/worker.php\n' > /usr/local/bin/start-worker.sh \
|
|
&& chmod +x /usr/local/bin/start-worker.sh
|
|
|
|
# Install gosu for better user switching (alternative to su-exec for Debian)
|
|
RUN apt-get update && apt-get install -y gosu && rm -rf /var/lib/apt/lists/*
|
|
|
|
# Create necessary directories and set permissions
|
|
RUN mkdir -p \
|
|
/var/www/html/src/Framework/CommandBus/storage/queue \
|
|
/var/www/html/storage/logs \
|
|
/var/www/html/storage/cache \
|
|
&& chown -R www-data:www-data /var/www/html/storage \
|
|
&& chmod -R 775 /var/www/html/storage
|
|
|
|
# Create queue storage directory with proper permissions
|
|
RUN mkdir -p /var/www/html/src/Framework/CommandBus/storage \
|
|
&& chown -R www-data:www-data /var/www/html/src/Framework/CommandBus/storage \
|
|
&& chmod -R 775 /var/www/html/src/Framework/CommandBus/storage
|
|
|
|
# Health check for the worker
|
|
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
|
|
CMD ps aux | grep -v grep | grep "worker.php" || exit 1
|
|
|
|
# Use startup script instead of direct PHP command
|
|
CMD ["/usr/local/bin/start-worker.sh"]
|