{"id":6186,"date":"2024-09-22T21:19:26","date_gmt":"2024-09-22T19:19:26","guid":{"rendered":"http:\/\/bestlinuxtutorials.com\/?p=6186"},"modified":"2026-06-03T14:56:50","modified_gmt":"2026-06-03T12:56:50","slug":"instalar-lamp-en-ubuntu-24-04","status":"publish","type":"post","link":"https:\/\/bestlinuxtutorials.com\/es\/install-lamp-on-ubuntu-24-04\/","title":{"rendered":"C\u00f3mo instalar LAMP en Ubuntu 24.04"},"content":{"rendered":"<p class=\"wp-block-paragraph\">En este tutorial aprender\u00e1s a instalar un entorno LAMP listo para producci\u00f3n en Ubuntu 24.04.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">LAMP son las siglas de Linux, Apache, MySQL y PHP.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Esta configuraci\u00f3n utiliza PHP-FPM con el MPM \u00abevent\u00bb de Apache en lugar del antiguo mod_php. Es m\u00e1s r\u00e1pido, consume mucha menos memoria bajo carga y es la configuraci\u00f3n que necesitas en un servidor real. Con mod_php, cada proceso de Apache lleva un int\u00e9rprete PHP completo (unos 60 MB cada uno), por lo que un pico de tr\u00e1fico puede generar tantos procesos que agoten tu RAM y bloqueen todo el sistema. PHP-FPM mantiene PHP en un grupo separado que puedes limitar, as\u00ed que un pico se pone en cola en lugar de bloquear el servidor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Primero instalar\u00e1s todos los paquetes necesarios y, a continuaci\u00f3n, configurar\u00e1s cada uno de ellos.<\/p>\n\n\n\n<!--more-->\n\n\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>\u00cdndice<\/h2><nav><ul><li><a href=\"#1-install-the-lamp-packages\">1. Instala los paquetes LAMP<\/a><\/li><li><a href=\"#2-configure-apache-with-php-fpm\">2. Configurar Apache con PHP-FPM<\/a><ul><li><a href=\"#2-1-configure-a-virtual-host-for-your-domain\">2.1 Configurar un host virtual para tu dominio<\/a><\/li><\/ul><\/li><li><a href=\"#3-configure-the-my-sql-database\">3. Configura la base de datos MySQL<\/a><\/li><li><a href=\"#4-configure-php\">4. Configura PHP<\/a><\/li><li><a href=\"#5-secure-the-server-for-production\">5. Configura el servidor para el entorno de producci\u00f3n<\/a><\/li><li><a href=\"#6-test-the-lamp-installation\">6. Prueba la instalaci\u00f3n de LAMP<\/a><\/li><li><a href=\"#faq\">Preguntas frecuentes<\/a><\/li><\/ul><\/nav><\/div>\n\n\n\n<h2 id=\"1-install-the-lamp-packages\" class=\"wp-block-heading\">1. Instala los paquetes LAMP<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Actualiza y mejora todo primero.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo apt update\nsudo apt upgrade -y\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Instala Apache.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo apt install apache2\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Instala el servidor MySQL.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo apt install mysql-server\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Instala PHP-FPM y las extensiones que necesita un sitio web t\u00edpico (incluido WordPress).<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo apt install php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip php-intl php-bcmath\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">En Ubuntu 24.04, esto instala PHP 8.3 y los paquetes correspondientes <code>php8.3-*<\/code> extensiones. Ten en cuenta que instalamos <code>php-fpm<\/code>, no el <code>php<\/code> paquete. Instalaci\u00f3n <code>php<\/code> Si lo instalas junto con Apache, se instalar\u00eda mod_php y Apache pasar\u00eda a utilizar el MPM prefork, que es m\u00e1s lento, y eso es justo lo que queremos evitar.<\/p>\n\n\n\n<h2 id=\"2-configure-apache-with-php-fpm\" class=\"wp-block-heading\">2. Configurar Apache con PHP-FPM<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Activa los dos m\u00f3dulos que permiten a Apache pasar las solicitudes PHP a PHP-FPM y, a continuaci\u00f3n, activa la configuraci\u00f3n de FPM que viene con el paquete.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo a2enmod proxy_fcgi setenvif\nsudo a2enconf php8.3-fpm\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Aseg\u00farate de que Apache utilice el MPM \u00abevent\u00bb. En una instalaci\u00f3n limpia sin mod_php, esta ya es la configuraci\u00f3n predeterminada, pero estos comandos lo dejan claro y garantizan que funcione correctamente en cualquier caso.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo a2dismod mpm_prefork 2&gt;\/dev\/null\nsudo a2enmod mpm_event\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Comprueba que Apache est\u00e9 en funcionamiento y verifica la versi\u00f3n.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo systemctl status apache2\napache2 -v\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Abre un navegador y entra en la direcci\u00f3n IP de tu servidor.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nhttp:\/\/your_server_ip\/\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Si ves la p\u00e1gina predeterminada de Apache, todo va bien.<\/p>\n\n\n\n<h3 id=\"2-1-configure-a-virtual-host-for-your-domain\" class=\"wp-block-heading\">2.1 Configurar un host virtual para tu dominio<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">En este ejemplo se utiliza <code>mydomain.com<\/code>. Sustit\u00fayelo por tu propio dominio cada vez que aparezca.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Crea el archivo de configuraci\u00f3n del sitio.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo vi \/etc\/apache2\/sites-available\/mydomain.com.conf\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">A\u00f1ade este contenido.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n&lt;VirtualHost *:80&gt;\n    ServerName mydomain.com\n    ServerAlias www.mydomain.com\n    ServerAdmin webmaster@mydomain.com\n    DocumentRoot \/var\/www\/mydomain.com\/public_html\n\n    &lt;Directory \/var\/www\/mydomain.com\/public_html&gt;\n        Options -Indexes +FollowSymLinks\n        AllowOverride All\n        Require all granted\n    &lt;\/Directory&gt;\n\n    ErrorLog ${APACHE_LOG_DIR}\/mydomain.com.error.log\n    CustomLog ${APACHE_LOG_DIR}\/mydomain.com.access.log combined\n&lt;\/VirtualHost&gt;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Hay dos cosas que hay que tener en cuenta aqu\u00ed. <code>Permitir anulaci\u00f3n: Todos<\/code> se encuentra dentro de este sitio web <code>&lt;Directory&gt;<\/code> bloque, as\u00ed que WordPress <code>.htaccess<\/code> Estas normas solo se aplican a este sitio. Esta es la forma correcta de hacerlo en un entorno de producci\u00f3n. No actives <code>Permitir anulaci\u00f3n: Todos<\/code> a nivel mundial en <code>apache2.conf<\/code>, porque eso hace que Apache compruebe si <code>.htaccess<\/code> archivos de todos los directorios en cada solicitud, lo cual es m\u00e1s lento y exhaustivo de lo que necesitas. <code>Opciones - \u00cdndices<\/code> Adem\u00e1s, desactiva la visualizaci\u00f3n de directorios para que los visitantes no puedan ver tus archivos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Crea el directorio ra\u00edz de los documentos y configura los permisos.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo mkdir -p \/var\/www\/mydomain.com\/public_html\nsudo chown -R www-data:www-data \/var\/www\/mydomain.com\/public_html\nsudo chmod -R 755 \/var\/www\/mydomain.com\/public_html\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Activa tu sitio, desactiva el predeterminado y reinicia Apache.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo a2ensite mydomain.com.conf\nsudo a2dissite 000-default.conf\nsudo systemctl reload apache2\n<\/pre><\/div>\n\n\n<h2 id=\"3-configure-the-my-sql-database\" class=\"wp-block-heading\">3. Configura la base de datos MySQL<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Lo primero es asegurar la instalaci\u00f3n.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo mysql_secure_installation\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Respuesta <code>Y<\/code> a estas indicaciones.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nRemove anonymous users?\nDisallow root login remotely?\nRemove test database and access to it?\nReload privilege tables now?\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Tambi\u00e9n se te preguntar\u00e1 si quieres configurar el componente de validaci\u00f3n de contrase\u00f1as. Es recomendable activarlo en el entorno de producci\u00f3n, pero recuerda que cualquier contrase\u00f1a que crees a partir de ese momento deber\u00e1 cumplir con la pol\u00edtica establecida.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora con\u00e9ctate y crea tu base de datos y tu usuario.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo mysql\n<\/pre><\/div>\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nCREATE DATABASE webdata CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\nCREATE USER &#039;webuser&#039;@&#039;localhost&#039; IDENTIFIED BY &#039;CHANGE_THIS_TO_A_STRONG_PASSWORD&#039;;\nGRANT ALL PRIVILEGES ON webdata.* TO &#039;webuser&#039;@&#039;localhost&#039;;\nFLUSH PRIVILEGES;\nEXIT;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Aqu\u00ed hay algunos detalles de producci\u00f3n que hay que tener en cuenta. El \u00e1mbito de aplicaci\u00f3n del usuario es <code>'webuser'@'localhost'<\/code>, por lo que solo puede conectarse desde el propio servidor. Si omites el host, MySQL crea <code>'webuser'@'%'<\/code>, que permite conexiones desde cualquier host. El <code>utf8mb4<\/code> El juego de caracteres es compatible con todo el Unicode (incluidos los emojis) y es el que WordPress espera por defecto. Y usa una contrase\u00f1a de verdad, no la palabra \u201ccontrase\u00f1a\u201d.<\/p>\n\n\n\n<h2 id=\"4-configure-php\" class=\"wp-block-heading\">4. Configura PHP<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Con PHP-FPM, el archivo que editas es el FPM <code>php.ini<\/code>, no el de Apache.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo vi \/etc\/php\/8.3\/fpm\/php.ini\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Cambia estos valores.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nerror_log = \/var\/log\/php\/error.log\nmemory_limit = 256M\nupload_max_filesize = 200M\npost_max_size = 208M\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Lo importante es que <code>tama\u00f1o_m\u00e1ximo_de_la_publicaci\u00f3n<\/code> debe ser mayor o igual que <code>upload_max_filesize<\/code>. <code>tama\u00f1o_m\u00e1ximo_de_la_publicaci\u00f3n<\/code> limita todo el cuerpo de la solicitud, as\u00ed que si lanzas <code>upload_max_filesize<\/code> hasta los 200 m, pero deja <code>tama\u00f1o_m\u00e1ximo_de_la_publicaci\u00f3n<\/code> Con el valor predeterminado de 8 MB, cualquier subida que supere los 8 MB seguir\u00e1 fallando. Configura ambos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Crea el directorio para el registro de errores de PHP. PHP-FPM se ejecuta como <code>www-data<\/code>, as\u00ed que tiene que asumir la responsabilidad.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo mkdir \/var\/log\/php\nsudo chown www-data:www-data \/var\/log\/php\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Ahora ajusta el tama\u00f1o del grupo de PHP-FPM. Este es el ajuste de producci\u00f3n m\u00e1s importante, porque <code>pm.max_children<\/code> es el l\u00edmite m\u00e1ximo de memoria que PHP puede llegar a utilizar.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo vi \/etc\/php\/8.3\/fpm\/pool.d\/www.conf\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Configura estos valores.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\npm = dynamic\npm.max_children = 20\npm.start_servers = 4\npm.min_spare_servers = 2\npm.max_spare_servers = 8\npm.max_requests = 500\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">C\u00f3mo elegir <code>pm.max_children<\/code>: cada proceso de PHP-FPM consume entre 40 y 60 MB aproximadamente en una aplicaci\u00f3n t\u00edpica. Toma la RAM que quieras asignar a PHP y div\u00eddela por el tama\u00f1o por proceso. Por ejemplo, en un servidor de 4 GB, deja unos 1 GB para MySQL y 0,5 GB para el sistema, lo que deja unos 2,5 GB para PHP. A 60 MB por proceso, eso son unos 40 procesos secundarios, as\u00ed que un punto de partida conservador es 20. Empieza con un valor bajo y aum\u00e9ntalo solo si ves que todos los procesos secundarios est\u00e1n ocupados sin que haya presi\u00f3n sobre la memoria. <code>pm.max_requests = 500<\/code> recicla cada proceso tras 500 solicitudes, lo que libera la memoria que los complementos han ido ocupando con el tiempo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Reinicia PHP-FPM y actualiza Apache para que se apliquen los cambios.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo systemctl restart php8.3-fpm\nsudo systemctl reload apache2\n<\/pre><\/div>\n\n\n<h2 id=\"5-secure-the-server-for-production\" class=\"wp-block-heading\">5. Configura el servidor para el entorno de producci\u00f3n<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Configura el cortafuegos. Permite primero el acceso por SSH para que no te quedes fuera, luego permite Apache y, por \u00faltimo, act\u00edvalo.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo ufw allow OpenSSH\nsudo ufw allow &quot;Apache Full&quot;\nsudo ufw enable\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Reduce la informaci\u00f3n que Apache revela sobre s\u00ed mismo. Edita el archivo de configuraci\u00f3n de seguridad.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo vi \/etc\/apache2\/conf-available\/security.conf\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Configura estas dos directivas.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nServerTokens Prod\nServerSignature Off\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">A continuaci\u00f3n, reinicia Apache.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo systemctl reload apache2\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Ofrece tu sitio web a trav\u00e9s de HTTPS. Un servidor de producci\u00f3n no deber\u00eda funcionar con HTTP sin cifrar. Instala un certificado gratuito de Let\u2019s Encrypt siguiendo <a href=\"https:\/\/bestlinuxtutorials.com\/es\/instalar-certificado-ssl-ubuntu-apache2\/\">C\u00f3mo instalar un certificado SSL en Ubuntu con Apache2<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Prot\u00e9gete contra los ataques de fuerza bruta. Los bots no paran de bombardear el SSH y las p\u00e1ginas de inicio de sesi\u00f3n. Instala fail2ban siguiendo <a href=\"https:\/\/bestlinuxtutorials.com\/es\/como-instalar-fail2ban-en-ubuntu\/\">C\u00f3mo instalar fail2ban en Ubuntu 24.04<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Aseg\u00farate de que todos los servicios se inicien autom\u00e1ticamente tras reiniciar el sistema.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo systemctl enable apache2 mysql php8.3-fpm\n<\/pre><\/div>\n\n\n<h2 id=\"6-test-the-lamp-installation\" class=\"wp-block-heading\">6. Prueba la instalaci\u00f3n de LAMP<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Crea un archivo de prueba temporal.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo vi \/var\/www\/mydomain.com\/public_html\/test.php\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">A\u00f1ade este contenido. Usa la misma contrase\u00f1a de la base de datos que configuraste antes.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: php; title: ; notranslate\" title=\"\">\n&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;en&quot;&gt;\n&lt;head&gt;\n    &lt;meta charset=&quot;UTF-8&quot;&gt;\n    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;\n    &lt;title&gt;Database Connection&lt;\/title&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n    &lt;h1&gt;Database Connection Status&lt;\/h1&gt;\n    &lt;p&gt;\n        &lt;?php\n            $servername = &quot;localhost&quot;;\n            $username = &quot;webuser&quot;;\n            $password = &quot;CHANGE_THIS_TO_A_STRONG_PASSWORD&quot;;\n            $dbname = &quot;webdata&quot;;\n\n            $conn = mysqli_connect($servername, $username, $password, $dbname);\n\n            if (!$conn) {\n                echo &quot;Not Connected: &quot; . mysqli_connect_error();\n            } else {\n                echo &quot;Connected Successfully to database: &quot; . $dbname;\n            }\n\n            mysqli_close($conn);\n        ?&gt;\n    &lt;\/p&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Establece el propietario.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo chown www-data:www-data \/var\/www\/mydomain.com\/public_html\/test.php\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Abre tu navegador y ve a <code>http:\/\/mydomain.com\/test.php<\/code>. Si todo funciona, ver\u00e1s:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Conectado correctamente a la base de datos: webdata<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora borra el archivo de prueba. Este paso no es opcional.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code\" data-no-translation=\"\"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo rm \/var\/www\/mydomain.com\/public_html\/test.php\n<\/pre><\/div>\n\n\n<p class=\"wp-block-paragraph\">Este archivo contiene tus credenciales de la base de datos en texto sin cifrar. Nunca lo dejes en un servidor de producci\u00f3n. Una vez que hayas comprobado que la conexi\u00f3n funciona, elim\u00ednalo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Tu pila LAMP ya est\u00e1 instalada, optimizada y protegida para su uso en producci\u00f3n. Puedes instalar WordPress o tu propia aplicaci\u00f3n en <code>\/var\/www\/mydomain.com\/public_html<\/code> y adelante.<\/p>\n\n\n\n<h2 id=\"faq\" class=\"wp-block-heading\">Preguntas frecuentes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u00bfDeber\u00eda usar mod_php o PHP-FPM en un servidor de producci\u00f3n?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Usa PHP-FPM con el MPM \u00abevent\u00bb de Apache. Con mod_php, cada proceso de trabajo de Apache carga un int\u00e9rprete PHP completo, por lo que cada uno necesita unos 60 MB y un pico de tr\u00e1fico puede agotar tu RAM. PHP-FPM ejecuta PHP en un grupo independiente que puedes limitar con <code>pm.max_children<\/code>, para que el servidor se mantenga estable bajo carga.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u00bfPor qu\u00e9 sigue fallando la subida de mi archivo grande aunque haya aumentado el valor de `upload_max_filesize`?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Porque <code>tama\u00f1o_m\u00e1ximo_de_la_publicaci\u00f3n<\/code> es demasiado bajo. Limita el tama\u00f1o total del cuerpo de la solicitud, por lo que debe ser mayor o igual a <code>upload_max_filesize<\/code>. Si <code>upload_max_filesize<\/code> es de 200 millones, pero <code>tama\u00f1o_m\u00e1ximo_de_la_publicaci\u00f3n<\/code> El valor predeterminado es de 8 MB; las subidas de m\u00e1s de 8 MB fallan. Aumenta ambos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u00bfC\u00f3mo elijo el valor de `pm.max_children` para PHP-FPM?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Divide la RAM que quieras asignar a PHP entre el tama\u00f1o medio de los procesos (entre 40 y 60 MB). En un servidor de 4 GB, tras dejar espacio para MySQL y el sistema, lo razonable es dejar entre 20 y 40 MB. Empieza con un valor bajo y aum\u00e9ntalo solo si todos los procesos secundarios est\u00e1n ocupados y a\u00fan te queda memoria libre.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u00bfTengo que editar el archivo apache2.conf para habilitar AllowOverride en WordPress?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">N.\u00ba de juego <code>Permitir anulaci\u00f3n: Todos<\/code> dentro del <code>&lt;Directory&gt;<\/code> en su lugar, en el bloque de tu host virtual. Eso permite <code>.htaccess<\/code> solo para tu sitio, lo cual es m\u00e1s r\u00e1pido y seguro que activarlo a nivel global en <code>apache2.conf<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>\u00bfEst\u00e1 este entorno LAMP listo para WordPress?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">S\u00ed. Las extensiones de PHP instaladas aqu\u00ed cumplen con los requisitos de WordPress, y la base de datos utiliza el <code>utf8mb4<\/code> el juego de caracteres que espera WordPress, y <code>Permitir anulaci\u00f3n: Todos<\/code> Haz que funcionen los enlaces permanentes. A\u00f1ade HTTPS y fail2ban tal y como se muestra, y ya estar\u00e1s listo para la producci\u00f3n.<\/p>","protected":false},"excerpt":{"rendered":"<p>In this tutorial you&#8217;ll learn how to install a production-ready LAMP stack on Ubuntu 24.04. LAMP stands for Linux, Apache, MySQL and PHP. This setup uses PHP-FPM with Apache&#8217;s event MPM instead of the older mod_php. It&#8217;s faster, it uses far less memory under load, and it&#8217;s the configuration you want on a real server. &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/bestlinuxtutorials.com\/es\/install-lamp-on-ubuntu-24-04\/\" class=\"more-link\">Seguir leyendo<span class=\"screen-reader-text\"> &#8220;How to Install LAMP on Ubuntu 24.04&#8221;<\/span><\/a><\/p>","protected":false},"author":1,"featured_media":6200,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[46],"tags":[12,105,115,27],"class_list":["post-6186","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ubuntu","tag-apache","tag-lamp","tag-mysql","tag-php"],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/bestlinuxtutorials.com\/wp-content\/uploads\/pexels-photo-1144176-1.jpeg?fit=1880%2C1056&ssl=1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bestlinuxtutorials.com\/es\/wp-json\/wp\/v2\/posts\/6186","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bestlinuxtutorials.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bestlinuxtutorials.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bestlinuxtutorials.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bestlinuxtutorials.com\/es\/wp-json\/wp\/v2\/comments?post=6186"}],"version-history":[{"count":54,"href":"https:\/\/bestlinuxtutorials.com\/es\/wp-json\/wp\/v2\/posts\/6186\/revisions"}],"predecessor-version":[{"id":6411,"href":"https:\/\/bestlinuxtutorials.com\/es\/wp-json\/wp\/v2\/posts\/6186\/revisions\/6411"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bestlinuxtutorials.com\/es\/wp-json\/wp\/v2\/media\/6200"}],"wp:attachment":[{"href":"https:\/\/bestlinuxtutorials.com\/es\/wp-json\/wp\/v2\/media?parent=6186"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bestlinuxtutorials.com\/es\/wp-json\/wp\/v2\/categories?post=6186"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bestlinuxtutorials.com\/es\/wp-json\/wp\/v2\/tags?post=6186"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}