Nginx PHP-FPM

Nginx php

Nous allons créer un conteneur nginx capable de servir à nos utilisateurs des fichiers PHP à l'aide de PHP FPM

Question

En vous basant sur ce que vous avez appris dans le module serveur web PHP créez un conteneur Nginx et PHP FPM à partir de l'image debian:buster

Indice

Vous devez installer les packages suivants :

  • nginx

  • php7.3

  • php7.3-fpm

  • php7.3-gd

  • php7.3-pgsql

  • php7.3-xml

Indice

Pour configurer PHP-FPM, les commandes suivantes doivent être lancées

1
echo "cgi.fix_pathinfo = 0;" >> /etc/php/7.3/fpm/php.ini
2
sed -i -e "s|;daemonize\s*=\s*yes|daemonize = no|g" /etc/php/7.3/fpm/php-fpm.conf
3
sed -i -e "s|listen\s*=\s*127\.0\.0\.1:9000|listen = /var/run/php-fpm7.sock|g" /etc/php/7.3/fpm/pool.d/www.conf
4
sed -i -e "s|;listen\.owner\s*=\s*|listen.owner = |g" /etc/php/7.3/fpm/pool.d/www.conf
5
sed -i -e "s|;listen\.group\s*=\s*|listen.group = |g" /etc/php/7.3/fpm/pool.d/www.conf
6
sed -i -e "s|;listen\.mode\s*=\s*|listen.mode = |g" /etc/php/7.3/fpm/pool.d/www.conf
7

Indice

Vous devez configurer Nginx pour qu'il utilise PHP-FPM pour rende le PHP à l'aide du fichier de configuration suivant

1
daemon off;
2
3
user www-data;
4
worker_processes  1;
5
6
error_log stderr error;
7
8
events {
9
    worker_connections  1024;
10
}
11
12
http {
13
    include       mime.types;
14
    default_type  application/octet-stream;
15
16
    sendfile        on;
17
18
    keepalive_timeout  65;
19
20
    server {
21
        listen 80;
22
23
        root /var/www/html;
24
        index index.php index.html index.htm;
25
26
        client_max_body_size 128M;
27
        client_body_buffer_size 128k;
28
29
    location ~ \.php$ {
30
            try_files $uri =404;
31
            fastcgi_pass unix:/run/php/php7.3-fpm.sock;
32
            fastcgi_index index.php;
33
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
34
            fastcgi_param PHP_VALUE "memory_limit = 256M
35
            post_max_size = 128M
36
            upload_max_filesize = 128M
37
            ";
38
            include fastcgi_params;
39
        }
40
41
        location ~ /\.ht {
42
            deny all;
43
        }
44
45
        location ~ /(data|conf|bin|inc)/ {
46
            deny all;
47
        }
48
    }
49
}
50

Indice

Le conteneur doit lancer à la fois PHP-FPM mais aussi Nginx à l'aide des commandes suivantes :

  • php-fpm7.3

  • nginx

On fera donc un script appelé ici start.sh qui se chargera de démarer php-fpm en arrière plan à l'aide de l'instruction & et qui démarre ensuite nginx en premier plan

Solution

1
FROM debian:buster
2
3
RUN apt-get update && \
4
    apt-get install -y \
5
      php7.3 \
6
      php7.3-fpm \
7
      php7.3-gd \
8
      php7.3-xml \
9
      php7.3-pgsql \
10
      nginx && \
11
    mkdir -p /run/nginx /var/www /run/php
12
13
COPY nginx.conf /etc/nginx/nginx.conf
14
COPY start.sh /start.sh
15
16
RUN echo "cgi.fix_pathinfo = 0;" >> /etc/php/7.3/fpm/php.ini && \
17
    sed -i -e "s|;daemonize\s*=\s*yes|daemonize = no|g" /etc/php/7.3/fpm/php-fpm.conf && \
18
    sed -i -e "s|listen\s*=\s*127\.0\.0\.1:9000|listen = /var/run/php-fpm7.sock|g" /etc/php/7.3/fpm/pool.d/www.conf && \
19
    sed -i -e "s|;listen\.owner\s*=\s*|listen.owner = |g" /etc/php/7.3/fpm/pool.d/www.conf && \
20
    sed -i -e "s|;listen\.group\s*=\s*|listen.group = |g" /etc/php/7.3/fpm/pool.d/www.conf && \
21
    sed -i -e "s|;listen\.mode\s*=\s*|listen.mode = |g" /etc/php/7.3/fpm/pool.d/www.conf && \    
22
    chmod +x /start.sh
23
24
EXPOSE 80
25
26
CMD ["/start.sh"]
27