INSTALA UNA PILA LAMP EN UBUNTU 20.04
Introducción
LAMP (Linux, Apache, MySQL y PHP) es un conjunto de software de código libre que puede ser instalado en conjunto para habilitar un servidor para alojamiento de sitios y aplicaciones web dinámicas.
Requisitos
- 1 Instalación de Ubuntu 20.04
- Ejecutar comandos con sudo
Paso 1: Instalar Apache 2
Ejecutamos el comando sudo apt update
sudo apt update
sudo apt install apache2
Una vez instalado hay que verificar que todo este correcto con el firewall UFW, así que lo primero sería verificar si esta activo el firewall con
sudo ufw status
Si te aparece como inactivo lo puedes activar con
sudo ufw enable
Verificamos nuevamente con
sudo ufw status
Y esta vez debería decir que esta activo. Durante la instalación, Apache se registra con UFW para proporcionar algunos perfiles de aplicación que pueden utilizarse para habilitar o deshabilitar el acceso a Apache a través del firewall.
Para ver la lista de los perfiles permitido por ufw escribimos lo siguiente:
sudo ufw app list
Entonces obtenemos una lista de los perfiles de la aplicación que podría ser algo similar a esto
Aplicaciones disponibles:
Apache
Apache Full
Apache Secure
CUPS
Como lo indica el resultado, hay tres perfiles disponibles para Apache:
- Apache: Este perfil abre el puerto 80 (tráfico web normal sin cifrar)
- Apache Full: Este perfil abre el puerto 80 (tráfico web normal sin cifrar) y el puerto 443 (tráfico TLS/SSL cifrado)
- Apache Secure: Este perfil abre solo el puerto 443 (tráfico TLS/SSL cifrado)
Para obtener más información sobre estos perfiles podemos hacer lo siguiente, por ejemplo para “Apache Full” ejecutamos
sudo ufw app info "Apache Full"
El cual nos debería arrojar algo como esto
Perfil: Apache Full
Título: Web Server (HTTP,HTTPS)
Descripción: Apache v2 is the next generation of the omnipresent Apache web
server.
Puertos:
80,443/tcp
Con este mensaje nos podemos dar cuenta de que los puertos 80 y 443 están abiertos. En caso de que no estén abiertos tendrás que ejecutar el siguiente comando para abrirlos
sudo ufw allow "Apache Full"
Finalmente podemos ir a nuestro navegador favorito y escribir en la barra de direcciones http:localhost
o simplemente localhost
y nos deberá mostrar algo similar a esto que es la pagina web por defecto de apache y con lo cual ya podremos saber que esta instalado y funcionando
Paso 2: Instalar MySQL
En la terminal ejecutamos
sudo apt install mysql-server
Con esto ya esta instalado pero no esta configurada la seguridad por lo tanto tenemos que ejecutar el siguiente comando para mejorar la seguridad
sudo mysql_secure_installation
Una vez hecho esto lo primero que nos preguntara es que si queremos configurar el complemento para la validación de contraseñas o sea que esto es para que cuando crees una contraseña estés obligado a crearla con cierto nivel de seguridad dependiendo del nivel que selecciones en el complemento. Yo siempre tengo el hábito de crear contraseñas fuertes por tanto no necesito este complemento y responderé no. Ahora independientemente de que si seleccionaste si o no anteriormente te pedirá que crees una contraseña para el usuario root y esta contraseña deberá ser fuerte si es que quieres la mejor seguridad. Ahora ponemos Y
y luego ENTER
para aceptar los valores predeterminados para todas las preguntas siguientes. Con esto, se eliminarán algunos usuarios anónimos y la base de datos de prueba, se deshabilitarán las credenciales de inicio de sesión remoto de root y se cargarán estas nuevas reglas para que MySQL aplique de inmediato los cambios que realizó.
En los sistemas Ubuntu con MySQL 5.7 (y versiones posteriores), el usuario root de MySQL se configura para la autenticación usando el complemento auth_socket de manera predeterminada en lugar de una contraseña. Esto en muchos casos proporciona mayor seguridad y utilidad, pero también puede generar complicaciones cuando deba permitir que un programa externo (como phpMyAdmin) acceda al usuario.
Para usar una contraseña para conectar con MySQL como root, deberá cambiar su método de autenticación de auth_socket
a otro complemento, como caching_sha2_password
o mysql_native_password
. Para hacer esto, abrimos la consola de MySQL desde la terminal con
sudo mysql
A continuación, comprobamos con el siguiente comando el método de autenticación utilizado por una de las cuentas de usuario de MySQL:
SELECT user,authentication_string,plugin,host FROM mysql.user;
Entonces arroja algo como esto
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$
FnudS2j`py&dt.%SbmzWVN5kUH8SOq5/28qgY2F3sNKh0Y0H22BtqrjIN3 | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root | | auth_socket | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
En este ejemplo, podemos ver que, en efecto, el usuario root
se autentica utilizando el complemento de auth_socket
. Para configurar la cuenta root para autenticar con una contraseña, ejecutamos una instrucción ALTER USER
para cambiar qué complemento de autenticación utiliza y establecemos una nueva contraseña.
Asegurémonos de cambiar password
por una contraseña segura, y tengamos en cuenta que este comando cambiará la contraseña root que establecimos anteriormente
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';
A continuación, ejecutamos FLUSH PRIVILEGES
para indicar al servidor que vuelva a cargar la tabla de permisos y aplicamos sus nuevos cambios:
FLUSH PRIVILEGES;
Comprobamos de nuevo los métodos de autenticación empleados por cada uno de nuestros usuarios para confirmar que root ya no esta usando el complemento auth_socket
SELECT user,authentication_string,plugin,host FROM mysql.user;
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
| debian-sys-maint | $A$005$n'2!2o,B.^])OL2KLakpqVosxE.6//4bB6245Q58ATS2l4u.AQxBE0LO6 | caching_sha2_password | localhost |
| mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password | localhost |
| root | $A$005$Um#8I(qUK@)sB3UQ0QuPewrKQ6wsA1YT6127gx5zsmQ9geKkMZtDGWOCvC | caching_sha2_password | localhost |
+------------------+------------------------------------------------------------------------+-----------------------+-----------+
5 rows in set (0.00 sec)
Puedemos ver en este resultado de ejemplo que el root user de MySQL ahora autentica usando caching_sha2_password
. Una vez que confirme esto en su propio servidor, podrá cerrar el shell de MySQL:
exit
Paso 2: Instalar PHP
Instalamos Apache para presentar nuestro contenido y MySQL para almacenar y gestionar nuestros datos. PHP es el componente de nuestra configuración que procesará el código para mostrar contenido dinámico al usuario final. Además del paquete php
, necesitaremos php-mysql
, un módulo PHP que permite que este se comunique con bases de datos basadas en MySQL. También necesitará libapache2-mod-php
para habilitar Apache para gestionar archivos PHP. Los paquetes PHP básicos se instalarán automáticamente como dependencias. También instalaremos algunas extensiones extras que se necesitaran posteriormente para instalar PhpMyAdmin.
sudo apt install php libapache2-mod-php php-mysql php-mbstring php-zip php-gd php-json php-curl
En este punto, nuestra pila LAMP está plenamente operativa, pero, para poder probar su configuración con una secuencia de comandos PHP, lo mejor es instalar un host virtual de Apache adecuado para almacenar los archivos y las carpetas de nuestro sitio web. Así que manos a la obra, que diga dedos a la obra y ejecutamos lo siguiente (your_domain
, debe ser cambiado por el nombre de su propio dominio)
sudo mkdir /var/www/your_domain
ejemplo:
sudo mkdir /var/www/php.programadorvagabundo.com
A continuación, asigne la propiedad del directorio con la variable de entorno $USER
, que hará referencia a su usuario de sistema actual:
sudo chown -R $USER:$USER /var/www/php.programadorvagabundo.com
Luego, abra un nuevo archivo de configuración en el directorio sites-available
de Apache usando el editor de línea de comandos que prefiera. En este caso, utilizaremos gedit
:
sudo gedit /etc/apache2/sites-available/php.programadorvagabundo.com.conf
De esta manera, se creará un nuevo archivo en blanco donde pegaremos la siguiente configuración básica:
<VirtualHost *:80>
ServerName php.programadorvagabundo.com
ServerAlias www.php.programadorvagabundo.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/php.programadorvagabundo.com
DirectoryIndex info.php
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Con esta configuración de VirtualHost, le indicamos a Apache que proporcione php.programadorvagabundo.com usando /var/www/php.programadorvagabundo.com como directorio root web.
Ahora, puede usar a2ensite
para habilitar el nuevo host virtual:
sudo a2ensite php.programadorvagabundo.com
Puede ser conveniente deshabilitar el sitio web predeterminado que viene instalado con Apache. Es necesario hacerlo si no se utiliza un nombre de dominio personalizado, dado que, en este caso, la configuración predeterminada de Apache sobrescribirá su host virtual. Para deshabilitar el sitio web predeterminado de Apache, escriba lo siguiente:
sudo a2dissite 000-default
Ahora reinicie Apache para que los cambios tengan efecto
sudo systemctl restart apache2
Pasemos a crear y apuntar los nombres del servidor en el servidor local de Ubuntu 20.04. Así que dedos a la obra. Primero en nuestra bash abrimos como superausuario con el editor de nuestra preferencia (en mi caso gedit) el archivo hosts
sudo gedit /etc/hosts
Una vez abierto veremos algo similar a esto:
127.0.0.1 localhost
127.0.1.1 nombre-de-tu-equipo
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Ahora debajo de la línea que dice localhost podemos incluir los nombres de servidor que deseemos probar, del siguiente modo:
127.0.0.1 localhost
#Versiones PHP de prueba
127.0.0.1 nombre-de-tu-proyecto-1.tu-dominio.com
127.0.1.1 nombre-de-tu-equipo
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Ejemplo:
127.0.0.1 localhost
#Versiones PHP de prueba
127.0.0.1 php.programadorvagabundo.com
127.0.1.1 vagabundo
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Ahora nuevamente reiniciamos el servidor Apache para que surtan efecto los cambios
sudo systemctl restart apache2
Ahora que disponemos de una ubicación personalizada para alojar los archivos y las carpetas de nuestro sitio web, crearemos una secuencia de comandos PHP de prueba para verificar que Apache pueda gestionar solicitudes y procesar solicitudes de archivos PHP.
Cree un archivo nuevo llamado info.php
dentro de su carpeta root web personalizada:
gedit /var/www/php.programadorvagabundo.com/info.php
Con esto se abrirá un archivo vacío. Añada el siguiente texto, que es el código PHP válido, dentro del archivo:
<?php phpinfo(); ?>
Cuando termine, guarde y cierre el archivo.
Para probar esta secuencia de comandos, diríjase a su navegador web y acceda al nombre de dominio, seguido del nombre de la dirección que en este caso es info.php
:
http://nombre-de-tu-proyecto-1.tu-dominio.com/info.php
Ejemplo:
http://php.programadorvagabundo.com/info.php
Y se vera algo como esto:
Paso 4: Instalar PhpMyAdmin
Ahora procederemos a instalar PhpMyAdmin ya que esta interfaz web nos ayudara para administrar nuestras base de datos de una forma práctica y cómoda ahorrándonos tiempo de trabajo, así que ejecutamos lo siguiente
sudo apt install phpmyadmin
La primera pregunta que nos hace la respondemos de forma afirmativa.
¡¡OJO!! Mucho ojo con la siguiente pregunta, ya que en este paso muchos se equivocan. Ahora te preguntara sobre la configuración de phpmyadmin y deberás seleccionar el tipo de servidor web como se aprecia en la siguiente imagen
¡¡OJO!! Entonces como se ve en la imagen hay un “cuadro rojo” en la opción de “apache2” así que generalmente esto hace parecer que esta marcado y que debemos seguir con aceptar pero noooo… aquí debes presionar la barra espaciadora para verdaderamente seleccionar la opción donde este el cuadro rojo que en este caso es apache2 y ahora aparecerá un asterisco (*) dentro del cuadro rojo
y entonces y solo entonces ahora si podrás seguir con <Aceptar>
Luego te hará la siguiente pregunta:
¿Desea configurar la base de datos para phpmyadmin con «dbconfig-common»?
A lo cual respondemos afirmativamente
Posteriormente les pedirá que creen una contraseña a lo cual les recomiendo que pongan la misma contraseña que crearon en la base de datos MySQL
El proceso de instalación añade el archivo de configuración de phpMyAdmin de Apache al directorio /etc/apache2/conhable/, donde se lee de forma automática. Para terminar de configurar Apache y PHP a fin de que funcionen con phpMyAdmin, la única tarea que queda a continuación en esta sección del tutorial es habilitar explícitamente la extensión PHP mbstring. Esto se puede hacer escribiendo lo siguiente:
sudo phpenmod mbstring
Ahora solo reiniciamos por última vez apache
sudo systemctl restart apache2
phpMyAdmin ahora está instalado y configurado para funcionar con Apache. Podemos probarlo visitando
http://localhost/phpmyadmin/
y deberemos poder ver algo similar a esto