¿Cómo instalo instalar PHP 7.4 con FPM para el servidor web Nginx que se ejecuta en el sistema operativo FreeBSD?
PHP es un acrónimo de “PHP: preprocesador de hipertexto”. Es un lenguaje de script de código abierto para propósitos generales. PHP es útil para el desarrollo web y para ejecutar software popular como MediaWiki, WordPress y más. PHP es fácil de aprender y le permite escribir páginas web generadas dinámicamente sobre la marcha. Esta página muestra cómo instalar PHP 7.4 en un cuadro FreeBSD v12.x Unix junto con el servidor web Nginx.
El procedimiento para instalar PHP 7.4 en FreeBSD es el siguiente:
Veamos todos los pasos en detalles.
Puede utilizar el comando `portsnap` de la siguiente manera:
# portsnap fetch update
# cd /usr/ports/lang/php74 # make install clean
La otra alternativa es utilizar los PKG para instalar sin compilar en la maquina local, aunque si puede es mejor compilar en la misma maquina, para instalar desde los `pkg` debemos ejecutar en un terminal:
# pkg install php74
Para instalar el port, ejecute el siguiente comando y elija las extensiones requeridas:
# cd /usr/ports/lang/php74-extensions/ # make install clean
La otra alternativa es usar los `PKG`:
# pkg install php74-extensions
Otra opción es instalar extensiones PHP individuales según las necesidades de su aplicación web o proyecto de software. Se pueden buscar extensiones PHP 7.4 utilizando el comando pkg y el comando grep/egrep
pkg search php74 | egrep -i --color 'gd|mysqli|openssl|composer|json' icingaweb2-module-fileshipper-php74-1.1.0_3 Import CSV, JSON, XML and YAML files for the Icinga Director php74-composer-1.10.8 Dependency Manager for PHP php74-gd-7.4.8 The gd shared extension for php php74-json-7.4.8 The json shared extension for php php74-mysqli-7.4.8 The mysqli shared extension for php php74-openssl-7.4.8 The openssl shared extension for php php74-pear-MDB2_Driver_mysqli-1.5.0.b4 PEAR MySQL MDB2 driver php74-pear-Services_JSON-1.0.3 PHP implementation of json_encode/decode php74-pecl-crypto-0.3.1_2 Objective wrapper for OpenSSL Crypto Library php74-pecl-json_post-1.0.2 JSON POST handler in PHP php74-pecl-jsond-1.4.0 JavaScript Object Notation in PHP
Ahora podemos seleccionar los paquetes individuales, como ejemplo usaremos 3 de la lista:
# pkg install php74-gd php74-json php74-composer
De esta forma podemos seleccionar los paquetes individuales.
Para instalar el PKG de nginx en una terminal con privilegios de root debemos ejecutar:
# pkg install nginx
Una vez terminado tendremos instalado el servidor web con las configuraciones por defecto.
Edite el archivo `/usr/local/etc/php-fpm.d/www.conf` y busque la linea:
listen = 127.0.0.1:9000
Y reemplacela por:
listen = /var/run/php74-fpm.sock
Y descomente en el mismo archivo las lineas siguientes:
listen.owner = www listen.group = www listen.mode = 0660
Guarde y cierre el archivo. Habilitar el servicio php-fpm:
# sysrc php_fpm_enable="YES"
Puede reiniciar, arrancar, detener el servicio con los comandos:
# service php-fpm start # service php-fpm restart # service php-fpm stop # service php-fpm status
Necesita instalar el archivo php.ini usando el comando php:
# cp -v /usr/local/etc/php.ini-production /usr/local/etc/php.ini
A continuación, vamos a asegurar PHP y personalizarlo, para ello debemos crear un archivo `99-custon.ini` de la siguiente forma:
# vim /usr/local/etc/php/99-custom.ini display_errors=Off safe_mode=Off safe_mode_exec_dir= safe_mode_allowed_env_vars=PHP_ expose_php=Off log_errors=On error_log=/var/log/nginx/php.scripts.log register_globals=Off cgi.force_redirect=0 file_uploads=On allow_url_fopen=Off sql.safe_mode=Off disable_functions=show_source, system, shell_exec, passthru, proc_open, proc_nice, exec max_execution_time=60 memory_limit=60M upload_max_filesize=2M post_max_size=2M cgi.fix_pathinfo=0 sendmail_path=/usr/sbin/sendmail -f user@domain -t
Guarde y cierre el archivo. Reinicie PHP en FreeBSD:
# service php-fpm restart Performing sanity check on php-fpm configuration: [19-Jul-2020 14:01:17] NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful Stopping php_fpm. Waiting for PIDS: 57262. Performing sanity check on php-fpm configuration: [19-Jul-2020 14:01:17] NOTICE: configuration file /usr/local/etc/php-fpm.conf test is successful Starting php_fpm.
El último paso es conectar Nginx al servicio PHP-FPM a través del protocolo FCGI. Edite su dominio virtual o el archivo nginx.conf de la siguiente manera:
# vim /usr/local/etc/nginx/nginx.conf
O si tiene dominios virtuales:
# vim /usr/local/etc/nginx/vdomains/http.192.168.1.112.conf
Debemos agregar en la definición y dentro del bloque del server, lo siguiente:
# php config let nginx talk to php socket location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; if (!-f $document_root$fastcgi_script_name) { return 404; } # Mitigate https://httpoxy.org/ vulnerabilities fastcgi_param HTTP_PROXY ""; fastcgi_pass unix:/var/run/php74-fpm.sock; fastcgi_index index.php; # include the fastcgi_param setting include fastcgi_params; # SCRIPT_FILENAME parameter is used for PHP FPM determining # the script name. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }
Aquí hay un archivo de configuración de muestra actualizado:
server{ server_name 192.168.1.112; access_log /var/log/nginx/192.168.1.112.access.log; error_log /var/log/nginx/192.168.1.112.error.log; root /usr/local/www; # php config let nginx talk to php socket location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; if (!-f $document_root$fastcgi_script_name) { return 404; } # Mitigate https://httpoxy.org/ vulnerabilities fastcgi_param HTTP_PROXY ""; fastcgi_pass unix:/var/run/php74-fpm.sock; fastcgi_index index.php; # include the fastcgi_param setting include fastcgi_params; # SCRIPT_FILENAME parameter is used for PHP FPM determining # the script name. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
Ahora debe recargar el servicio:
Creemos un archivo que llameremos info.php con el siguiente contenido:
<?php phpinfo(); phpinfo(INFO_MODULES); ?>
Guarde y cierre el archivo. Establezca permisos de archivo ajustados en DocumentRoot (raíz del servidor web):
# chown -R www:www /usr/local/www # chmod -R 0550 /usr/local/www
Abra su browser y compruebe que está funcionando:
http://192.168.1.112/info.php
Y allí tienes PHP funcionando como se esperaba y Nginx está hablando con PHP-FPM a través del socket Unix.
Use el comando sockstat en FreeBSD para enumerar los servicios en ejecución, los puertos abiertos y los sockets de Unix:
# sockstat -46lu | egrep --color 'www|nginx|php' sockstat -4lu | egrep --color 'www|nginx|php' www nginx 87242 8 tcp4 *:80 *:* www php-fpm 82668 6 stream /var/run/php74-fpm.sock www php-fpm 82660 6 stream /var/run/php74-fpm.sock root php-fpm 82503 8 stream /var/run/php74-fpm.sock root nginx 32802 8 tcp4 *:80 *:*
También revise los archivos de registro si tiene algún problema al ejecutar PHP:
# ls -l /var/log/nginx # tail -f /var/log/nginx/192.168.1.112.access.log # tail -f /var/log/nginx/192.168.1.112.error.log
Esta guía demostró cómo instalar PHP FPM de forma segura y configurarlo con un socket de Unix. Ahora tiene un servidor Nginx totalmente funcional junto con PHP 7.4 para crear páginas web dinámicas a pedido.