Instalación de LAMP (Linux, Apache, MySQL/MariaDB y PHP/PhpMyAdmin) en Arch Linux

Arch Linux proporciona un entorno de sistema flexible y de última generación y es una solución potente y adecuada para el desarrollo de aplicaciones web en pequeños sistemas no críticos debido a que es un sistema completo de código abierto y ofrece las últimas actualizaciones en Kernels y software web para servidores y bases de datos.

Install LAMP in Arch Linux

El objetivo principal de este tutorial es guiarle paso a paso a través de instrucciones que al final le llevarán a instalar una de las combinaciones de software más utilizadas en el desarrollo web: LAMP (Linux, Apache, MySQL/MariaDB, y PHP/PhpMyAdmin) y le presentará algunas características agradables (scripts Bash rápidos y sucios) que no están presentes en un sistema Arch Linux, pero pueden facilitar el trabajo en la creación de múltiples Virtual Hosts, generar Certificados SSL y Claves necesarias para transacciones seguras HTTS.

Requerimientos

  1. Proceso previo de instalación de Arch Linux – salte el último paso con DHCP.
  2. Proceso previo de instalación de LEMP en Arch Linux – solo la parte de configuración de Dirección IP Estática y acceso remoto SSH.

Paso 1: Instalar Software Básico LAMP

1. Después de la instalación mínima del sistema con dirección IP estática y acceso remoto al sistema mediante SSH, actualice su equipo Arch Linux utilizando la herramienta pacman.

$ sudo pacman -Syu

2. Cuando finalice el proceso de actualización, instala LAMP por partes, primero instala Apache Web Server y arranca/verifica cada proceso demonio del servidor.

$ sudo pacman -S apache 
$ sudo systemctl start httpd 
$ sudo systemctl status httpd
Install Apache Web Server

3. Instala el lenguaje de script dinámico del lado del servidor PHP y su módulo Apache correspondiente.

$ sudo pacman -S php php-apache

4. En el último paso, instala la base de datos MySQL, elige 1 (MariaDB) bifurcación de base de datos comunitaria, luego arranca y verifica el estado del demonio.

$ sudo pacman -S mysql 
$ sudo systemctl start mysqld 
$ sudo systemctl status mysqld
Install MySQL Database
Start MySQL Database

Ahora tienes instalado y arrancado el software básico de LAMP con las configuraciones predeterminadas hasta el momento.

Paso 2: Asegurar la Base de Datos de MySQL

5. El siguiente paso es asegurar la base de datos de MySQL estableciendo una contraseña para la cuenta root, eliminando cuentas de usuarios anónimos, eliminando la base de datos de prueba y prohibiendo el inicio de sesión remoto para el usuario root (presiona la tecla [Enter] para la contraseña actual de la cuenta root y responde con Yes a todas las preguntas de seguridad).

$ sudo mysql_secure_installation
Secure MySQL Database
Set MySQL root Password

6. Verifica la conectividad de la base de datos de MySQL ejecutando el siguiente comando y luego sale del shell de la base de datos con la instrucción quit o exit.

$ mysql -u root -p
Verify MySQL Database Connectivity

Paso 3: Modificar el Archivo de Configuración Principal de Apache

7. Las siguientes configuraciones están mayoritariamente relacionadas con el Apache Web Server para proporcionar una interfaz dinámica para el Hosting Virtual con el lenguaje de script PHP, alojamientos virtuales SSL o no SSL y pueden hacerse modificando las configuraciones del archivo de servicio httpd.

Primero abre el archivo de configuración principal de Apache con tu editor de texto favorito.

$ sudo nano /etc/httpd/conf/httpd.conf

En la parte inferior del archivo, añade las siguientes dos líneas.

IncludeOptional conf/sites-enabled/*.conf
IncludeOptional conf/mods-enabled/*.conf
Include Virtual Host Configuration

El objetivo de las declaraciones Include aquí es informar a Apache que a partir de ahora debe leer más configuraciones de todos los archivos que se encuentran en /etc/httpd/conf/sites-enabled/ (para Virtual Hosting) y /etc/httpd/conf/mods-enabled/ ( para módulos de servidor habilitados) en rutas del sistema que terminan en la extensión .conf.

8. Después de que Apache haya sido instruido con estas dos directivas, crea los directorios del sistema necesarios emitiendo los siguientes comandos.

$ sudo mkdir /etc/httpd/conf/sites-available
$ sudo mkdir /etc/httpd/conf/sites-enabled
$ sudo mkdir /etc/httpd/conf/mods-enabled

La ruta sites-available contiene todos los archivos de configuración de Virtual Hosts que no están activados en Apache, pero el siguiente script de Bash utilizará este directorio para enlazar y habilitar sitios web que se encuentran allí.

Paso 4: Crear los Comandos Apache a2ensite y a2dissite

9. Ahora es el momento de crear los scripts de Apache a2ensite y a2dissite que servirán como comandos para habilitar o deshabilitar archivos de configuración de Virtual Host. Escribe el comando cd para regresar a tu ruta de usuario $HOME y crea tus scripts bash a2ensite y a2dissite usando tu editor favorito.

$ sudo nano a2ensite

Agrega el siguiente contenido en este archivo.

#!/bin/bash
if test -d /etc/httpd/conf/sites-available && test -d /etc/httpd/conf/sites-enabled  ; then
echo "-------------------------------"
else
mkdir /etc/httpd/conf/sites-available
mkdir /etc/httpd/conf/sites-enabled
fi

avail=/etc/httpd/conf/sites-available/$1.conf
enabled=/etc/httpd/conf/sites-enabled
site=`ls /etc/httpd/conf/sites-available/`

if [ "$#" != "1" ]; then
        echo "Use script: n2ensite virtual_site"
        echo -e "\nAvailable virtual hosts:\n$site"
        exit 0
else
if test -e $avail; then
sudo ln -s $avail $enabled
else
echo -e "$avail virtual host does not exist! Please create one!\n$site"
exit 0
fi
if test -e $enabled/$1.conf; then
echo "Success!! Now restart Apache server: sudo systemctl restart httpd"
else
echo  -e "Virtual host $avail does not exist!\nPlease see avail virtual hosts:\n$site"
exit 0
fi
fi
Create a2eniste Apache Script

Ahora crea el archivo de script bash a2dissite.

$ sudo nano a2dissite

Agrega el siguiente contenido.

#!/bin/bash
avail=/etc/httpd/conf/sites-enabled/$1.conf
enabled=/etc/httpd/conf/sites-enabled
site=`ls /etc/httpd/conf/sites-enabled`

if [ "$#" != "1" ]; then
        echo "Use script: n2dissite virtual_site"
        echo -e "\nAvailable virtual hosts: \n$site"
        exit 0
else
if test -e $avail; then
sudo rm  $avail
else
echo -e "$avail virtual host does not exist! Exiting"
exit 0
fi
if test -e $enabled/$1.conf; then
echo "Error!! Could not remove $avail virtual host!"
else
echo  -e "Success! $avail has been removed!\nsudo systemctl restart httpd"
exit 0
fi
fi
Create a2dissite Apache Script

10. Después de que los archivos hayan sido creados, asigna permisos de ejecución y cópialos a un directorio ejecutable de $PATH para hacerlos disponibles en todo el sistema.

$ sudo chmod +x a2ensite a2dissite
$ sudo cp a2ensite a2dissite /usr/local/bin/
Set Execute Permissions

Paso 5: Crear Virtual Hosts en Apache

11. El archivo de configuración predeterminado del host virtual para el servidor web Apache en Arch Linux es proporcionado por el archivo httpd-vhosts.conf ubicado en la ruta /etc/httpd/conf/extra/, pero si tienes un sistema que utiliza muchos hosts virtuales puede ser muy difícil mantener el control de qué sitio web está activado o no y. Si deseas deshabilitar un sitio web, debes comentar o eliminar todas sus directivas y eso puede ser una misión difícil si tu sistema proporciona muchos sitios web y tu sitio web tiene más directivas de configuración.

Usar las rutas sites-available y sites-enabled, simplifica en gran medida la tarea de habilitar o deshabilitar sitios web y también preserva todos los archivos de configuración de tus sitios web, ya estén activados o no.

En el siguiente paso vamos a construir el primer Host Virtual que apunta al localhost predeterminado con la ruta predeterminada de DocumentRoot para servir archivos de sitios web (/srv/http.

$ sudo nano /etc/httpd/conf/sites-available/localhost.conf

Agrega las siguientes directivas de Apache aquí.

<VirtualHost *:80>
        DocumentRoot "/srv/http"
        ServerName localhost
        ServerAdmin [email protected]
        ErrorLog "/var/log/httpd/localhost-error_log"
        TransferLog "/var/log/httpd/localhost-access_log"

<Directory />
    Options +Indexes +FollowSymLinks +ExecCGI
    AllowOverride All
    Order deny,allow
    Allow from all
Require all granted
</Directory>

</VirtualHost>
Create Virtual Hosts in Apache

Las declaraciones más importantes aquí son las directivas Port y ServerName que indican a Apache abrir una conexión de red en el puerto 80 y redirigir todas las consultas con el nombre de localhost para servir archivos ubicados en la ruta /srv/http/.

12. Tras haber creado el archivo de localhost, actívalo y luego reinicia el demonio httpd para ver los cambios.

$ sudo a2ensite localhost
$ sudo systemctl restart httpd
Active a2ensite Script

13. Luego apunta tu navegador a http://localhost, si lo ejecutas desde el sistema Arch o http://Arch_IP si utilizas un sistema remoto.

Browse Apache

Paso 6: Habilitar SSL con Alojamiento Virtual en LAMP

SSL (Secure Sockets Layer) es un protocolo diseñado para encriptar las conexiones HTTP a través de redes o Internet, que hace que los datos fluyan a ser transmitidos a través de un canal seguro utilizando claves de criptografía simétrica/asimétrica y se proporciona en Arch Linux por el paquete OpenSSL.

14. Por defecto, el módulo SSL no está habilitado en Apache en Arch Linux y puede ser activado eliminando el comentario del módulo mod_ssl.so del archivo de configuración principal httpd.conf y del archivo Include httpd-ssl.conf situado en la ruta extra de httpd.

Sin embargo, para simplificar las cosas vamos a crear un nuevo archivo de módulo para SSL en la ruta mods-enabled y dejar sin tocar el archivo de configuración principal de Apache. Cree el siguiente archivo para el módulo SSL y agregue el contenido siguiente.

$ sudo nano /etc/httpd/conf/mods-enabled/ssl.conf

Agregue el siguiente contenido.

LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

Listen 443

SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
SSLPassPhraseDialog  builtin
SSLSessionCache        "shmcb:/run/httpd/ssl_scache(512000)"
SSLSessionCacheTimeout  300
Enable SSL with Virtual Hosting

15. Ahora cree un archivo de Servidor Virtual que apunte al mismo nombre localhost pero utilizando esta vez las configuraciones de servidor SSL y cambiarle un poco el nombre para recordar que se refiere a localhost con SSL.

$ sudo nano /etc/httpd/conf/sites-available/localhost-ssl.conf

Agregue el siguiente contenido en este archivo.

<VirtualHost *:443>
        DocumentRoot "/srv/http"
        ServerName localhost
        ServerAdmin [email protected]
        ErrorLog "/var/log/httpd/localhost-ssl-error_log"
        TransferLog "/var/log/httpd/localhost-ssl-access_log"

SSLEngine on

SSLCertificateFile "/etc/httpd/conf/ssl/localhost.crt"
SSLCertificateKeyFile "/etc/httpd/conf/ssl/localhost.key"

<FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
</FilesMatch>

<Directory "/srv/http/cgi-bin">
    SSLOptions +StdEnvVars
</Directory>

BrowserMatch "MSIE [2-5]" \
         nokeepalive ssl-unclean-shutdown \
         downgrade-1.0 force-response-1.0

CustomLog "/var/log/httpd/ssl_request_log" \
          "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

<Directory />

    Options +Indexes +FollowSymLinks +ExecCGI
    AllowOverride All
    Order deny,allow
    Allow from all
Require all granted
</Directory>

</VirtualHost>
Create SSL Virtual Host

Además de las directivas Port y ServerName, otras directivas importantes aquí son aquellas que señalan al archivo SSL Certificate y al archivo SSL Key que aún no se han creado, así que no reinicie el Servidor Web Apache o se obtendrán algunos errores.

16. Para crear el archivo de Certificado SSL y las Claves, instale el paquete OpenSSL emitiendo el comando siguiente.

$ sudo pacman -S openssl

17. A continuación, crea el siguiente script Bash que crea y almacena automáticamente todos tus certificados de Apache y claves en la ruta del sistema /etc/httpd/conf/ssl/.

$ sudo nano apache_gen_ssl

Agrega el siguiente contenido del archivo, guárdalo y hazlo ejecutable.

#!/bin/bash
mkdir /etc/httpd/conf/ssl
cd /etc/httpd/conf/ssl

echo -e "Enter your virtual host FQDN: \nThis will generate the default name for Nginx  SSL certificate!"
read cert

openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out $cert.key
chmod 600 $cert.key
openssl req -new -key $cert.key -out $cert.csr
openssl x509 -req -days 365 -in $cert.csr -signkey $cert.key -out $cert.crt

echo -e " The certificate "$cert" has been generated!\nPlease link it to Apache SSL available website!"

ls -all /etc/httpd/conf/ssl
exit 0
Store Apache Certificates and Keys
$ sudo chmod +x apache_gen_ssl

Si deseas que el script esté disponible en todo el sistema, cópialo a una $PATH ejecutable.

$ sudo cp /apache_gen_ssl  /usr/local/bin/

18. Ahora genera tu certificado y claves ejecutando el script. Proporciona tus opciones SSL y no olvides que el nombre del certificado y el Nombre Común deben coincidir con tu dominio oficial (FQDN).

$ sudo ./apache_gen_ssl
Create Apache Certificates and Keys
Enter Certificates Details

Después de haber creado el certificado y las claves, no olvides modificar las configuraciones de certificados y claves del Virtual Host SSL para que coincidan con el nombre de este certificado.

19. El último paso es activar el nuevo Virtual Host SSL y reiniciar tu servidor para aplicar las configuraciones.

$ sudo a2ensite localhost-ssl
$ sudo systemctl restart httpd
Activate SSL Virtual Host

¡Eso es todo! Para verificarlo, abre el navegador y agrega la IP de Arch en la URL utilizando el protocolo HTTPS: https://localhost o https://system_IP.

Browse Apache over SSL

Paso 7: Habilitar PHP en Apache

20. Por defecto, Apache solo sirve contenido de archivos estáticos HTML en Arch Linux sin soporte para lenguajes de secuencias dinámicas. Para activar PHP, primero abre el archivo de configuración principal de Apache y busca y descomenta la siguiente declaración de LoadModule (php-apache no funciona con mod_mpm_event en Arch Linux).

$ sudo nano /etc/httpd/conf/httpd.conf

Usando [Ctrl]+[w], busca y comenta la siguiente línea para que se vea así.

#LoadModule mpm_event_module modules/mod_mpm_event.so
Enable PHP Module

21. Luego, crea un archivo nuevo para el módulo de PHP en la ruta mods-enabled con el siguiente contenido.

$ sudo nano /etc/httpd/conf/mods-enabled/php.conf

Agrega exactamente el siguiente contenido (debes usar mod_mpm_prefork).

LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
LoadModule php5_module modules/libphp5.so

Include conf/extra/php5_module.conf
Enable mod_mpm_prefork Module

22. Para verificar la configuración, crea un archivo PHP llamado info.php en tu DocumentRoot (/srv/http/), luego reinicia Apache y dirige tu navegador al archivo info.php: https://localhost/info.php.

<?php

phpinfo();

?>
$ sudo systemctl restart httpd
Verify PHP Information

¡Eso es todo! Si todo se ve como en la imagen de arriba, ahora tienes habilitado el lenguaje de scripting de servidor PHP en Apache y ahora puedes desarrollar sitios web utilizando CMS de código abierto como WordPress, por ejemplo.

Si deseas verificar las configuraciones de sintaxis de Apache y ver una lista de módulos cargados sin reiniciar el demonio httpd, ejecuta los siguientes comandos.

$ sudo apachectl configtest
$ sudo apachectl -M

Paso 8: Instalar y Configurar PhpMyAdmin

23. Si no dominas la línea de comandos de MySQL y deseas un acceso remoto simple a la base de datos MySQL proporcionado a través de una interfaz web, entonces necesitas el paquete PhpMyAdmin instalado en tu sistema Arch.

$ sudo pacman -S phpmyadmin php-mcrypt

24. Después de instalar los paquetes, debes habilitar algunas extensiones de PHP (mysqli.so, mcrypt.so – para autenticación interna) y también puedes habilitar otros módulos necesarios para futuras plataformas de CMS como openssl.so, imap.so o iconv.so, etc.

$ sudo nano /etc/php/php.ini

Busca y descomenta las extensiones mencionadas anteriormente.

extension=mcrypt.so
extension=mssql.so
extension=mysqli.so
extension=openssl.so
extension=iconv.so
extension=imap.so
extension=zip.so
extension=bz2.so
Install and Configuring PhpMyAdmin

Además, en el mismo archivo, busca y localiza la declaración open_basedir y añade la ruta del sistema de PhpMyAdmin (/etc/webapps/ y /usr/share/webapps/) para asegurarte de que PHP pueda acceder y leer archivos bajo esos directorios (Si también cambias la ruta DocumentRoot del Virtual Host de /srv/http/ a otra ubicación, debes añadir la nueva ruta aquí también).

Enable open_basedir

25. Lo último que necesitas hacer para acceder a la Interfaz Web de PhpMyAdmin es añadir las declaraciones de Apache de PhpMyAdmin en los Virtual Hosts. Como medida de seguridad, asegúrate de que la Interfaz Web de PhpMyAdmin solo sea accesible desde localhost (o la dirección IP del sistema) utilizando el protocolo HTTPS y no desde otros Virtual Hosts diferentes. Así que, abre tu archivo Apache localhost-ssl.conf y en la parte inferior, antes de la última declaración , añade el siguiente contenido.

$ sudo nano /etc/httpd/conf/sites-enabled/localhost-ssl.conf
Alias /phpmyadmin "/usr/share/webapps/phpMyAdmin"

<Directory "/usr/share/webapps/phpMyAdmin">
    DirectoryIndex index.html index.php
    AllowOverride All
    Options FollowSymlinks
    Require all granted
</Directory>
Create PhpMyAdmin Virtual Host Configuration

26. Luego reinicia el demonio Apache y dirige tu navegador a la siguiente dirección y deberías poder acceder a tu Interfaz Web de PhpMyAdmin: https://localhost/phpmyadmin o https://IP_del_sistema/phpmyadmin.

Access PhpMyAdmin Web Interface

27. Si, después de iniciar sesión en PhpMyAdmin, ves un error en la parte inferior relacionado con un blowfish_secret, abre y edita el archivo /etc/webapps/phpmyadmin/config.inc.php e inserta una cadena aleatoria como la que se muestra en la siguiente declaración, luego actualiza la página.

$cfg['blowfish_secret'] = ‘{^QP+-(3mlHy+Gd~FE3mN{gIATs^1lX+T=KVYv{ubK*U0V’ ;
Fix blowfish_secret Error

Paso 9: Habilitar LAMP a nivel de sistema

28. Si deseas que el conjunto LAMP se inicie automáticamente después de reiniciar el sistema, ejecuta los siguientes comandos.

$ sudo systemctl enable httpd mysqld
Enable LAMP System Wide

Estas son algunas de las principales configuraciones en LAMP necesarias para transformar un sistema Arch Linux en una plataforma web simple pero poderosa, rápida y robusta con software de servidor de vanguardia para entornos pequeños no críticos, pero si persistes y aún quieres usarlo en un entorno de producción grande, debes armarte con mucha paciencia y prestar especial atención a las actualizaciones de paquetes y hacer copias de seguridad regulares del sistema para una rápida restauración en caso de fallos del sistema.

Source:
https://www.tecmint.com/install-lamp-in-arch-linux/