PHP
Minimum requis
Il est fort possible que vous souhaitiez ajouter le support de PHP à votre site, surtout si vous voulez héberger un moteur de blog ou un CMS. Il s'agit d'un langage de programmation offrant davantage de possibilités que de simples pages HTML.
PHPLa commande suivante permet d'installer PHP (à remplacer par la version souhaitée):
# pkg_add php-7.4.7
Pour lister toutes les versions de PHP disponibles, entrez :
# pkg_info -Q php
Après installation du paquet, on active PHP et on le démarre :
# rcctl enable php74_fpm # rcctl start php74_fpm
Ici, "74" correspond à la version 7.4.
Nous pouvons maintenant modifier la configuration de httpd pour lui dire de servir les pages au travers de PHP. Quelques lignes sont à ajouter au fichier /etc/httpd.conf :
server "chezmoi.tld" { listen on * port 80 root "/htdocs/monsupersite" directory index index.php location "*.php*" { fastcgi socket "/run/php-fpm.sock" } }
Remarquez l'instruction directory index index.php. Elle permet de rendre l'adresse http://chezmoi.tld/ équivalente à l'adresse http://chezmoi.tld/index.php.
Et voilà, les fichiers ".php" seront correctement interprétés. Cette configuration est suffisante dans la plupart des cas.
PHP avec des modules et du chroot
Je vous propose dans cette partie d'aller un peu plus loin pour préparer l'installation d'applications plus complètes (blog, CMS...) en activant des extensions et des options qui ne le sont pas par défaut, toujours dans un souci de sécurité.
Ajouter des modules PHP
Vous avez peut-être remarqué lors de l'installation de PHP une note concernant le dossier /usr/local/share/doc/pkg-readmes. Ce dernier contient des informations très intéressantes que nous allons appliquer ici.
Les extensions installées sont dans le dossier /etc/php-7.4.sample. Afin de les activer, il faut les relier dans le dossier /etc/php-7.4. On peut le faire en deux commandes :
# cd /etc/php-7.4.sample # for i in *; do ln -sf ../php-7.4.sample/$i ../php-7.4/; done # rcctl restart php74_fpm
Ainsi, toutes les extensions disponibles pour PHP sont activées. Pensez-y si vous en installez de nouvelles plus tard.
La plupart des extensions sont déjà présentes, mais vous voudrez peut-être y ajouter les paquets suivants (en adaptant le numéro de version):
- php-curl-7.4.7,
- php-gd-7.4.7,
- php-intl-7.4.7,
- php-zip-7.4.7.
- libmcrypt qui donne accès à des fonctionnalités de cryptographie (remplace mcrypt).
- pear, (ainsi que des paquets "pecl-..." qui sont des extensions pratiques)
Modifier la configuration de PHP
On peut souhaiter modifier la configuration de PHP. Il faut pour cela éditer le fichier /etc/php-7.4.ini. Je vous conseille notamment de modifier ces quelques lignes :
; Augmente la taille des fichiers que vous pouvez envoyer sur le site post_max_size = 10M upload_max_filesize = 10M ; une application php peut chercher du contenu distant (images..) allow_url_fopen = On ; Le fuseau horaire date.timezone = Europe/Paris ; configuration du cache opcache.enable=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=4000 opcache.enable_file_override=1
Configuration relative au chroot
Il est possible que votre site doive récupérer des informations ou données venant d'autres sites. Il a donc besoin de résoudre des noms de domaines, vérifier des certificats, connaître l'heure du système. Ces éléments sont situés dans le dossier /etc. Malheureusement, si vous vous souvenez bien, le serveur http est dans un chroot. Où se trouve ce chroot déjà?
Dans /var/www !!!
Très bien Jean-Eudes! Il y en a au moins un qui suit. 😁
On va donc être obligé de mettre quelques fichiers qui normalement se trouvent dans /etc à l'intérieur du chroot.
Voici la procédure :
# cd /var/www # On va dans le chroot # mkdir etc/ # On fabrique un dossier etc # cp /etc/resolv.conf etc/resolv.conf # cp /etc/hosts etc/hosts # cp /etc/localtime etc/localtime # mkdir etc/ssl # On cree un autre dossier # install -m 444 -o root -g bin /etc/ssl/cert.pem /etc/ssl/openssl.cnf /var/www/etc/ssl
Ces fichiers ne doivent qu'être lisibles et accessibles :
chmod -R 444 /var/www/etc/* chmod -R a+X /var/www/etc/
Les fichiers copiés servent notamment à :
- /etc/resolv.conf et /etc/hosts : Permettent à PHP de traduire un nom de domaine en adresse IP.
- /etc/localtime : Permet d'être à la bonne heure.
- /etc/ssl/* : Fichiers permettant de vérifier les certificats SSL. Ce dernier doit être régulièrement mis à jour. Ajoutez donc cette ligne dans le fichier /etc/monthly.local :
install -m 444 -o root -g bin /etc/ssl/cert.pem /etc/ssl/openssl.cnf /var/www/etc/ssl
Certaines applications ont besoin d'être capable d'envoyer des mails (forums, wikis...). Puisque PHP est dans un chroot, il ne pourra pas communiquer avec le programme responsable de l'envoi des mails : sendmail. Heureusement, lorsque vous avez installé PHP, l'outil femail-chroot a été lui aussi installé grâce au jeu des dépendances. Pour que PHP puisse l'utiliser, il faut copier "sh" dans le chroot (voir le fichier /usr/local/share/doc/pkg-readmes/femail-chroot*).
# cp /bin/sh /var/www/bin/
Une fois toutes vos modifications réalisées, n'oubliez pas de relancer PHP avec rcctl restart php74_fpm.