1 votes

Le déploiement d'une application php/laravel avec nginx dans un essaim de Docker donne une page blanche et aucune erreur.

J'ai une application Laravel que je prévois de déployer sur un essaim Docker. Le problème est que, quoi que je fasse, j'obtiens une page blanche lorsque j'appelle localhost/index.php .

J'utilise 2 services distincts pour :

  1. Application Laravel (php-fpm)
  2. Nginx

Quelques notes qui pourraient vous être utiles pour m'aider.

  • Les conteneurs ne partagent rien d'autre qu'un volume pour les fichiers statiques.
  • Je peux vérifier que les demandes sont reçues par php-fpm.
  • Il n'y a aucune erreur dans les journaux et tout ce que j'obtiens, ce sont des codes de réponse 200 dans les journaux de nginx et de php-fpm.
  • Même un simple <?php phpinfo(); donne le même résultat, donc ce n'est pas un problème de Laravel.

Ce sont les Dockerfiles à partir desquels je construis mes images.

// Dockerfile for `Nginx`
FROM nginx

ADD ./api.conf /etc/nginx/conf.d/

RUN rm /etc/nginx/conf.d/default.conf

CMD ["nginx", "-g", "daemon off;"]

Et voici le fichier de configuration de nginx :

server {
    listen 80;
    server_name _;
    root /app/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Content-Type-Options "nosniff";

    index index.html index.htm index.php;

    charset utf-8;

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

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass api:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }

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

Et ceci sera le Dockerfile pour mon image laravel :

FROM ubuntu:bionic

RUN apt update
RUN apt install -y software-properties-common
RUN add-apt-repository -y ppa:ondrej/php

RUN apt install -y php7.2-fpm
RUN apt install -y php7.2-pgsql
RUN apt install -y php7.2-mongodb
RUN apt install -y php7.2-redis
RUN apt install -y php7.2-mbstring
RUN apt install -y php7.2-xml
RUN apt install -y php7.2-zip
RUN apt install -y php7.2-curl
RUN apt install -y ffmpeg

RUN mkdir /run/php

COPY . /app

RUN chmod 0777 /app/storage -R

RUN sed  -i 's/pm.max_children = 5/pm.max_children = 10/g' /etc/php/7.2/fpm/pool.d/www.conf && \
    sed  -i 's/pm.start_servers = 2/pm.start_servers = 4/g' /etc/php/7.2/fpm/pool.d/www.conf && \
    sed  -i 's/pm.min_spare_servers = 1/pm.min_spare_servers = 3/g' /etc/php/7.2/fpm/pool.d/www.conf && \
    sed  -i 's/pm.max_spare_servers = 3/pm.max_spare_servers = 5/g' /etc/php/7.2/fpm/pool.d/www.conf && \
    sed  -i 's/;pm.max_requests = 500/pm.max_requests = 500/g' /etc/php/7.2/fpm/pool.d/www.conf && \
    sed  -i 's|;access.log = log/$pool.access.log|access.log = /proc/self/fd/2|g' /etc/php/7.2/fpm/pool.d/www.conf && \
    sed  -i 's|;php_admin_value[error_log] = /var/log/fpm-php.www.log|php_admin_value[error_log] = /proc/self/fd/2|g' /etc/php/7.2/fpm/pool.d/www.conf && \
    sed  -i 's|error_log = /var/log/php7.2-fpm.log|error_log = /proc/self/fd/2|g' /etc/php/7.2/fpm/php-fpm.conf && \
    sed  -i 's|listen = /run/php/php7.2-fpm.sock|listen = "9000"|g' /etc/php/7.2/fpm/pool.d/www.conf

WORKDIR /app

EXPOSE 9000

CMD ["php-fpm7.2", "-F"]

Et la dernière chose est mon fichier docker-compose.yml :

version: "3"
services:
  nginx:
    image: hamed/nginx
    ports: 
      - 80:80
    volumes:
      - my-files:/app/public/files
  api:
    image: hamed/api
    volumes:
      - my-files:/app/public/files

更新しました。 Le résultat de lsof -Pn | grep LISTEN | grep ':80 ' comme demandé par @GerardH.Pille :

nginx      13     root    6u     IPv4             206078      0t0    TCP *:80 (LISTEN)

Mise à jour 2 : Voici les journaux de mon nginx service :

10.255.0.2 - - [21/Aug/2018:12:27:32 +0000] "GET /index.php HTTP/1.1" 200 5 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:61.0) Gecko/20100101 Firefox/61.0" "-"

Et de mon php-fpm service :

10.0.0.2 -  21/Aug/2018:12:27:32 +0000 "- " 200

1voto

sosborn Points 11273

Ok, après de nombreuses heures de débogage et de recherche, j'ai découvert que les 2 lignes suivantes dans ma configuration nginx étaient la raison pour laquelle cela ne fonctionnait pas et pourquoi aucune erreur n'était affichée :

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;

Le conteneur nginx ne transmettait pas le nom de fichier demandé à php-fpm . Gardez à l'esprit que pour que cela fonctionne sans mettre réellement index.php dans l'url, vous devez avoir index.php dans le dossier racine de nginx. Il doit juste exister. Ce n'est pas grave s'il est vide.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X