GNU/Linux >> Tutoriales Linux >  >> Ubuntu

Tutorial del servidor LAMP de Ubuntu 16.04 (LTS) con Apache, PHP 7 y MySQL

LAMP es la abreviatura de L entrada, A pache, M ySQL, P HP. Este tutorial muestra cómo puede instalar un servidor web Apache en un servidor Ubuntu 16.04 LTS (Xenial Xerus) con soporte PHP 7 (mod_php) y MySQL / MariaDB y cómo configurar un certificado SSL con Let's encrypt. Además, instalaré PHPMyAdmin para facilitar la administración de MySQL. Una configuración LAMP es una base perfecta para los sistemas CMS populares como Joomla, Wordpress o Drupal.

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.

Recomiendo utilizar una configuración de servidor Ubuntu mínima como base para el tutorial, que puede ser una imagen de servidor raíz o virtual con una instalación mínima de Ubuntu 16.04 de una empresa de alojamiento web o puede utilizar nuestro tutorial de servidor mínimo para instalar un servidor desde cero.

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

1. Instalación de la base de datos MySQL o MariaDB

Actualmente hay disponibles dos sistemas de bases de datos MySQL ampliamente utilizados, el servidor clásico "MySQL" desarrollado por Oracle y disponible en la versión 5.7 ahora, y la bifurcación de MySQL llamada MariaDB, desarrollada por el desarrollador original de MySQL, Monty Widenius.

Le mostraré cómo instalar ambas alternativas a continuación. Simplemente siga el capítulo 1.1 o el 1.2, pero no ambos. Usaré MySQL 5.7 para la imagen de la máquina virtual que se puede descargar de Howtoforge.

1.1 Instalar MySQL 5.7

Para instalar MySQL 5.7, ejecute este comando:

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

Los paquetes mysql-server y mysql-client son los llamados 'meta-paquetes', instalan siempre la última versión de MySQL que está disponible en Ubuntu. La última versión actualmente es MySQL 5.7.

Ya establecimos la contraseña raíz para MySQL durante la instalación, pero me gustaría eliminar el usuario anónimo y la base de datos de prueba por razones de seguridad. Ejecute el siguiente comando mysql_secure_installation para lograrlo.

mysql_secure_installation

Se le harán estas preguntas:

Securing the MySQL server deployment.
Enter password for user root: <-- Enter the MySQL root password
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No:
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) : <-- Choose 'y' here if you like to enable the password validation, I don't need that function, so I choose 'n' here.
... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : <-- y
Success.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : <-- y
Success.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : <-- y
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : <-- y
Success.
All done!

La configuración de MySQL se ha asegurado ahora.

1.2 Instalar MariaDB 10

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

Pruebe el inicio de sesión en MariaDB con el "comando mysql"

mysql -u root -p

e ingrese la contraseña raíz de MariaDB que configuró anteriormente. El resultado debería ser similar a la siguiente captura de pantalla:

Para salir del shell de MariaDB, ingrese el comando "quit" y presione enter.

2. Instalar el servidor web Apache

Apache 2 está disponible como paquete de Ubuntu, por lo que podemos instalarlo así:

apt-get -y install apache2

Ahora dirija su navegador a http://192.168.1.100, y debería ver la página predeterminada de Apache2 (¡Funciona!):

La raíz del documento del vhost predeterminado de apache es /var/www/html en Ubuntu y el archivo de configuración principal es /etc/apache2/apache2.conf. El sistema de configuración está totalmente documentado en /usr/share/doc/apache2/README.Debian.gz .

3. Instalar PHP 7

Podemos instalar PHP 7 y el módulo Apache PHP de la siguiente manera:

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

Luego reinicie Apache:

systemctl restart apache2

4. Pruebe PHP y obtenga detalles sobre su instalación de PHP

La raíz del documento del sitio web predeterminado es /var/www/html. Ahora crearemos un pequeño archivo PHP (info.php) en ese directorio y lo llamaremos en un navegador. El archivo mostrará muchos detalles útiles sobre nuestra instalación de PHP, como la versión de PHP instalada.

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

Luego cambie el propietario del archivo info.php al usuario y grupo www-data.

chown www-data:www-data /var/www/html/info.php

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

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

5. Obtenga soporte MySQL / MariaDB en PHP

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 -y install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache  php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettext

Ahora reinicie Apache2:

systemctl restart apache2

PHP 7 ahora es compatible con MySQL/MariaDB como se muestra en phpinfo() arriba.

6. Instale el caché Opcache + APCu PHP para acelerar PHP

PHP 7 se envía con un caché de código de operación incorporado para almacenar en caché y optimizar el código intermedio de PHP, tiene el nombre 'opcache' y está disponible en el paquete php7.0-opcache. Se recomienda enfáticamente tener un Opcache instalado para acelerar su página PHP. Además de opcache, instalaré APCu, que es un contenedor de compatibilidad para opcache para proporcionar las funciones de la caché de APC, un sistema de almacenamiento en caché de uso frecuente en las versiones de PHP 5.x y muchos sistemas CMS aún lo usan.

Opcache y APCu se pueden instalar de la siguiente manera:

apt-get -y install php7.0-opcache php-apcu

No se preocupe si muestra que Opcache ya está instalado.

Ahora reinicie Apache:

systemctl restart apache2

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í:

No olvide eliminar el archivo info.php cuando ya no lo necesite, ya que proporciona detalles confidenciales de su servidor. Ejecute el siguiente comando para eliminar el archivo.

rm -f /var/www/html/info.php

7. Habilitar el sitio web SSL en apache

SSL/ TLS es una capa de seguridad para cifrar la conexión entre el navegador web y su servidor. La mayoría de los navegadores web comienzan a mostrar sitios como inseguros hoy en día cuando la conexión entre el servidor y el navegador web no está encriptada con SSL. En este capítulo, le mostraré cómo asegurar su sitio web con SSL.

Ejecute los siguientes comandos en su servidor para habilitar la compatibilidad con SSL (https://). Ejecutar:

a2enmod ssl
a2ensite default-ssl

que habilita el módulo SSL y agrega un enlace simbólico en la carpeta /etc/apache2/sites-enabled al archivo /etc/apache2/sites-disponible/default-ssl.conf para incluirlo en la configuración activa de Apache. Luego reinicie apache para habilitar la nueva configuración:

systemctl restart apache2

Ahora pruebe la conexión SSL abriendo https://192.168.1.100 en un navegador web.

Recibirá una advertencia SSL ya que el certificado SSL del servidor es un certificado SSL "autofirmado", esto significa que el navegador no confía en este certificado de forma predeterminada y primero debe aceptar la advertencia de seguridad. Después de aceptar la advertencia, verá la página predeterminada de Apache.

El "candado verde" cerrado delante de la URL en el navegador muestra que la conexión está encriptada.

Hay dos formas de deshacerse de la advertencia de SSL:reemplace el certificado SSL autofirmado /etc/ssl/certs/ssl-cert-snakeoil.pem con un certificado SSL firmado oficialmente que compre de una autoridad SSL u obtenga un certificado SSL gratuito de Let's encrypt, que describiré en el capítulo 8.

8. Obtenga un certificado SSL gratuito de Let's Encrypt

El primer paso para proteger el sitio web con un certificado SSL de Let's Encrypt es instalar el paquete python-letsencrypt-apache. Ejecute el siguiente comando:

apt-get -y install python-letsencrypt-apache

En el siguiente paso, solicitaremos un certificado SSL de Let's Encrypt, durante este proceso, el servidor de Let's Encrypt intenta conectarse a su servidor a través del nombre de dominio que le proporciona al comando letsencrypt. Es importante que este nombre de dominio apunte a su servidor en DNS ya para que el sitio web ya sea accesible por su nombre de dominio en el puerto 80 (http). Si no se puede acceder al sitio web desde Internet, la creación del certificado SSL de Let's Encrypt fallará.

Antes de que podamos comenzar a crear el certificado SSL, establezca el nombre de dominio en el archivo de configuración de vhost. Abra el archivo vhost predeterminado con un editor:

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

y agregue la línea:

ServerName example.com

Justo debajo de la línea 'DocumentRoot'. Reemplaza ejemplo.com con el nombre de dominio de tu propio sitio web.

Luego crea el Certificado SSL con este comando:

letsencrypt --apache -d example.com

Reemplace example.com con su nombre de dominio aquí nuevamente. El comando iniciará un asistente que le hará varias preguntas.

Ingrese la dirección de correo electrónico donde se puede contactar al administrador responsable de este sitio web.

Acepte los términos y condiciones de la autoridad SSL de Let's Encrypt.

Elija si desea redirigir las solicitudes que no sean SSL a https:// automáticamente. Seleccionaré sí aquí para evitar problemas de contenido duplicado cuando el sitio web esté disponible en las versiones http:// y https://.

El certificado SSL se ha emitido con éxito.

Cuando acceda al sitio web ahora con un navegador, será redirigido automáticamente a SSL y el candado verde frente a la barra de URL en el navegador muestra que estamos usando un certificado SSL de confianza ahora.

8.1 Vamos a cifrar la renovación automática

Los certificados SSL de Let's Encrypt son válidos solo por un período corto de 80 días. Por lo tanto, configuraremos un cronjob ahora para renovar automáticamente el certificado SSL cuando sea necesario. El comando es 'letsencrypt renew'.

Configure un cronjob para la renovación automática de LE. Ejecutar:

crontab -e

para abrir el crontab raíz en un editor. Inserte la siguiente línea al final del archivo:

0 1 * * * /usr/bin/letsencrypt renew &> /dev/null

guarde el archivo, esto activará el cronjob. Este cronjob llamará al comando de renovación de Let's Encrypt todas las noches a la 1 am. El comando renovará el certificado SSL solo cuando sea necesario (30 días antes de que caduque), no hay problema para ejecutarlo todas las noches.

9. Instalar 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

IMPORTANTE:El instalador de apt le hará varias preguntas ahora, una de ellas es seleccionar el tipo de servidor web. Un error común es que el tipo de servidor web solo está resaltado pero no seleccionado. Para seleccionar un elemento en un menú apto, debe presionar la barra espaciadora en el teclado después de navegar hasta el elemento con las teclas de tabulación o cursor. ¡Solo resaltarlo no es suficiente!

Verá las siguientes preguntas:

Web server to configure automatically: <-- Select the option: apache2
Configure database for phpmyadmin with dbconfig-common? <-- Yes
MySQL application password for phpmyadmin: <-- Press enter, apt will create a random password automatically.

9.1 Acceso raíz a PHPMyAdmin con MariaDB

El siguiente paso es necesario solo para las instalaciones de MariaDB, si usa MySQL 5.7, omita este paso.

MariaDB habilita un complemento llamado "unix_socket" para el usuario raíz de forma predeterminada, este complemento evita que el usuario raíz pueda iniciar sesión en PHPMyAdmin y que las conexiones TCP a MySQL funcionen para el usuario raíz. Para obtener un usuario con privilegios para crear otros usuarios y bases de datos en PHPMyAdmin, crearé un nuevo usuario de MySQL con el nombre "admin" con los mismos privilegios que el usuario root.

Inicie sesión en la base de datos MySQL como usuario root en el shell:

mysql -u root

Cree un nuevo usuario con el nombre "admin" y la contraseña "howtoforge". ¡Reemplace la contraseña "howtoforge" con una contraseña segura en los comandos a continuación!

CREATE USER 'admin'@'localhost' IDENTIFIED BY 'howtoforge';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit

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

10 Descarga de imagen de máquina virtual de este tutorial

Este tutorial está disponible como una imagen de máquina virtual lista para usar en formato ovf/ova que es compatible con VMWare y Virtualbox. La imagen de la máquina virtual utiliza los siguientes detalles de inicio de sesión:

Inicio de sesión SSH/Shell

Nombre de usuario:administrador
Contraseña:howtoforge

Este usuario tiene derechos sudo.

Inicio de sesión de MySQL

Nombre de usuario:root
Contraseña:howtoforge

La IP de la VM es 192.168.1.100, se puede cambiar en el archivo /etc/network/interfaces. Cambie todas las contraseñas anteriores para proteger la máquina virtual.

11 enlaces

  • Apache:http://httpd.apache.org/
  • PHP:http://www.php.net/
  • MySQL:http://www.mysql.com/
  • MariaDB:https://mariadb.com/
  • Ubuntu:http://www.ubuntu.com/
  • phpMyAdmin:http://www.phpmyadmin.net/

Ubuntu
  1. Instalación de WordPress en Ubuntu Linux con Apache y MySQL

  2. Tutorial del servidor LAMP de Ubuntu 14.10 con Apache 2, PHP 5 y MySQL (MariaDB)

  3. Tutorial del servidor LAMP de Ubuntu 15.04 con Apache 2, PHP 5 y MariaDB (en lugar de MySQL)

  4. Cómo instalar Apache, MySQL, PHP (LAMP) en Ubuntu 16.04 LTS

  5. Cómo configurar Opencart con LAMP (PHP, Apache, Mariadb) en Ubuntu 20.04

Instale la pila Apache, MySQL, PHP (LAMP) en Ubuntu 18.04 LTS

Instale Apache, MySQL, PHP (LAMP Stack) en Ubuntu 20.04 LTS

Cómo instalar Apache, MySQL, PHP en Ubuntu 18.04 LTS

Cómo instalar Linux, Apache, MySQL y PHP (LAMP) en un servidor en la nube con Ubuntu 20.04

Cómo instalar Linux, Apache, MySQL y PHP (LAMP) en un servidor en la nube con Ubuntu 12.04

Cómo instalar LAMP en Ubuntu 15.10 (Linux, Apache, MySQL y PHP)