====== FreeBSD-12, PHP-7.4,FPM en Nginx ====== {{ :informatica:freebsd:fbsd_logo.png?380 |FreeBSD-12.1 }} ¿Cómo instalo instalar PHP 7.4 con FPM para el servidor web Nginx que se ejecuta en el sistema operativo FreeBSD? ===== Introducción ===== 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. ==== FreeBSD instala PHP 7.4 con FPM para Nginx ==== El procedimiento para instalar PHP 7.4 en FreeBSD es el siguiente: - Actualizar el árbol de **ports** de FreeBSD - Instale el paquete binario PHP 7.4: **pkg install php74** - Instalar paquete binario Nginx - Configurar Nginx y PHP 7.4 - Active el servicio PHP-fpm en FreeBSD - Probar la configuración Veamos todos los pasos en detalles. ===== 1. Actualizando el arbol de los ports ===== Puede utilizar el comando `portsnap` de la siguiente manera: # portsnap fetch update ==== 1.1.-Una vez actualizado podemos instalar los paquetes desde los ports ==== {{ :informatica:freebsd:php7.png?610 |PHP-7.4 }} # 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 ==== 1.2.-Instalando las extensiones de PHP 7.4 ==== 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. ==== 1.3.-Instalamos Nginx ==== {{ :informatica:nginx-logo.png?610 |Nginx }} 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. ===== 2.Configurando PHP-FPM ===== 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 ===== 3.Una nota de la Configuración de PHP-7.4 ===== 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. ===== 4.Configurando Nginx para usar PHP 7.4 (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: ===== 5.Prueba de Configuración ===== Creemos un archivo que llameremos **info.php** con el siguiente contenido: 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 {{ :informatica:freebsd:php-74.png?610 |FreeBSD-12.1 }} Y allí tienes PHP funcionando como se esperaba y Nginx está hablando con PHP-FPM a través del socket Unix. ===== 6.Cómo verificar que PHP-fpm se esté ejecutando ===== 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 ===== 7.Conclusión ===== 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.