Logo LAMP

LAMP + phpMyAdmin en Linux Debian

 
 

Índice

  1. Introducción
  2. Instalación y configuración
  3. Probando phpMyAdmin

 

  1. Introducción (Volver al índice General)
    En este artículo explicaremos como instalar, LAMP y phpMyAdmin. LAMP es el acrónimo usado para describir un sistema de infraestructura de Internet que usa las siguientes herramientas:

     
    En nuestro caso usaremos como sistema operativo Linux Debian e instalaremos como gestor de bases de datos MariaDB y como lenguaje de programación PHP. Además, instalaremos phpMyAdmin como herramienta gráfica de administración de MariaDB/MySQL para crear, administrar, editar y eliminar bases de datos.

  2.  

  3. Instalación y configuración (Volver al índice General)
    Primero actualizamos la lista de paquetes disponibles en los repositorios ejecutando como root el siguiente comando:

    $ sudo apt-get update

    A continuación actualizamos los paquetes instalados. Se instalarán las nuevas versiones:

    $ sudo apt-get upgrade

    Finalmente, instalamos los paquetes necesarios:

    $ sudo apt-get install apache2 php mariadb-server php-mysql phpmyadmin

    Si hubiese instalado otro servidor web, durante la instalación se nos pedirá que seleccionemos el servidor web a configurar, que deberá ser apache2. También se nos preguntará si queremos configurar una base de datos para phpMyAdmin con debconfig-common a lo que contestaremos con un . Finalmente se nos pedirá que establezcamos una contraseña para el usuario phpmyadmin en MaríaDB.

    El siguiente paso será configurar las distintas aplicaciones instaladas.
     

    • Configuración de Apache (Volver al índice General)

      • Habilitar acceso al directorio home del usuario (Volver al índice General)
        Habilitando el directorio público de los usuario /home/$USER/public_html, cada usuario tendrá su URL personal dentro del dominio raíz del sitio, por ejemplo http://www.midominio.com/~usuario. Para habilitarlo, ejecutaremos el siguiente comando que habilitará el módulo userdir:

        $ sudo a2enmod userdir

        Tendremos que aseguramos de que Apache accede al directorio /home/usuario/public_html. Para otorgar el acceso os aconsejo hagáis lo siguiente:
        Primero comprobamos que el directorio existe, en caso de no existir, lo creamos:

        $ sudo mkdir /home/usuario/public_html

        Otorgamos privilegios de lectura, escritura y ejecución al propietario y solo privilegio de ejecución al resto de usuarios al directorio personal /home/usuario:

        $ sudo chmod 701 /home/usuario

        Si listamos el directorio /home obtendremos algo parecido a esto:

        $ ls -l /home
        total 24
        drwx-----x 47 usuario usuario  4096 abr 26 18:20 usuario

        Para el directorio /home/usuario/public_html haremos lo mismo.

        $ sudo chmod 701 /home/usuario/public_html
      • No olvidar que los archivos contenidos en el directorio public_html deberán tener permiso de lectura para todos los usuarios.
         

      • Habilitar el módulo mod_rewrite (Volver al índice General)
        El módulo mod_rewrite permite crear direcciones URL alternativas a las URL dinámicas generadas por nuestros sitios web, haciendo que sean más legibles, fáciles de recordar y facilite la taréa a los buscadores a la hora de indexarlas.

        Para habilitar el módulo ejecutaremos el siguiente comando:

        $ sudo a2enmod rewrite
      • Habilitar el módulo SSL para conexiones encriptadas seguras (Volver al índice General)
        Para habilitar el módulo ejecutaremos el siguiente comando:

        $ sudo a2enmod ssl
        Considering dependency setenvif for ssl:
        Module setenvif already enabled
        Considering dependency mime for ssl:
        Module mime already enabled
        Considering dependency socache_shmcb for ssl:
        Enabling module socache_shmcb.
        Enabling module ssl.
        See /usr/share/doc/apache2/README.Debian.gz on how to configure SSL and create self-signed certificates.
        To activate the new configuration, you need to run:
          systemctl restart apache2

        A continuación habilitamos el sitio default-ssl con el siguiente comando:

        $ sudo a2ensite default-ssl
        Enabling site default-ssl.
        To activate the new configuration, you need to run:
          systemctl reload apache2

        Tras ejecutar los comandos anteriores, ya tendremos configurado nuestro Apache para servir conexiones seguras, pero con una salvedad, y es que el certificado que usa es uno que se instala por defecto.

        Si queremos un certificado apropiado para nuestro sitio, tendremos que generar nuestros propios certificados. Pincha aquí para ver tutorial de como Crear certificado autofirmado para Apache.

        El archivo con la configuración de nuestro sitio seguro será, en este caso, /etc/apache2/sites-available/default-ssl.conf. Este archivo habrá que modificarlo en caso de usar certificados propios.

        Si vamos a trabajar con el módulo SSL, sería conveniente implementar en vuestro servidor los siguientes contenidos publicados en ZeppelinuX, o al menos, tenerlos en cuenta o a mano por si os hacen falta:

        1. Crear certificado autofirmado para Apache
        2. Fortificar SSL en Servidores Web Apache
        3. Autenticación Basic vs Digest en Apache
      • Reiniciar el servicio Apache para que surtan efecto los cambios (Volver al índice General)
        Para que surtan efectos todos los cambios realizados tendremos que reiniciar el servicio ejecutando el siguiente comando:

        $ sudo systemctl restart apache2
      • Habilitar el servicio Apache para que se inicie al arrancar (Volver al índice General)
        Para habilitar el servicio Apache en el arranque ejecutaremos el siguiente comando:

        $ sudo systemctl enable apache2

        También podemos comprobar si Apache se está ejecutando o no con el siguiente comando:

        $ sudo systemctl status apache2
      • Probando Apache (Volver al índice General)
        La instalación por defecto de Apache incluye una página de bienvenida. Si en el navegador ingresaremos la URL http://localhost obtendremos el siguiente resultado:
        Página de Bienvenida de Apache 2
        Pero podemos ser un poco creativos creando nuestros propios archivos o páginas de pruebas. Para probar Apache crearemos dos archivos (páginas de prueba), uno en el directorio raíz por defecto de Apache, en /var/www/html y otro en el directorio /home/usuario/public_html.

        Si nos interesa mantener la página de bienvenida que Apache trae por defecto deberemos renombrarla:

        $ sudo mv -f /var/www/html/index.html /var/www/html/bienvenida.html

        En /var/www/html crearemos el archivo index.html;

        $ sudo nano /var/www/html/index.html

        Y añadiremos las siguientes líneas:

        <!DOCTYPE html>
        <html lang="es"> 
          <head>  
            <title>Test Apache</title>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" $
          </head/>
          <body>
            <h1>Hola mundo</h1>
            Apache está en ejecución
          </body>
        </head></html>

        En el navegador ingresaremos la URL http://localhost y obtendremos el siguiente resultado:
        Test Apache raíz
        Crearemos en /home/usuario/public_html el archivo index.html;

        $ nano /home/usuario/public_html/index.html

        Y añadiremos las siguientes líneas:

        <!DOCTYPE html>
        <html lang="es">
          <head>  
            <title>Home usuario</title>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
          </head>
          <body>
            <h1>Directorio Home del usuario</h1>
            Apache está en ejecución
          </body>
        </html>

        En el navegador ingresaremos la URL http://localhost/~usuario y obtendremos el siguiente resultado:
        Test Apache public_html

        Si hemos optado por el cifrado de nuestro sitio habilitando el módulo SSL, al ingresar en el navegador la URL con el esquema https, veremos que el navegador nos presenta una página indicadonos que la conexión no es segura, debido a que nuestro certificado es autofirmado. Para continuar añadiremos la excepción.
        Añadir excepción a sitio no seguro

    •  

       
       

    • Configuración de PHP (Volver al índice General)

      • Comprobar la versión de PHP instalada (Volver al índice General)
        Para conocer la versión de PHP que tenemos instalada, ejecutaremos el siguiente comando:

        $ php -version
        PHP 7.0.27-0+deb9u1 (cli) (built: Jan  5 2018 13:51:52) ( NTS )
        Copyright (c) 1997-2017 The PHP Group
        Zend Engine v3.0.0, Copyright (c) 1998-2017 Zend Technologies
            with Zend OPcache v7.0.27-0+deb9u1, Copyright (c) 1999-2017, by Zend Technologies

        En el ejemplo vemos que la versión instalada de PHP es la 7.

      • Configuración para PHP (Volver al índice General)
        Si necesitamos cambiar alguna opción de PHP, deberemos editar /etc/php/7.0/apache2/php.ini
      •  

      • Probando PHP (Volver al índice General)
        Crearemos un archivo test.php en el directorio raíz de Apache.

        $ sudo nano /var/www/html/test.php

        Agregamos las siguientes líneas:

        <?php
        phpinfo ();
        ?>

        Abrimos el navegador web, introducimos la dirección http://localhost/test.php y obtendremos algo parecido a la imagen de abajo:
        Página de prueba de PHP en Apache 2

    •  

    • Configuración de MariaDB (MySQL) (Volver al índice General)

      • Configurar la contraseña de usuario root de MariaDB/MySQL (Volver al índice General)
        Se recomienda configurar una contraseña para el usuario root para acceder al SGBD. Para hacerlo ejecutaremos el siguiente comando:

        $ sudo mysql_secure_installation

        La primera parte de la salida es la siguiente:

        NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
              SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
         
        In order to log into MariaDB to secure it, we'll need the current
        password for the root user.  If you've just installed MariaDB, and
        you haven't set the root password yet, the password will be blank,
        so you should just press enter here.
         
        Enter current password for root (enter for none): 
        OK, successfully used password, moving on...

        Que viene a decir que para iniciar sesión en MariaDB necesitamos la contraseña actual, pero si acabamos de instalar MaríaDB y aún no se ha configurado la contraseña del usuario root, la contraseña estará en blanco, por lo tanto, en este punto presionaremos la tecla intro. Una vez presionada la tecla intro nos indicara que la contraseña utilizada es correcta y pasamos a configurar la nueva contraseña:

        Setting the root password ensures that nobody can log into the MariaDB
        root user without the proper authorisation.
         
        Set root password? [Y/n] y
        New password: 
        Re-enter new password: 
        Password updated successfully!
        Reloading privilege tables..
         ... Success!

        Ya hemos creado la contraseña del root para MariaDB.

      • Eliminar usuario anonimo (Volver al índice General)
        Por defecto en la instalación de MariaDB se crea un usuario anónimo, lo que permite a cualquier persona iniciar sesión en MariaDB sin tener una cuenta de usuario creada para ellos. Su función es para realizar pruebas y la instalación. Debemos eliminarlo antes de pasar a un entorno de producción. Por lo tanto, en este punto decimos que si (Y).

        By default, a MariaDB installation has an anonymous user, allowing anyone
        to log into MariaDB 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? [Y/n] y
         ... Success!
      • Deshabilitar el inicio de sesión del usuario root de forma remota (Volver al índice General)
        Normalmente el usuario root solo debería poder conectarse desde localhost. Esto asegura que alguien no puede adivinar la contraseña del usuario root de la red. Por ello, en este punto, también decimos que si (Y) a deshabilitar el inicio de sesión del usuario root de forma remota.

        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? [Y/n] y
         ... Success!
      • Eliminar la base de datos test (Volver al índice General)
        Por defecto, MariaDB viene con una base de datos llamada test que cualquiera puede acceder. Esto también es solo para pruebas y debe eliminarse antes de pasar a un entorno de producción. Volvemos en este punto a decir que si (Y) a la eliminación de la base de datos test.

        By default, MariaDB 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? [Y/n] y
         - Dropping test database...
         ... Success!
         - Removing privileges on test database...
         ... Success!
      • Recargar las tablas de privilegios (Volver al índice General)
        El proceso termina recargando las tablas de privilegios asegurando que todos los cambios realizados hasta el momento surtirán efecto inmediatamente.
        Volvemos a decir que si (Y) a recargar las tablas de privilegios. Seguidamente hace una limpieza y nos indica que se han completado todos los pasos anteriores y que la instalación ahora es segura.

        Reloading the privilege tables will ensure that all changes made so far will take effect immediately.
         
        Reload privilege tables now? [Y/n]
        ... Success!
        Cleaning up...
        All done! If you've completed all of the above steps, your MariaDB
        installation should now be secure.
         
        Thanks for using MariaDB!
         
        MariaDB has been installed and ready to use.
      • Probando MariaDB (Volver al índice General)
        Como aún solo tenemos un usuario, que es el root, estableceremos una conexión con el sistema gestor de bases de datos (SGDB) con el siguiente comando:

        $ mysql -u root -p
        Enter password: 
        Welcome to the MariaDB monitor.  Commands end with ; or \g.
        Your MariaDB connection id is 13
        Server version: 10.1.26-MariaDB-0+deb9u1 Debian 9.1
         
        Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
         
        Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
         
        MariaDB [(none)]>

        Como prueba final, pediremos un listado de las bases de datos:

        MariaDB [(none)]> show databases;
        +--------------------+
        | Database           |
        +--------------------+
        | information_schema |
        | mysql              |
        | performance_schema |
        | phpmyadmin         |
        +--------------------+
        4 rows in set (0.00 sec)
         
        MariaDB [(none)]>
      • ERROR 1698 (28000): Access denied for user ‘root’@’localhost’ (Volver al índice General)
        Si al intentar acceder con el usuario root con el siguiente comando:

        $ mysql -u root -p
        Enter password:

        Obtenemos el siguiente error:

        ERROR 1698 (28000): Access denied for user 'root'@'localhost'

        Podrá corregir dicho error siguiendo las indicaciones del artículo Corregir ERROR 1698 (28000): Access denied for user ‘root’@’localhost’ en MariaDB (MySQL) publicado en ZeppelinuX.

      • error no. 2013: Lost Connection to mysql server during query (Volver al índice General)
        Si se obtiene el mensaje «error no. 2013: Lost Connection to mysql server during query» al intentar conectarse a MariaDB mediante TCP/IP, esto es debido al sistema TCP wrappers (tcpd), el cual utiliza el sistema hosts_access(5) para permitir (allow) o denegar (disallow) las conexiones.

        Si se tiene este problema, debemos asegurarnos de agregar lo siguiente en el archivo /etc/hosts.allow:
        Editamos el archivo con el siguiente comando:

        $ sudo nano /etc/hosts.allow

        Y añadimos las siguientes líneas:

        mysqld : ALL : ALLOW
        mysqld-max : ALL : ALLOW

        Y similar para otros daemons de MariaDB/MySQL.

        Nota: Los ejemplos anteriores son un caso simple, diciendole a tcpd que permita todas las conexiones desde cualquier lugar. Podemos utilizar una selección más apropiada de fuentes permitidas en lugar de utilizar el comodín ALL.
        Por ejemplo, si queremos permitir conexiones solo desde localhost y de una red en concreto, por ejemplo zeppelinux.es, la sintaxis sería la siguiente:

        mysqld : localhost,*.zeppelinux.es : ALLOW
        mysqld-max : localhost,*.zeppelinux.es : ALLOW

        Para más información vea Archivos de configuración de Wrappers TCP

        Podría también ser necesario editar el archivo /etc/my.cnf:

        $ sudo nano /etc/my.cnf

        Y comentar la siguiente línea como sigue:

        # skip-networking

       

    • Probando phpMyAdmin (Volver al índice General)
      En el navegador ingresaremos la URL https://localhost/phpmyadmin y obtendremos el siguiente resultado:
      Página de inicio de sesión en phpMyAdmin
      Puede ocurrir que al ingresar la URL nos aparezca el siguiente mensaje: «La URL solicitada no se encuentra en este servidor (The requested URL was not found on this server)».

      Para solucionarlo, haremos lo siguiente:

      1. Copiaremos el archivo de configuración de phpMyAdmin para Apache en /etc/apache2/conf-available con el nombre phpmyadmin.conf (puedes ser el nombre que queramos):
        $ sudo cp /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf
      2. Si hemos utilizado el nombre de archivo phpmyadmin.conf, habilitamos la configuración con el siguiente comando:
        $ sudo a2enconf phpmyadmin
      3. Y finalmente, reiniciamos el servidor Apache:
        $ sudo systemctl restart apache2

!Muy importante!: No olvidéis echar un vistazo a las publicaciones relacionadas listadas más abajo, publicadas en </ZeppelinuX>. Seguro que hay algo que os interesa implementar en vuestro servidor Apache.

Espero que este artículo os haya sido de utilidad. Si pensáis que podéis colaborar para mejorar este artículo, que hay algo erróneo en él o simplemente deseáis comentarlo, por favor, dejad vuestra opinión más abajo.
 
Seguir J. Carlos:

Técnico Informático - Desarrollo Web - Administración de Redes

Técnico Informático. Desarrollo Web. Administración de redes.

Últimas publicaciones de

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.