Búsqueda de sitios web

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 desarrollar aplicaciones web en sistemas pequeños no críticos debido a que es un código abierto completo y proporciona las últimas versiones actualizadas de kernels y software web para servidores y bases de datos.

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

Requisitos

  1. Proceso de instalación anterior de Arch Linux: omita la última parte con DHCP.
  2. Instalación anterior de LEMP en Arch Linux: solo la parte con la configuración de la Dirección IP estática y el acceso SSH remoto.

Paso 1: Instale el software básico LAMP

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

sudo pacman -Syu

2. Cuando finalice el proceso de actualización, instale LAMP desde partes, primero instale Apache Web Server e inicie/verifique cada demonio de proceso del servidor.

sudo pacman -S apache 
sudo systemctl start httpd 
sudo systemctl status httpd

3. Instale el lenguaje de secuencias de comandos dinámico del lado del servidor PHP y su módulo Apache.

sudo pacman -S php php-apache

4. En el último paso, instale la base de datos MySQL, elija 1 bifurcación de la base de datos comunitaria (MariaDB), luego inicie y verifique el estado del demonio.

sudo pacman -S mysql 
sudo systemctl start mysqld 
sudo systemctl status mysqld

Ahora tiene el software LAMP básico instalado y iniciado con las configuraciones predeterminadas hasta el momento.

Paso 2: Proteger la base de datos MySQL

5. El siguiente paso es proteger la base de datos MySQL estableciendo una contraseña para la cuenta raíz, eliminar las cuentas de usuarios anónimos, eliminar la base de datos de prueba y no permitir el inicio de sesión remoto para el usuario raíz (presione [ Ingrese] para la contraseña actual de la cuenta raíz y responda con en todas las preguntas de seguridad).

sudo mysql_secure_installation

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

mysql -u root -p

Paso 3: modificar el archivo de configuración principal de Apache

7. Las siguientes configuraciones están la mayoría relacionadas con el Servidor Web Apache para proporcionar una interfaz dinámica para el Hosting Virtual con lenguaje de scripting PHP, SSL o Hosts virtuales no SSL y se puede realizar modificando las configuraciones del archivo de servicio httpd.

Primero abra la configuración del archivo principal de Apache con su editor de texto favorito.

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

En la parte inferior del archivo, agregue las dos líneas siguientes.

IncludeOptional conf/sites-enabled/*.conf
IncludeOptional conf/mods-enabled/*.conf

La función de las declaraciones Include aquí es decirle a Apache que, de ahora en adelante, debe leer más configuraciones de todos los archivos que residen en /etc/httpd/conf/sites-enabled/ (para alojamiento virtual) y /etc/httpd/conf/mods-enabled/ (para módulos de servidor habilitado) que terminan en una extensión .conf.

8. Después de que Apache haya recibido estas dos directivas, cree 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 Bash utilizará este directorio para vincular y habilitar los sitios web que se encuentran allí.

Paso 4: cree los comandos Apache a2eniste y a2diste

9. Ahora es el momento de crear los scripts Apache a2ensite y a2dissite que servirán como comandos para habilitar o deshabilitar el archivo de configuración del host virtual. Escriba el comando cd para regresar a su ruta de usuario $HOME y cree sus scripts bash a2eniste y a2dissite usando su editor favorito.

sudo nano a2ensite

Agregue el siguiente contenido a 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

Ahora cree un archivo de script bash a2dissite.

sudo nano a2dissite

Adjunte 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

10. Una vez creados los archivos, asigne permisos de ejecución y cópielos en un directorio ejecutable ` PATH para que estén disponibles en todo el sistema.

sudo chmod +x a2ensite a2dissite
sudo cp a2ensite a2dissite /usr/local/bin/

Paso 5: crear hosts virtuales en Apache

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

El uso de rutas de sitios disponibles y sitios habilitados simplifica enormemente el trabajo de habilitar o deshabilitar sitios web y también preserva todos los archivos de configuración de tus sitios web aunque estén activados o no.

En el siguiente paso, vamos a construir el primer host virtual que apunte al host local predeterminado con la ruta DocumentRoot predeterminada para servir archivos de sitios web (/srv/http.

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

Agregue las siguientes directivas de Apache aquí.

<VirtualHost *:80>
        DocumentRoot "/srv/http"
        ServerName localhost
        ServerAdmin [email 
        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>

Las declaraciones más importantes aquí son las directivas Puerto y ServerName que le indican a Apache que abra una conexión de red en el puerto 80 y redirija todas las consultas con el nombre de host local a Servir archivos ubicados en la ruta /srv/http/.

12. Después de crear el archivo localhost, actívelo y luego reinicie el demonio httpd para ver los cambios.

sudo a2ensite localhost
sudo systemctl restart httpd

13. Luego apunte su navegador a http://localhost, si lo ejecuta desde el sistema Arch o http://Arch_IP si usa un sistema remoto.

Paso 6: habilite SSL con alojamiento virtual en LAMP

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

14. De forma predeterminada, el módulo SSL no está habilitado en Apache en Arch Linux y se puede activar descomentando el módulo mod_ssl.so del httpd.conf principal. archivo de configuración y el archivo Incluir httpd-ssl.conf ubicado en la ruta httpd adicional.

Pero para simplificar las cosas, crearemos un nuevo archivo de módulo para SSL en la ruta mods-enabled y dejaremos intacto el archivo de configuración principal de Apache. Cree el siguiente archivo para el módulo SSL y agregue el siguiente contenido.

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

Adjunte 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

15. Ahora cree un archivo de host virtual que apunte al mismo nombre de host local pero esta vez usando configuraciones de servidor SSL y cambie ligeramente su nombre para recordarle que significa localhost con SSL.

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

Agregue el siguiente contenido a este archivo.

<VirtualHost *:443>
        DocumentRoot "/srv/http"
        ServerName localhost
        ServerAdmin [email 
        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>

Además de las directivas Puerto y Servidor, otras directivas importantes aquí son aquellas que apuntan al archivo Certificado SSL y al archivo Clave SSL que aún no se han creado, así que no reinicie el servidor web Apache o obtendrá algunos errores.

16. Para crear el archivo de certificado SSL y las claves necesarias, instale el paquete OpenSSL ejecutando el siguiente comando.

sudo pacman -S openssl

17. Luego cree el siguiente script Bash que crea y almacena automáticamente todos sus Certificados de Apache y Claves en /etc/httpd/conf/ssl/ ruta del sistema.

sudo nano apache_gen_ssl

Agregue el siguiente contenido del archivo, luego guárdelo y hágalo 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

sudo chmod +x apache_gen_ssl

Si desea que el script esté disponible en todo el sistema, cópielo en un ejecutable ` PATH.

sudo cp /apache_gen_ssl  /usr/local/bin/

18. Ahora genere su Certificado y sus Claves ejecutando el script. Proporcione sus opciones SSL y no olvide el nombre del certificado y el Nombre común para que coincida con su dominio oficial (FQDN).

sudo ./apache_gen_ssl

Una vez creados el certificado y las claves, no olvide modificar la configuración de las claves y el certificado de host virtual SSL para que coincida con el nombre de este certificado.

19. El último paso es activar el nuevo host virtual SSL y reiniciar su servidor para aplicar las configuraciones.

sudo a2ensite localhost-ssl
sudo systemctl restart httpd

¡Eso es todo! Para verificarlo, abra el navegador y agregue Arch IP en la URL usando el protocolo HTTPS: https://localhost o https://system_IP.

Paso 7: habilite PHP en Apache

20. De forma predeterminada, Apache solo ofrece contenido de archivos estáticos HTML en Arch Linux sin soporte para lenguajes de secuencias de comandos dinámicos. Para activar PHP, primero abra el archivo de configuración principal de Apache, luego busque y descomente la siguiente declaración LoadModule (php-apache no funciona con mod_mpm_event en Arch Linux ).

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

Usando [Ctrl]+[w] busque y comente la siguiente línea para que se vea así.

#LoadModule mpm_event_module modules/mod_mpm_event.so

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

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

Agregue exactamente el siguiente contenido (debe 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

22. Para verificar la configuración, cree en PHP un archivo llamado info.php en su DocumnetRoot (/srv/http/), luego reinicie Apache y apunte su navegador al archivo info.php: https://localhost/info.php.

<?php

phpinfo();

?>
sudo systemctl restart httpd

¡Eso es todo! Si todo se parece a la imagen de arriba, ahora tiene habilitado el lenguaje de secuencias de comandos PHP del lado del servidor dinámico en Apache y ahora puede desarrollar sitios web utilizando CMS de código abierto como WordPress, por ejemplo.

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

sudo apachectl configtest
sudo apachectl -M

Paso 8: Instalar y configurar PhpMyAdmin

23. Si no domina la línea de comandos de MySQL y desea un acceso remoto simple a la base de datos MySQL proporcionada a través de la interfaz web, entonces necesita el paquete PhpMyAdmin instalado en su caja Arch.

sudo pacman -S phpmyadmin php-mcrypt

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

sudo nano /etc/php/php.ini

Localice y descomente las extensiones anteriores.

extension=mcrypt.so
extension=mssql.so
extension=mysqli.so
extension=openssl.so
extension=iconv.so
extension=imap.so
extension=zip.so
extension=bz2.so

Además, en el mismo archivo, busque y ubique la declaración open_basedir y agregue la ruta del sistema PhpMyAdmin (/etc/webapps/ y /usr/share/webapps/) para asegurarse de que PHP pueda acceder y leer archivos en esos directorios (si también cambia la ruta DocumentRoot de los hosts virtuales de /srv/http/ a otra ubicación, deberá agregar la nueva ruta aquí también ).

25. Lo último que debe hacer para acceder a la interfaz web de PhpMyAdmin es agregar declaraciones de PhpMyAdmin Apache en los hosts virtuales. Como medida de seguridad, se asegurará de que se pueda acceder a la interfaz web de PhpMyAdmin solo desde el host local (o la dirección IP del sistema) utilizando el protocolo HTTPS y no desde otros hosts virtuales diferentes. Entonces, abra su archivo Apache localhost-ssl.conf y en la parte inferior, antes de la última declaración , agregue 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>

26. Luego reinicie el demonio Apache y apunte su navegador a la siguiente dirección y debería poder acceder a su interfaz web PhpMyAdmin: https://localhost/phpmyadmin o https://system_IP/phpmyadmin.

27. Si, después de iniciar sesión en PhpMyAdmin, ve un error inferior relacionado con un blowfish_secret, abra y edite /etc/webapps/phpmyadmin/config.inc. php e inserte una cadena aleatoria como la de la siguiente declaración, luego actualice la página.

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

Paso 9: habilite todo el sistema LAMP

28. Si desea que la pila LAMP se inicie automáticamente después de reiniciar el sistema, ejecute los siguientes comandos.

sudo systemctl enable httpd mysqld

Estos son algunos de los principales ajustes de configuración en LAMP necesarios para transformar un sistema Arch Linux en una plataforma web simple pero poderosa, rápida y robusta con software de servidor de última generación para pequeñas empresas que no son -Entornos críticos, pero si se pone terco y aún desea usarlo en un entorno de producción grande, debe armarse de mucha paciencia y prestar especial atención a las actualizaciones de paquetes y crear imágenes de respaldo periódicas del sistema para una restauración rápida del sistema en caso de fallas del sistema.