From 1ae07994cf55d732f19bb530f86b457410875d41 Mon Sep 17 00:00:00 2001 From: Abdul Kareem Date: Wed, 18 Feb 2026 13:48:50 +0300 Subject: [PATCH] Fix production Docker runtime for server deployment --- Dockerfile | 31 +++++++++++++++++++------------ docker-compose.yml | 12 ++---------- docker/entrypoint.sh | 4 +++- docker/nginx/default.conf | 6 +++--- 4 files changed, 27 insertions(+), 26 deletions(-) diff --git a/Dockerfile b/Dockerfile index d13337a..e6037ab 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,29 +1,36 @@ -FROM php:8.3-apache +FROM php:8.3-fpm -RUN apt-get update && apt-get install -y \ +RUN apt-get update && apt-get install -y --no-install-recommends \ libpq-dev \ libicu-dev \ libpng-dev \ libzip-dev \ + libjpeg62-turbo-dev \ + libfreetype6-dev \ unzip \ git \ curl \ - zip + zip \ + && rm -rf /var/lib/apt/lists/* -RUN docker-php-ext-install pdo_pgsql pgsql intl gd zip +RUN docker-php-ext-configure gd --with-freetype --with-jpeg \ + && docker-php-ext-install -j"$(nproc)" pdo_pgsql pgsql intl gd zip -COPY --from=composer:latest /usr/bin/composer /usr/bin/composer +COPY --from=composer:2 /usr/bin/composer /usr/bin/composer -WORKDIR /var/www/html +WORKDIR /var/www + +COPY composer.json composer.lock ./ +RUN composer install --no-dev --prefer-dist --no-interaction --no-scripts --optimize-autoloader COPY . . -RUN composer install --no-dev --optimize-autoloader +RUN chown -R www-data:www-data storage bootstrap/cache \ + && chmod -R ug+rw storage bootstrap/cache \ + && chmod +x docker/entrypoint.sh -RUN chown -R www-data:www-data storage bootstrap/cache +ENTRYPOINT ["docker/entrypoint.sh"] -RUN a2enmod rewrite +EXPOSE 9000 -EXPOSE 80 - -CMD ["apache2-foreground"] +CMD ["php-fpm"] diff --git a/docker-compose.yml b/docker-compose.yml index 0754eca..1ac1b71 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -11,17 +11,9 @@ services: APP_ENV: production APP_DEBUG: "false" APP_URL: ${APP_URL:-http://127.0.0.1:8000} - DB_CONNECTION: pgsql - DB_HOST: db - DB_PORT: 5432 - DB_DATABASE: ${DB_DATABASE:-tabeley_db} - DB_USERNAME: ${DB_USERNAME:-postgres} - DB_PASSWORD: ${DB_PASSWORD:-secret} RUN_MIGRATIONS: "true" - depends_on: - - db volumes: - - storage_data:/var/www/html/storage + - storage_data:/var/www/storage nginx: image: nginx:1.27-alpine @@ -32,7 +24,7 @@ services: ports: - "8000:80" volumes: - - ./public:/var/www/html/public:ro + - ./public:/var/www/public:ro - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro db: diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index b672817..a9ea114 100644 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -33,7 +33,9 @@ set_env APP_DEBUG "${APP_DEBUG}" set_env APP_URL "${APP_URL}" php artisan config:clear || true -php artisan key:generate --force --no-interaction || true +if ! grep -q "^APP_KEY=base64:" .env; then + php artisan key:generate --force --no-interaction || true +fi php artisan storage:link || true if [ "${RUN_MIGRATIONS}" = "true" ]; then diff --git a/docker/nginx/default.conf b/docker/nginx/default.conf index 34aa254..09a8833 100644 --- a/docker/nginx/default.conf +++ b/docker/nginx/default.conf @@ -1,7 +1,7 @@ server { listen 80; server_name _; - root /var/www/html/public; + root /var/www/public; index index.php index.html; client_max_body_size 20M; @@ -14,8 +14,8 @@ server { include fastcgi_params; fastcgi_pass app:9000; fastcgi_index index.php; - fastcgi_param SCRIPT_FILENAME /var/www/html/public$fastcgi_script_name; - fastcgi_param DOCUMENT_ROOT /var/www/html/public; + fastcgi_param SCRIPT_FILENAME /var/www/public$fastcgi_script_name; + fastcgi_param DOCUMENT_ROOT /var/www/public; fastcgi_read_timeout 300; }