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)
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/