De nombreux serveurs utilisent le langage php pour créer des pages dynamiquement.
Ceci se fait par le biais d'un canal fastcgi de votre serveur web: php-fpm
.
Comme souvent, nous allons en isoler les mécanismes dans une jail. C'est dans celle-ci que vous installerez vos clients, comme ce dokuwiki.
Sa configuration est simple, mais comme la plupart des clients php réclame /dev/null
our dev/random
, intallez le devfs
.
php { host.hostname = php; # Hostname # ip4 = disable; # update/install ended: lock out the jail ip4.addr = "lo1|192.168.0.12"; # IP address of the jail path ="/jails/php"; # Path to the jail mount.devfs; # /dev/random pour ssl exec.start = "/bin/sh /etc/rc"; # Start command exec.stop = "/bin/sh /etc/rc.shutdown"; # Stop command }
On assure le démarrage au reboot:
sysrc jail_enable="YES" sysrc jail_list+="php"
Installez ici la version de php
que vous désirez:
jail -c php pkg -j php install lang/php83 sysrc -j php php_fpm_enable=yes
Vous aurez probablement besoin de ceux-là pour vos clients:
pkg -j php install lang/php83-extensions
'lang/php83-extensions
' produit un grand nombre d'extensions par défaut. La plupart des extensions requises sont accessibles par ce port ou individuellement.
Si vous installez un port ce sera fait automatiquement, mais vous pouvez souvent vous contenter de cloner un dépôt.
Configurez php
à partir d'un fichier exemple:
cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
Configurez php-fpm
pour qu'il écoute soit sur un port TCP, sur l'adresse de votre jail
, soit sur une socket unix
.
; listen = 192.168.0.12:9000 listen = /var/run/php-fpm.sock listen.owner = www listen.group = www listen.mode = 0660
ip4.addr
de la configuration de la jail
ip4=disable
. Démarrez:
service -j php php-fpm start
Programmez newsyslog(8) pour nettoyer les journaux:
/var/log/php-fpm.log 600 7 1000 * J /var/run/php-fpm.pid
Par défaut, php utilise les fonctions de sendmail(8) pour envoyer des messages. Si vous avez besoin de cette fonction, activer le service de transport de sendmail dans votre jail
et précisez vos paramètres dans le fichier de configuration,
php
,--- usr/local/etc/php.ini-production 2020-04-19 16:29:28.000000000 +0200 +++ usr/local/etc/php.ini 2020-05-07 14:07:14.400227000 +0200 @@ -1056,7 +1056,7 @@ ; For Unix only. You may supply arguments as well (default: "sendmail -t -i"). ; http://php.net/sendmail-path -;sendmail_path = +sendmail_path = /usr/sbin/sendmail -t -i ; Force the addition of the specified parameters to be passed as extra parameters ; to the sendmail binary. These parameters will always replace the value of
php_admin_value[sendmail_path] = /usr/sbin/sendmail -t -i php_flag[display_errors] = off php_admin_value[error_log] = /var/log/fpm-php.www.log php_admin_flag[log_errors] = on php_admin_value[memory_limit] = 32M
Il suffit de transférer les requêtes via fastcgi
, avec un piège, les scripts ne seront pas situé au même endroit, selon qu'ils soient vu du serveur web ou de la jail
.
Prenons le classique nginx,
server { http2 on; listen [::]:80; listen 80; server_name popeye.lapinbilly.eu; # Replace with your hostname root /jails/php/usr/local/www/<site php>; index <site php>.php; client_max_body_size 15M; client_body_buffer_size 128K; location / { try_files $uri $uri/ @<site_php>; } location @<site_php> { rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last; rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last; rewrite ^/(.*) /<truc php>.php?id=$1&$args last; } location ~ \.php$ { try_files $uri $uri/ /<site php>.php; # fastcgi_pass 192.168.0.12:9000; fastcgi_pass unix:/jails/php/var/run/php-fpm.sock; fastcgi_param REDIRECT_STATUS 200; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /usr/local/www/<site php>/$fastcgi_script_name; }
Ceci est tiré de l'exemple de ce wiki, les directives sont en général données par les notices d'installation de l'outil web que vous voulez installer.
C'est bien souvent le fastcgi_param
qu'il faut adapter à la jail
au lieu d'utiliser un $document_root
.
Par exemple,ce dokuwiki:
include drop.conf; client_max_body_size 15M; client_body_buffer_size 128k; location / { try_files $uri $uri/ @dokuwiki; } location ~ \.php$ { try_files $uri $uri/ /doku.php; fastcgi_pass unix:/jails/php/var/run/php-fpm.sock; fastcgi_param REDIRECT_STATUS 200; include fastcgi_params; fastcgi_param SCRIPT_FILENAME /usr/local/www/dokuwiki/$fastcgi_script_name; } location @dokuwiki { rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last; rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last; rewrite ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 last; rewrite ^/(.*) /doku.php?id=$1&$args last; } # Block access to data folders location ~ /(data|conf|bin|inc)/ { deny all; } # Block access to .htaccess files location ~ /\.ht { deny all; }
Attention, les ports dépendant de php sont gérés par les flavors. Pensez à l'indiquer dans le nom des ports à télécharger ou à construire.
De même, précisez la version par défaut de php dans votre Make.conf
:
DEFAULT_VERSIONS+=php=8.2
Pour la connaître:
root@php: php << EOF ? <?php echo 'PHP version: ' . phpversion(); ? EOF
Il suffit de suivre le manuel du sieur Lucas