Instalación y configuración del entorno LAMP (Apache + PHP + MySQL) en ArchLinux con systemd

ArchLinux systemd LAMP

Ahora que las nuevas instalaciones de ArchLinux usan systemd de manera predeterminada, algunas cosas han cambiado, entre ellas, ciertos detalles en la instalación y configuración del entorno LAMP (Linux + Apache + MySQL + PHP).

Aprovechando que hace unos días realicé una instalación limpia en mi equipo de producción, también lo hice con dicha instalación y configuración, misma que comparto con ustedes en el presente tutorial.

[Actualización 2014-03-10] ¡Ha llegado Apache 2.4 a ArchLinux! Es un cambio importante y requiere nuestra intervención manual para hacer que nuestro servidor LAMP vuelva a funcionar sin problemas.

Paso 1. Instalación de los paquetes necesarios

Antes que nada, instalemos los paquetes básicos que necesitaremos.

sudo pacman -S apache php php-apache mysql

Paso 2. Ejecutando Apache

Ejecutemos (vía systemd) nuestro servidor web Apache con las configuraciones predeterminadas:

sudo systemctl start httpd.service

Adicionalmente, para que Apache se ejecute de manera automática en los siguientes booteos, usa:

sudo systemctl enable httpd.service

Ahora bien, ¿cómo se llama tu servidor? Eso lo tienes establecido en dos archivos: /etc/hostname y /etc/hosts. Lo más común es que en ambos tengas localhost. Si no es así, reemplaza “localhost” por tu nombre de servidor en el resto del tutorial.

En tu navegador web favorito, entra a http://localhost/ o http://127.0.0.1/ donde veremos algo similar a la siguiente captura de pantalla.

Apache corriendo en ArchLinux con systemd

¡Muy feo! ¿verdad? Es porque localhost no tiene ningún contenido, ¡así que vamos a solucionarlo!.

Paso 3. Creando nuestro index.html

Antes de crear nuestro index.html, debemos tener en cuenta dos detalles que se encuentran establecidos en /etc/httpd/conf/httpd.conf (el archivo de configuración principal de Apache en ArchLinux):

  • Durante el booteo del sistema, el encargado de ejecutar Apache es root, pero por motivos de seguridad, de inmediato se cambia al usuario http (que a su vez pertenece al grupo http).

  • La carpeta predeterminada para el contenido de localhost es /srv/http, cuyo propietario es root de manera predeterminada.

Debido a lo anterior, debemos realizar algunas acciones para poder empezar a crear contenido en nuestro servidor web local.

  1. Primero, debemos agregar nuestro usuario al grupo http.

    sudo gpasswd -a miusuario http

    Debemos cerrar nuestra sesión actual y volver a loguearnos para que el cambio sea aplicado.

  2. Ahora, debemos ceder la propiedad de root a http (tanto para el usuario como para el grupo) de manera recursiva para /srv/http.

    sudo chown -R http:http /srv/http
  3. Debemos establecer permisos de escritura para el grupo http (al cual nos hemos agregado) para la misma carpeta (y todo su contenido).

    sudo chmod -R g+w /srv/http

Ahora si, ya podemos crear nuestro index.html, el cual puede ser desde una simple línea de texto …

echo 'Hola Mundo!' > /srv/http/index.html

… hasta algo más elaborado (usa tu editor preferido y guardalo como index.html en /srv/http/).

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="utf-8">
    <title>¡Bienvenidos a ArchLinux!</title>
    <style>
        body { margin: 0; font-family: Helvetica, Arial, sans-serif; }
        h1 { background: #ccc; margin: 0; padding: 10px; }
        #contenido { margin: 10px auto; padding: 10px; width: 500px; }
    </style>
</head>
<body>
<div id="contenido">
    <h1>¡Bienvenido!</h1>
    <p><strong>Apache</strong> corriendo bajo <strong>ArchLinux</strong> con <strong>systemd</strong>.</p>
</div>
</body>
</html>

index.html en funcionamiento

Paso 4. Configurando PHP

Este paso es el típico de siempre. Vamos a configurar Apache para que reconozca a PHP.

Primero, como root, abre el archivo /etc/httpd/conf/httpd.conf con tu editor favorito. Por ejemplo:

sudo vim /etc/httpd/conf/httpd.conf

Ahí, realiza los siguientes cambios:

  1. En la lista que tiene todos los “LoadModule“, y después de LoadModule dir_module modules/mod_dir.so, agrega la línea:

    LoadModule php5_module modules/libphp5.so
  2. Al final de la lista de todos los “Include“, agrega la línea:

    Include conf/extra/php5_module.conf
  3. Asegúrate que la siguiente línea no esté comentada (que no tenga “#” al inicio) en la sección :

    TypesConfig conf/mime.types
  4. Descomenta (elimina el “#” del inicio) la siguiente línea:

    MIMEMagicFile conf/magic

Ahora, como root, abre el archivo /etc/httpd/conf/mime.types con tu editor preferido (¡seguro que es vim!). Por ejemplo:

sudo vim /etc/httpd/conf/mime.types

Al final de dicho archivo agrega la línea:

application/x-httpd-php5            php php5

¡Listo! Reiniciemos Apache para aplicar los cambios:

sudo systemctl restart httpd.service

Para probar que Apache ya reconoce a PHP, vamos a crear el típico archivo de ejemplo:

echo '<?php phpinfo(); ?>' > /srv/http/info.php

Y finalmente, para verlo entra a tu navegador web, y entra a http://localhost/info.php

PHP reconocido por Apache

Paso 5. Configurando MySQL

Primero, vamos a ejecutar de inmediato el servidor de base de datos MySQL con:

sudo systemctl start mysqld.service

Para que se ejecute en cada booteo, usamos:

sudo systemctl enable mysqld.service

Y antes de que hagamos cualquier otra cosa, debemos establecer la contraseña del usuario “root” de MySQL (no es el mismo que el root del sistema). La forma más sencilla de hacerlo, es ejecutar la siguiente utilería:

mysql_secure_installation

Lo anterior nos preguntará primero la contraseña actual de root, la cual no existe, así que debemos dar [Enter], y entonces escribir (y confirmar) la nueva contraseña. Adicionalmente, la utilería nos preguntará algunos detalles adicionales, a los cuales se sugiere responder las opciones predeterminadas.

Ahora, tenemos que decirle a PHP de la existencia de MySQL. Vamos a abrir el archivo /etc/php/php.ini con tu editor favorito …

sudo vim /etc/php/php.ini

… y descomentar (eliminar el “;” al inicio) las siguientes líneas:

 extension=mysqli.so
 extension=mysql.so

Si deseas realizar alguna modificación en los parámetros de MySQL debes hacerlo editando el archivo /etc/mysql/my.cnf.

Finalmente, reiniciemos Apache y MySQL para aplicar los cambios realizados.

sudo systemctl restart httpd.service
sudo systemctl restart mysqld.service

Comentarios Adicionales

Aunque ya los mencioné, no olviden que los archivos de configuración son:

  • Apache: /etc/httpd/conf/httpd.conf
  • PHP: /etc/php/php.ini
  • MySQL: /etc/mysql/my.cnf

Tampoco olviden que bajo systemd, se utilizan los comandos:

  • Habilitar para cada booteo: sudo systemctl enable <servicio>
  • Ejecutar de inmediato: sudo systemctl start <servicio>
  • Detener de inmediato: sudo systemctl stop <servicio>
  • Reiniciar de inmediato: sudo systemctl restart <servicio>
  • Ver el estado del servicio: sudo systemctl status <servicio>

Donde <servicio> puede ser alguno de los siguientes:

  • Apache: httpd.service
  • MySQL: mysqld.service

Por último, no olviden consultar la documentación oficial para más información:

Share

  • christian

    ¡Jó Gregorio!
    Qué tutoriales más buenos que haces.
    :)
    ¿Es difícil una alternativa con lighttpd o nginx? Encuentro que Apache está muy documentado pero otros servidores web más ligeros no tanto.
    Creo que puede ser interesante para equipos más humildes tipos Raspberry Pi.
    Saludos desde España
    Christian.

    • http://gespadas.com Gregorio Espadas

      Ya lo había pensado. Apenas tenga la oportunidad probaré con ambos. ¡Gracias por tus palabras!

  • Yoyo Fernández

    Perfecto, como siempre :)

    Hace poco me pidieron esto para Manjaro pero co9mo yo nunca he usado LAMP pues no sabia que publicar. Ahora pondré un extracto en mi blog y los derivará a la casa del tocayo Gregorio ;)

    Pulgar arriba si estás de acuerdo xDD

    • http://gespadas.com Gregorio Espadas

      Pulgar arriba mi estimado tocayo, ¡gracias! :-)

  • Pingback: LAMP (Apache + PHP + MySQL) en ArchLinux con systemd (válido para Manjaro) « Deb Linux()

  • http://twitter.com/Luweeds Luweeds

    Muy buena y clara la info, yo he usado lighttpd por como dice christian por su ligereza y facilidad de instalación, aunque se que Apache es el predominante, me llama la atención nginx pues es usado en páginas de gran volumen de tráfico y de bases de datos no se nada, así es que muchas gracias por la info de MySQL….MongoDB, maríaDB hay muchas¡¡¡ cualquier info sobre estos temas me gusta.THX crack¡¡

    • http://gespadas.com Gregorio Espadas

      yw! :-)

  • jacoboAR

    Hola Gregorio?? Yo tenía instalado Xampp antes de migrar a systemd y no he notado ningún problema. Tengo que hacer algún cambio?
    Otra cosa, por qué lamp y no xampp?;)

    • http://gespadas.com Gregorio Espadas

      Tengo entendido que xampp está orientado a entornos de desarrollo y pruebas, mas no a nivel producción, en cuyo caso lo mejor es la instalación y configuración manual de cada uno de los componentes de LAMP.

  • Pingback: Siguiendo la telaraña 42/2012 - Thalskarth's Maëlstrom()

  • Pingback: Bitacoras.com()

  • Julio Cesar Martinez Luna

    y para el phpmyadmin es lo mismo que antes

  • erufenix

    Buen post camarada.

    Por si van a usar otra ruta para su DocumentRoot (httpdocs) que no sea la default (/svr/http) y sus paginas se ven en blanco o les arroja este error PHP Warning: Unknown: open_basedir restriction in effect .

    En sus directivas de agregen la sig, línea
    php_admin_value open_basedir none .

    Más info acá http://www.mydigitallife.info/php-scripts-open_basedir-restriction-in-effect-error/

  • http://twitter.com/coellobranco Coello Branco

    Me da este error al hacer yo un index.html :

    Acceso prohibido!

    Usted no tiene permiso de accesar al objeto solicitado. El objeto está protegido contra lectura, o no puede ser leido por el servidor.

    Por favor contacte con el webmaster en caso de que usted crea que existe un error en el servidor.

    Error 403

    • http://gespadas.com Gregorio Espadas

      Antes de intentar crear el archivo, ¿efectuaste los pasos previos para dar los permisos necesarios? Todo ello se encuentra descrito a detalle en el tutorial, favor de leerlo de nuevo (para ser exactos, la sección “Paso 3. Creando nuestro index.html”).

      • http://twitter.com/coellobranco Coello Branco

        Sí, seguí el tuto, lo solucioné ahora poniendo permisos 777 a http, no se si es correcto, pero ahora funka. Gracias y enhorabuena por el blog.

        • http://gespadas.com Gregorio Espadas

          Ojo: Si es un entorno de producción, no es muy buena idea poner esos permisos.

          Gracias por tus palabras. ¡Saludos!

  • Marc

    Buenas Noches. Primero que nada felicitarte por los manuales que estás creando, gracias a ti me ha sido más fácil el cambio a Archlinux.

    Después de esto, comentarte que llevo dos días peleándome con los servicios ya que no consigo que arranquen al inicio. Cuando uso el comando con el enable, me crea incluso el enlace simbólico pero al reiniciar el sistema no me arranca. Debo poner a mano la línea con el comando start.
    A ver si me puedes echar una mano, no es que sea de vida o muerte pero es un poco molesto tener que iniciar a mano los servicios.
    Muchas gracias y felicidades por este fantástica Web!

    • http://gespadas.com Gregorio Espadas

      Muchas gracias por tus palabras. Es muy raro lo que mencionas, pues el objetivo de “enable” es habilitar los servicios para que se ejecuten en cada booteo. ¿Al bootear ejecutaste systemctl para ver el estado de los servicios? ¿Hay más servicios que no se hayan habilitado?

      • tortosi

        Si ejecuto systemctl no me aparecen esos dos servicios por ninguna parte. Para más información es la segunda vez que instalo el sistema, y estoy usando la última iso disponible.

        • http://gespadas.com Gregorio Espadas

          ¿Qué servicios son exactamente? Quizás sea alguno que aún no esté correctamente soportado.

          • Marc

            me refiero a que no aparecen en el listado el httpd ni el mysqld.
            Simplemente con el “sudo systemctl enable mysqld.service” no se instala por algún motivo. Debo iniciarlo manualmente cada vez que reinicio con “sudo systemctl start mysqld.service” e igual me pasa con el httpd

          • http://gespadas.com Gregorio Espadas

            Yo tengo ambos instalados y no tengo ese problema. Intenta reinstalar ambos paquetes, quizás sus unidades de servicio están corruptas o desactualizadas.

          • Marc

            Los reinstalo de nuevo pero me encuentro con el mismo caso. Incluso al hacer el “enable” me crea el enlace simbólico:
            ln -s ‘/usr/lib/systemd/system/httpd.service’ ‘/etc/systemd/system/multi-user.target.wants/httpd.service’

            Todo parece correcto. No veo el porqué no me instala el servicio en el arranque. Muy raro, y por internet no he encontrado información al respecto.

          • http://gespadas.com Gregorio Espadas

            Al bootear, ¿qué te muestra el status de cada servicio?

            systemctl status httpd.service
            systemctl status mysqld.service

            Quizás ahí te muestre algún error que se nos esté escapando.

          • Marc

            Tengo instalado gnome pero antes de cargar el GDM veo que normalmente pone el nombre del servicio y a su izquierda aparece [ok] [fail] o no aparece nada. En el caso de mysql no aparece nada al lado, no se si significará que no lo intenta cargar? Vaya, ni idea. En cuanto al apache no se como ha sido pero ahora lo carga

      • Marc

        Si ejecuto systemctl no me aparecen esos dos servicios por ninguna parte. Para más información es la segunda vez que instalo el sistema, y estoy usando la última iso disponible.

  • Jairo Alonso Velásquez

    Justo ahora estoy usando LAMP bajo Arch, pero no con PHP sino con PYTHON/DJANGO, y en vez de MYSQL usó POSTGRESQL,los pasos varían, peor igual gracias por el post, es muy util.

    • http://gespadas.com Gregorio Espadas

      Sería muy interesante que compartieras qué pasos realizaste. ¡Saludos!

  • http://twitter.com/JaminSamuel Jamin Fernandez

    Waoo increible .. que buen tutorial ..

    Son muchos pasos … pero valen la pena, en las distro .deb con solo poner “sudo apt-get install lamp-server^” la cosa se instala automaticamente :D

    Y luego “sudo apt-get install phpmyadmin” y listo

  • jona

    Yo utilizo Lampp (xampp) y no tuve ningun problema tras la migración. Saludos.

  • Pingback: Como instalar OwnCloud en Archlinux | Solo GNU/Linux()

  • AlonsoSanti14

    hola, he querido cambiar la ruta por default pero me da un error 403

  • http://www.facebook.com/miketennatlowe Mike Damián López

    Muchas gracias ,exelente tuto me sirvio muchisimo!
    Saludos.

  • superichy

    Hola Gregorio, otra vez yo… :)
    Te consulto,
    XAMPP 1.8.1 va perfecto en mi Manjaro Linux 083 Xfce, luego de correr en la consola,
    $ sudo /opt/lampp/lampp start

    Lo que no puedo lograr, es que XAMPP se inicie automáticamente cuando inicia el sistema operativo…

    $ sudo systemctl enable xampp.service
    no me dio ningún error ni alerta, es decir, ok

    OBVIAMENTE, antes de hacer eso… hice ESTO:

    $ sudo nano /etc/systemd/system/xampp.service
    ##############################
    [Unit]
    Description=XAMPP

    [Service]
    ExecStart=/opt/lampp/lampp start

    [Install]
    WantedBy=multi-user.target
    ##############################

    However, tras reiniciar… no funciona.
    ¿Alguna sugerencia?

    • http://gespadas.com Gregorio Espadas

      MI sugerencia es que sigas todos los pasos e indicaciones de la wiki » https://wiki.archlinux.org/index.php/Xampp

      • superichy

        Si, eso lo vi… pero no indica como hacer para que xampp se ejecute automáticamente con el sistema operativo

  • Pingback: Integrando MongoDB y PHP en ArchLinux - Obux()

  • aldobelus

    Hola Espadas. Yo tengo Manjaro y estoy haciendo el curso de iDesWeb de desarrollo. Recomendaban hacer un blog para tener las cosas del curso a mano y poder recurrir a ellas si hace falta. Me ha resultado perfecto tu tuto así que lo he añadido al blog, que es particular, para mí, pero cuento con que te parece bien. Además incluyo tu nombre ya en la entrada. Gracias por guiarnos!

    • http://gespadas.com Gregorio Espadas

      ¿Y cuál es tu blog?

  • http://www.facebook.com/abitae Abel Arana

    que bien Gregorio Espadas… me fue muy útil la publicación… y tengo una pregunta

    como configuro phpmyadmin

  • Suzaku

    Ahora que Arch cambio MySQL por MariaDB habra que actualizar un poco el tutorial

    • carlos avila

      Es lo mismo, parece ser!!

  • facer

    Excelente, gracias por la información

  • Julio Gilabert

    Eres un genio… Menudo manual … de 10 !!!! Enhorabuena

    • http://gespadas.com Gregorio Espadas

      ¡Muchas gracias!

  • Eduardo Campos

    Excelente aporte, me funciono muy bien en Manjaro, indispensable para instalar Drupal

  • vampire

    existe algo similar para activar postgress?

  • Rodrigo

    Muchas gracias compa me sirvió perfecto en Manjaro. Saludos!

  • Pingback: Anonymous()

  • Ivan Gabriel

    Buen día! Quiero agradecerle por este tremendo tutorial. Vengo de utilizar XAMPP en distintas versiones de Ubuntu, y LAMP en una VPS que tengo con Debian. Pero al pasarme a Manjaro, no quería “meter la pata” y que me durara dos días el SO jeje.
    Me gustaría hacerle una consulta técnica al respecto, porque he revisado bastante en la web y no hallo forma de solucionarlo (por si usted lo sabe): ¿Como activo mod_rewrite, mod_expires y mod_ssl en Apache para Manjaro? Uso archivos .htaccess y no logro que los tenga en cuenta.
    He probado editar el archivo “httpd.conf”, dandole la ruta completa en cada ‘LoadModule'; pasar distintas sentencias ‘AllowOverride None’ a ‘AllowOverride All’ / ‘AllowOverride FileInfo’ (al final la deje como estaban, da miedo dejar eso mal).
    En Debian / Ubuntu era necesario, ademas de asegurarse que los correspondientes LoadModule no esten comentados y con la ruta correcta, ejecutar ‘sudo a2enmod rewrite’ en la terminal por ejemplo, y cambiar todas las ocurrencias “AllowOverRide None” por “AllowOverRide All” en el archivo “/etc/apache2/sites-available/default”.
    No encontré algo parecido para Manjaro.

    Saludos cordiales y nuevamente gracias por este tutorial!

    • http://gespadas.com/ Gregorio Espadas

      Hola Ivan. Antes de meternos en caminos oscuros, empezaremos por lo obvio… ¿has reiniciado Apache cada vez que has realizado esos cambios? Te invito a leer la documentación disponible en la wiki sobre el tema: https://wiki.archlinux.org/index.php/LAMP

      • Ivan Gabriel

        Como dio’ manda :). Sobre eso, me dio curiosidad que cuando ejecutas “sudo systemctl restart httpd.service” la consola no muestre algún avance del reinicio.
        Te comento que tras unos trasteo, era evidentemente la ocurrencia “AllowOverride None” del apartado , en el archivo httpd.conf. Cambiándola por “AllowOverride FileInfo” ya reconoce los archivos .htaccess. Utilice un script que enmascaraba la url por htaccess para probar si funciona :)
        Ademas tenia otro error al mismo tiempo, no relacionado, y era que no tenia activada la opción “short_open_tag” en el archivo php.ini, y eso hacia que obtuviera paginas en blanco y lo atribuyera a Apache. Me ayudo mucho el archivo ErrorLog de Apache para descubrirlo, y así solucionarlo y que ya me funcione todo.
        Muchísimas gracias por responder! Y es verdad, hay caminos oscuros, pero necesarios a veces si queremos saber un poquito mas :). Saludos cordiales.

        • http://gespadas.com/ Gregorio Espadas

          Genial que pudiste resolver el problema :-) ¡Saludos!

  • Jefferson

    Muito bom, obrigado pelo post, continue fazendo esse otimo trabalho

  • rgaxiola

    NO FUNCIONA AL CARGAR http://localhost/info.php

  • carlos avila

    Perfecto, no podría describirlo de otra forma, recien me cambie a Manjaro. Nunca toquetee con una distro de base Arch por lo que soy bastante nuevo en el mundillo Arch e hijas, después de moverme en Linux Mint por cerca de cuatro años.
    Ahora me pregunto porque no me cambie antes.

  • Alf

    Buenas,

    Usando el articulo para KAOS Linux me encuentro el siguiente error:

    Error “Invalid command ‘MIMEMagicFile’, perhaps misspelled or defined by a module not included”.

    Un par de cafés después, varias búsquedas en google y tal, me doy cuenta que no he leido bien el error, me basta con descomentar la linea “LoadModule mime_magic_module modules/mod_mime_magic.so” y todo funcionando correcto.

    Como siempre, tus tutoriales perfectos…el fallo es mi vicio por hacer cosas de madrugada :P

    Un saludo

  • Pingback: Siguiendo la telaraña 42/2012 - Thalskarth's Maëlstrom()

  • osvaldo

    cuando hago la parte de

    MIMEMagicFile conf/magic ya no puedo reiniciar el servicio de apache y me deja de funcionar

  • Roberto Herrera Díaz

    Hola, a alguien le a pasado que cada vez que quiere entrar a mysql tiene que resetear el password de root? Siempre que quiero acceder por phpmyadmin tengo que hacer los pasos que describen aquí: https://wiki.archlinux.org/index.php/MySQL_%28Espa%C3%B1ol%29#Como_resetear_la_contrase.C3.B1a_del_Root No eh intentado agregar otro usuario, pero se me hace raro que siempre tenga que hacer el reset.

  • valentin garcia

    Esta es una buena guiá la seguí cuando estaba bajo MANJARO, actualmente estoy bajo arch quise seguir los mismos pasos pero no se levanta el servidor Apache :/

    • http://gespadas.com/ Gregorio Espadas

      Hay cambios con la llegada de Apache 2.4 a Arch. Sigue el enlace que puse casi al principio del post (en el recuadro amarillo).

  • luis kike

    hola me gusto tu tutorial, pero cambiando un poco de tema como podria hacerle para instalar mongodb y que owncloud lo reconosca, y que owncloud pueda trabajar con esa base de datos

  • http://wakowarner.com/ Wako

    Al poner

    LoadModule php5_module modules/libphp5.so
    El apache deja de funcionar :

  • Luis Leal

    no pueso hacer el paso

    Al final de la lista de todos los “Include“, agrega la línea:
    Include conf/extra/php5_module.conf

    por favor se mas especifico de favor no lo logro conseguir
    ayudame!

    saludos!!!