GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Usando PHP-FPM con Apache en Ubuntu 16.04

Este tutorial muestra cómo instalar un servidor web Apache en un servidor Ubuntu 16.04 con soporte PHP 7 (a través de PHP-FPM) y MySQL. PHP-FPM (Administrador de procesos FastCGI) es una implementación alternativa de PHP FastCGI con algunas características adicionales útiles para sitios de cualquier tamaño, especialmente sitios más ocupados.

1 nota preliminar

En este tutorial, usaré el nombre de host server1.example.com con la dirección IP 192.168.1.100. Estas configuraciones pueden diferir para usted, por lo que debe reemplazarlas cuando corresponda.

Estoy ejecutando todos los pasos de este tutorial con privilegios de root, así que asegúrese de haber iniciado sesión como root:

sudo su

2 Instalación de MySQL o MariaDB

Ubuntu proporciona paquetes MySQL y MariaDB. MariaDB es una bifurcación de MySQL proporcionada por el desarrollador original de MySQL, Monty Widenius. Siga el capítulo 2.1 o 2.2 para instalar el servidor de la base de datos.

2.1 Instalar MySQL 5.7

Primero, instalamos MySQL 5.7 así:

apt-get -y install mysql-server mysql-client

Se le pedirá que proporcione una contraseña para el usuario root de MySQL; esta contraseña es válida para el usuario [email protected] así como para [email protected], por lo que no tenemos que especificar una contraseña de root de MySQL manualmente más adelante:

Nueva contraseña para el usuario "root" de MySQL:<-- yourrootsqlpassword
Repita la contraseña para el usuario "root" de MySQL:<-- yourrootsqlpassword

Ejecute mysql_secure_installation para asegurar la base de datos MySQL y deshabilitar el acceso a la base de datos de prueba.

mysql_secure_installation

Se le harán estas preguntas:

Enter current password for root (enter for none): <-- press enter
Set root password? [Y/n] <-- y
New password: <-- Enter the new MariaDB root password here
Re-enter new password: <-- Repeat the password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y

2.2 Instalar MariaDB

Ejecute el siguiente comando para instalar el servidor y el cliente MariaDB:

apt-get -y install mariadb-server mariadb-client

Ahora establecemos una contraseña de root para MariaDB.

mysql_secure_installation

Se le harán estas preguntas:

Enter current password for root (enter for none): <-- press enter
Set root password? [Y/n] <-- y
New password: <-- Enter the new MariaDB root password here
Re-enter new password: <-- Repeat the password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y

3 Instalación de Apache

Apache 2.4 está disponible como paquete de Ubuntu. Necesitamos el paquete apache2 que podemos instalar así:

apt-get -y install apache2

Ahora dirija su navegador a http://192.168.1.100, y debería ver la página de marcador de posición de Apache (¡Funciona!):

La raíz de documentos predeterminada de Apache es /var/www/html en Ubuntu, y el archivo de configuración es /etc/apache2/apache2.conf. Las configuraciones adicionales se almacenan en subdirectorios del directorio /etc/apache2 como /etc/apache2/mods-enabled (para módulos de Apache), /etc/apache2/sites-enabled (para hosts virtuales) y /etc/apache2/conf .d.

4 Instalación de PHP 7

Podemos hacer que PHP 7 funcione en Apache2 a través de PHP-FPM y el módulo mod_fastcgi de Apache que instalamos de la siguiente manera:

apt-get -y install libapache2-mod-fastcgi php7.0-fpm php7.0

PHP-FPM es un proceso daemon (con la unidad systemd php7.0-fpm.service) que ejecuta un servidor FastCGI en el socket /var/run/php/php7.0-fpm.sock.

A continuación, habilite los siguientes módulos de Apache...

a2enmod actions fastcgi alias

... y reinicie Apache:

systemctl restart apache2.service

5 Configuración de Apache

Para que Apache funcione con PHP-FPM, necesitamos la siguiente configuración:

        <IfModule mod_fastcgi.c>
                AddHandler php7-fcgi .php
                Action php7-fcgi /php7-fcgi
                Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
                FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization
        </IfModule>

Puede ponerlo en la configuración global de Apache (para que esté habilitado para todos los vhosts), por ejemplo en /etc/apache2/conf.d/php7.0-fpm.conf (este archivo no existe, por lo que debe crearlo) , o puede colocarlo en cada host virtual que deba usar PHP-FPM. Quiero usar PHP-FPM con el servidor virtual predeterminado, así que abro su archivo de configuración de servidor virtual /etc/apache2/sites-disponible/000-default.conf.

nano /etc/apache2/sites-available/000-default.conf

... y coloque la siguiente sección en algún lugar entre :

        <Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
<IfModule mod_fastcgi.c> SetHandler php7-fcgi .php Action php7-fcgi /php7-fcgi virtual Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization </IfModule>

Reinicie Apache después:

systemctl restart apache2.service

Ahora cree el siguiente archivo PHP en la raíz del documento /var/www:

nano /var/www/html/info.php
<?php
phpinfo();

Ahora llamamos a ese archivo en un navegador (por ejemplo, http://192.168.1.100/info.php):

Como puede ver, PHP 7 funciona y funciona a través de FPM/FastCGI, como se muestra en la línea API del servidor. Si se desplaza hacia abajo, verá todos los módulos que ya están habilitados en PHP. MySQL no se encuentra en la lista, lo que significa que aún no tenemos compatibilidad con MySQL en PHP.

Tenga en cuenta: Si tiene instalado el módulo apache PHP 7 (mod_php), esto puede suceder, p. cuando comienza con una configuración de servidor LAMP de su ISP y no con un servidor vacío como lo hice en este tutorial, es posible que deba deshabilitar mod_php como se muestra a continuación.

a2dismod php7.0

y reinicie apache:

systemctl restart apache2.service

6 Obtener compatibilidad con MySQL/MariaDB en PHP 7

Para obtener soporte de MySQL en PHP, podemos instalar el paquete php7.0-mysql. Es una buena idea instalar algunos otros módulos de PHP, ya que podría necesitarlos para sus aplicaciones. Puede buscar módulos PHP disponibles como este:

apt-cache search php7.0

Elige los que necesites e instálalos así:

apt-get install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php7.0-imap php7.0-mcrypt php7.0-ps php7.0-pspell php7.0-recode php7.0-snmp php7.0-sqlite php7.0-tidy php7.0-xmlrpc php7.0-xsl

Ahora recarga PHP-FPM:

systemctl reload php7.0-fpm.service

Ahora vuelva a cargar http://192.168.1.100/info.php en su navegador y desplácese hacia abajo hasta la sección de módulos nuevamente. Ahora debería encontrar muchos módulos nuevos allí, incluido el módulo MySQLi:

7 phpMyAdmin

phpMyAdmin es una interfaz web a través de la cual puede administrar sus bases de datos MySQL. Es una buena idea instalarlo:

apt-get -y install phpmyadmin

Verá las siguientes preguntas:

Web server to reconfigure automatically:<-- apache2 
Configure database for phpmyadmin with dbconfig-common? <-- Yes
MySQL application password for phpmyadmin: <-- Press enter

Luego, puede acceder a phpMyAdmin en http://192.168.1.100/phpmyadmin/

8 Hacer que PHP-FPM use una conexión TCP (opcional)

NOTA: Este capítulo muestra la configuración de PHP-FPM sobre TCP. Mostraré esto como un ejemplo de configuración y puede haber configuraciones en las que necesite esto, p. cuando el proceso fastcgi se ejecuta en un segundo servidor, pero en general es más rápido usar sockets. Por lo tanto, es posible que desee omitir este capítulo.

De forma predeterminada, PHP-FPM escucha en el socket /var/run/php/php7.0-fpm.sock. También es posible hacer que PHP-FPM utilice una conexión TCP. Para ello, abra /etc/php5/fpm/pool.d/www.conf...

nano /etc/php/7.0/fpm/pool.d/www.conf

... y haz que la línea de escucha tenga el siguiente aspecto:

[...]
;listen = /var/run/php/php7.0-fpm.sock
listen = 127.0.0.1:9000
[...]

Esto hará que PHP-FPM escuche en el puerto 9000 en la IP 127.0.0.1 (localhost). Asegúrese de utilizar un puerto que no esté en uso en su sistema.

Luego recarga PHP-FPM:

systemctl reload php7.0-fpm.service

A continuación, revise la configuración de Apache y todos sus servidores virtuales y cambie la línea FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Autorización a FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -host 127.0.0.1:9000 -pass-header Autorización, p. así:

nano /etc/apache2/sites-available/000-default.conf
[...]
 <Directory /usr/lib/cgi-bin>
Require all granted
</Directory>

<IfModule mod_fastcgi.c>
AddHandler php7-fcgi .php
Action php7-fcgi /php7-fcgi virtual
Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -host 127.0.0.1:9000 -pass-header Authorization
</IfModule> [...]

Finalmente recargar Apache:

systemctl reload apache2.service

9 Enlaces

  • Apache:http://httpd.apache.org/
  • PHP:http://www.php.net/
  • PHP-FPM:http://php-fpm.org/
  • MySQL:http://www.mysql.com/
  • Ubuntu:http://www.ubuntu.com/
  • phpMyAdmin:http://www.phpmyadmin.net/

Ubuntu
  1. Instalación de mod_pagespeed con Apache en Ubuntu/CentOS

  2. ¿Cómo restablecer la contraseña de Ubuntu?

  3. ¿Deshabilitar la cuenta raíz en Ubuntu?

  4. Cómo instalar PHP-FPM con Apache en Ubuntu 20.04

  5. Cómo instalar PHP-FPM con Apache en Ubuntu 22.04

Cómo restablecer la contraseña de root en Ubuntu 17.10

Instale phpMyAdmin con Apache en Ubuntu 20.04

Cómo cambiar la contraseña raíz en Ubuntu 20.04

Cómo cambiar la contraseña de sudo en Ubuntu

Cómo restablecer la contraseña raíz olvidada en Ubuntu 20.04

Cómo configurar la autenticación de contraseña con Apache en Ubuntu 18.04