Problem with Laravel, once launched with PHP-FPM and NGINX

Viewed 1556

Problem with Laravel, once launched with PHP-FPM and NGINX no file is accessible except index.php. Once my application is launched all the application is executed successfully except that the CSS and my JS scripts present in the public folder of Laravel are not accessible and therefore it is not applied on the application.

My application is deployed with Docker and works like this:

  • A container for the laravel application launched with PHP-FPM
  • A NGINX container as web server
  • A Mysql container

File docker-compose.yml :

version: '3'
services:

 #PHP Service
 app-dockerTag:
   image: appName
   build:
     context: .
     dockerfile: Dockerfile
   container_name: app-dockerTag
   restart: unless-stopped
   tty: true
   environment:
     SERVICE_NAME: app
     SERVICE_TAGS: dev
   working_dir: /var/www/html/


 #Nginx Service
 webserver-dockerTag:
   image: nginx:alpine
   container_name: webserver-dockerTag
   restart: unless-stopped
   tty: true
   ports:
     - "portApp:80"
   volumes:
     - ./:/var/www
     - ./build/nginx/:/etc/nginx/conf.d/


 #MySQL Service
 db:
   image: mysql:5.7.22
   container_name: db
   restart: unless-stopped
   tty: true
   ports:
     - dbPort:dbPort
   volumes:
     - ./mysql/:/docker-entrypoint-initdb.d
     - ./api:/var/lib/mysql
   environment:
      - MYSQL_ROOT_PASSWORD=dbRootPassword
      - MYSQL_DATABASE=dbDatabase
      - MYSQL_USER=dbUsername
      - MYSQL_PASSWORD=dbPassword
      - MYSQL_HOST_ROOT=%
      - MYSQL_TCP_PORT=dbPort

File conf nginx :

server {
    listen 80;
    root /var/www/html/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    index index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app-dockerTag:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

File DockerFiles for laravel :

FROM php:7.3-fpm

# Set working directory
WORKDIR /var/www/html

# Install dependencies
RUN apt-get update && apt-get install -y \
   build-essential \
   mariadb-client \
   libpng-dev \
   libjpeg62-turbo-dev \
   libfreetype6-dev \
   locales \
   zip \
   jpegoptim optipng pngquant gifsicle \
   vim \
   unzip \
   git \
   curl \
   libzip-dev

# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*

# Install extensions
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl
RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/
RUN docker-php-ext-install gd

# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

COPY composer.json composer.json
#COPY composer.lock composer.lock /var/www/
COPY . .
RUN composer install
RUN composer dump-autoload


# Add user for laravel application
RUN groupadd -g 1000 www
RUN useradd -u 1000 -ms /bin/bash -g www www

# Copy existing application directory contents
COPY . /var/www/html

# Copy existing application directory permissions
COPY --chown=www:www . /var/www/html

# Change current user to www
USER www

# Expose port 9000 and start php-fpm server
EXPOSE 9000
CMD ["php-fpm", "-F"]

My problem does not appear when I work locally with php artisan serve and once docked, all files normally accessible in public generate 404 errors.

0 Answers
Related