Afficher la pageAnciennes révisionsLiens de retourHaut de page Cette page est en lecture seule. Vous pouvez afficher le texte source, mais ne pourrez pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur. <jumbotron> ====== Serveurs Web PHP ====== De nombreux serveurs utilisent le langage [[https://www.freshports.org/lang/php72|php]] pour créer des pages dynamiquement. Ceci se fait par le biais d'un canal [[https://fr.wikipedia.org/wiki/Common_Gateway_Interface|fastcgi]] de votre serveur web: ''php-fpm''. </jumbotron> Comme souvent, nous allons en isoler les mécanismes dans une [[::jails:zfs|jail]]. C'est dans celle-ci que vous installerez vos clients, comme ce [[https://www.freshports.org/www/dokuwiki/|dokuwiki]]. ===== Jail ===== Sa configuration est simple, mais comme la plupart des clients php réclame ''/dev/null'' our ''dev/random'', intallez le ''devfs''. <file javascript /etc/jail.conf> 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 } </file> On assure le démarrage au //reboot//: <code bash> sysrc jail_enable="YES" sysrc jail_list+="php" </code> Installez ici la version de ''php'' que vous désirez: <code bash> jail -c php pkg -j php install lang/php82 sysrc -j php php_fpm_enable=yes </code> Vous aurez probablement besoin de ceux-là pour vos clients: <code bash> pkg -j php install lang/php82-extensions </code> <callout type="info" icon="true"> Notez que '''lang/php82-extensions''' produit un grand nombre d'extensions par défaut. La plupart des extensions requises sont accessibles par ce port ou individuellement. </callout> Si vous installez un [[https://www.freebsd.org/doc/handbook/ports.html|port]] ce sera fait automatiquement, mais vous pouvez souvent vous contenter de cloner un dépôt. ===== Configuration ===== Configurez ''php'' à partir d'un fichier exemple: <code bash> cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini </code> Configurez ''php-fpm'' pour qu'il écoute soit sur un port TCP, sur l'adresse de votre ''jail'', soit sur une ''socket unix''. <file ini /usr/local/etc/php-fpm.d/www.conf> ; listen = 192.168.0.12:9000 listen = /var/run/php-fpm.sock listen.owner = www listen.group = www listen.mode = 0660 </file> <note tuyau> Dans ce cas, on utilise une socket unix. Il est alors inutile de donner une ip à la jail, vous pouvez - supprimer la ligne ''ip4.addr'' de la configuration de la ''jail'' - et préciser ''ip4=disable''. </note> Démarrez: <code bash> service -j php php-fpm start </code> Programmez newsyslog(8) pour nettoyer les journaux: <file whitespace /etc/newsyslog.conf.d/php.conf> /var/log/php-fpm.log 600 7 1000 * J /var/run/php-fpm.pid </file> ==== Messagerie ==== Par défaut, //php// utilise les fonctions de sendmail(8) pour envoyer des messages. Si vous avez besoin de cette fonction, activer le [[jails:zfs#mail|service de transport de sendmail]] dans votre ''jail'' et précisez vos paramètres dans le fichier de configuration, *Soit dans le fichier général de ''php'', <file diff /usr/local/etc/php.ini> --- 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 </file> * Soit dans le fichier dédié à votre service: <file ini /usr/local/etc/php-fpm.d/www.conf> 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 </file> ===== Serveur Web ===== 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 [[:ports:nginx|nginx]], <file javascript /usr/local/etc/nginx/nginx.conf> server { 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; } </file> 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: <file javascript /usr/local/etc/nginx/dokuwi.conf> 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; } </file> <note> Vous trouverez des explications [[https://www.nginx.com/resources/wiki/start/topics/recipes/dokuwiki/|sur le site de nginx]]. </note> ===== Versions ===== Attention, les ports dépendant de php sont gérés par les [[https://docs.freebsd.org/en/books/porters-handbook/flavors/|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'': <code=bash> DEFAULT_VERSIONS+=php=8.2 </code> Pour la connaître: <code=bash> root@php: php << EOF ? <?php echo 'PHP version: ' . phpversion(); ? EOF </code> ===== Migration ===== Il suffit de suivre le manuel du [[https://mwl.io/archives/22357 | sieur Lucas]] ports/web/php.txt Dernière modification : 2024/01/15 10:56de david