{"id":167,"date":"2017-11-26T22:01:45","date_gmt":"2017-11-26T22:01:45","guid":{"rendered":"http:\/\/94r.es\/?p=167"},"modified":"2022-06-20T21:49:19","modified_gmt":"2022-06-20T19:49:19","slug":"lamp-wordpress","status":"publish","type":"post","link":"https:\/\/94r.es\/index.php\/2017\/11\/26\/lamp-wordpress\/","title":{"rendered":"LAMP + WordPress en Debian"},"content":{"rendered":"<p style=\"text-align: justify;\">Si tienes un servidor y no se te ocurre qu\u00e9 partido sacarle o necesitas alicientes para comprar uno, en esta gu\u00eda desgloso el que seguramente sea uno de los m\u00e1s t\u00edpicos: una web con hosting propio. Los pasos que a continuaci\u00f3n desgloso servir\u00edan en un equipo convencional (Debian no hace distribuciones diferentes para equipos y servidores), pero tendr\u00eda el inconveniente principal que todo equipo tiene frente a un servidor: no es pr\u00e1ctico tenerlo todo el d\u00eda encendido ni est\u00e1 pensado para ello.<\/p>\n<h3 style=\"text-align: center;\"><strong>Servidor HTTP Nginx<\/strong><\/h3>\n<p style=\"text-align: justify;\">En primer lugar, vamos a instalar el servidor web Nginx, cuya funci\u00f3n es atender las peticiones HTTP que se hagan a la p\u00e1gina, gestionar logs e incluso configurar un hosting virtual que nos permita acoger varias webs en el mismo servidor. Para ello, desde la terminal de Debian, ejecutamos:<\/p>\n<blockquote><p>apt -y install nginx<\/p><\/blockquote>\n<p style=\"text-align: justify;\">A continuaci\u00f3n se nos muestra una larga lista de los paquetes que se instalar\u00e1n, pidi\u00e9ndonos en alg\u00fan momento confirmaci\u00f3n para continuar, algo que siempre concederemos. Una vez comprobemos en la salida est\u00e1ndar que la instalaci\u00f3n ha finalizado sin errores, iniciamos el servicio (aunque ya suele activarse autom\u00e1ticamente seg\u00fan termina la instalaci\u00f3n) y lo habilitamos para que se inicie con el sistema:<\/p>\n<blockquote><p>systemctl start nginx ; systemctl enable nginx<\/p><\/blockquote>\n<p style=\"text-align: justify;\">El siguiente paso consiste en habilitar un host para nuestro WordPress. Lo m\u00e1s habitual, si queremos que nuestro sitio sea accesible desde Internet, es tener un dominio registrado, ya que en caso contrario los visitantes tendr\u00edan que saber nuestra IP p\u00fablica para acceder a nuestro sitio. Dando por supuesto que tenemos un dominio con un registro A a nuestra IP p\u00fablica, lo primero que debemos hacer ser\u00e1 crear un host virtual en el Nginx de nuestro servidor:<\/p>\n<blockquote><p>nano \/etc\/nginx\/sites-available\/nuestrositio.com<\/p><\/blockquote>\n<p style=\"text-align: justify;\">Una creado el archivo y en el modo edici\u00f3n, a\u00f1adimos la siguiente configuraci\u00f3n para habilitar nuestro host. Esta es una configuraci\u00f3n sencilla; un host de un servidor seguro a\u00f1adir\u00eda, adem\u00e1s de una entrada en el puerto :443 para la conexi\u00f3n SSL, restricciones con objeto de aumentar la seguridad.<\/p>\n<blockquote><p>server {<br \/>\nlisten 80;<br \/>\nroot \/var\/www\/nuestrositio.com<br \/>\nserver_name nuestrositio.com;<br \/>\naccess_log \/var\/log\/nginx\/wp_client_access.log;<br \/>\nerror_log \/var\/log\/nginx\/wp_client_error.log;<\/p>\n<p>location \/ {<br \/>\nindex index.php index.html;<br \/>\ntry_files $uri $uri\/ \/index.php?$args;<br \/>\n}<\/p>\n<p># Habr\u00eda que ser mongolo para usar otra codi<br \/>\ncharset utf-8;<\/p>\n<p># Aun, sabes<br \/>\ngzip off;<\/p>\n<p># Con wp-admin ni media<br \/>\nrewrite \/wp-admin$ $scheme:\/\/$host$uri\/ permanent;<\/p>\n<p># La prevensi\u00f3<br \/>\nlocation ~ \/\\. {<br \/>\naccess_log off;<br \/>\nlog_not_found off;<br \/>\ndeny all;<br \/>\n}<\/p>\n<p># geeeeeet off<\/p>\n<p>location ~* ^.+.(xml|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {<br \/>\naccess_log off;<br \/>\nlog_not_found off;<br \/>\nexpires max;<br \/>\n}<\/p>\n<p># La movidita de los sockets<br \/>\nlocation ~ \\.php$ {<br \/>\ntry_files $uri =404;<br \/>\ninclude \/etc\/nginx\/fastcgi_params;<br \/>\nfastcgi_read_timeout 3600s;<br \/>\nfastcgi_buffer_size 128k;<br \/>\nfastcgi_buffers 4 128k;<br \/>\nfastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;<br \/>\nfastcgi_pass unix:\/run\/php\/php7.0-fpm.sock;<br \/>\nfastcgi_index index.php;<br \/>\n}<\/p>\n<p># Roboces<\/p>\n<p>location = \/robots.txt {<br \/>\nallow all;<br \/>\nlog_not_found off;<br \/>\naccess_log off;<br \/>\n}<\/p>\n<p># Restricciones<br \/>\nlocation ~* \/(?:uploads|files)\/.*\\.php$ {<br \/>\ndeny all;<br \/>\n}<br \/>\n}<\/p><\/blockquote>\n<p style=\"text-align: justify;\">Una vez terminada la edici\u00f3n del archivo, salimos guardando los cambios (Ctrl+X y S\/Y). M\u00e1s adelante, debemos acordarnos del directorio que hemos definido en DocumentRoot para situar el WordPress o, en caso de que lo instalemos en otro directorio, volver a cambiar la ruta. Por \u00faltimo, para habilitar el sitio en el servidor web debemos crear un enlace simb\u00f3lico desde los sitios disponibles:<\/p>\n<blockquote><p>ln -s \/etc\/nginx\/sites-available\/nuestrositio.com \/etc\/nginx\/sites-enabled\/<\/p><\/blockquote>\n<p style=\"text-align: justify;\">Si bien el host estar\u00e1 disponible desde que recarguemos la configuraci\u00f3n (systemctl reload nginx), es posible que si hemos dado de alta el dominio al mismo tiempo todav\u00eda no est\u00e9 operativo debido a la dispersi\u00f3n de las DNS, que en casos excepcionales puede prolongarse hasta uno o dos d\u00edas. A trav\u00e9s de <a href=\"https:\/\/dnschecker.org\/#A\/\">esta<\/a> herramienta web se puede comprobar el curso de la propagaci\u00f3n de las mismas. En cualquier caso, una vez est\u00e9 habilitado el host, en nuestro sitio web deber\u00eda aparecernos la p\u00e1gina por defecto de Nginx, como confirmaci\u00f3n de que el dominio apunta a nuestro servidor.<\/p>\n<p style=\"text-align: justify;\"><img loading=\"lazy\" class=\"aligncenter  wp-image-410\" src=\"https:\/\/94r.es\/wp-content\/uploads\/2017\/11\/nginxitworks-300x183.png\" alt=\"\" width=\"425\" height=\"259\" srcset=\"https:\/\/94r.es\/wp-content\/uploads\/2017\/11\/nginxitworks-300x183.png 300w, https:\/\/94r.es\/wp-content\/uploads\/2017\/11\/nginxitworks-230x140.png 230w, https:\/\/94r.es\/wp-content\/uploads\/2017\/11\/nginxitworks-350x213.png 350w, https:\/\/94r.es\/wp-content\/uploads\/2017\/11\/nginxitworks-480x292.png 480w, https:\/\/94r.es\/wp-content\/uploads\/2017\/11\/nginxitworks.png 672w\" sizes=\"(max-width: 425px) 100vw, 425px\" \/><\/p>\n<h3 style=\"text-align: center;\"><strong>Servidor MariaDB<\/strong><\/h3>\n<p style=\"text-align: justify;\">MariaDB es un sistema gestor de bases de datos derivado de MySQL. Es el servidor de bases de datos gen\u00e9rico para MySQL en Debian 9 (sustituyendo a MySQL 5.1). Lo instalamos de la siguiente manera:<\/p>\n<blockquote><p>apt-get install mysql-server<br \/>\nsystemctl start mariadb<br \/>\nsystemctl enable mariadb<\/p><\/blockquote>\n<p style=\"text-align: justify;\">Para instalar MariaDB de forma segura (deber\u00edamos curarnos en salud accediendo a todas las pol\u00edticas preventivas que nos plantea), usaremos este comando:<\/p>\n<blockquote><p>mysql_secure_installation<\/p><\/blockquote>\n<h3 style=\"text-align: center;\"><strong>Servidor PHP y extensiones<\/strong><\/h3>\n<p style=\"text-align: justify;\">El \u00faltimo componente de LAMP s\u00f3lo requiere un paso, no es necesario habilitar ni iniciar el servicio:<\/p>\n<blockquote><p>apt-get install php php-{fpm,pear,cgi,common,zip,mbstring,net-socket,gd,xml-util,mysql,gettext,bcmath}<\/p><\/blockquote>\n<p style=\"text-align: justify;\">Como veis, la instalaci\u00f3n del servidor LAMP dejando todas las opciones por defecto es r\u00e1pida sencilla. Los problemas suelen sobrevenirse cuando se busca una configuraci\u00f3n espec\u00edfica o cuando versiones de diferentes paquetes no son compatibles entre s\u00ed. Pero este no es nuestro caso, ya que, por suerte, para instalar WordPress no es necesario realizar ning\u00fan proceso particularmente enrevesado.<\/p>\n<p><strong>Importante esto<\/strong><\/p>\n<p>Es posible que si copias el archivo \u00edntegro de Nginx y ha pasado mucho tiempo desde este post te encuentres con el siguiente error: <em>connect() to unix:\/run\/php\/php7.0-fpm.sock failed (2: No such file or directory<\/em>. Esto ocurre porque la versi\u00f3n que instala php con el anterior comando, al no especificar, es la m\u00e1s reciente del repositorio. A d\u00eda de hoy es la 7.0, pero en el futuro no sea as\u00ed, por lo que si ves que tras terminar la instalaci\u00f3n no carga el WordPress v\u00eda web y en el log de errores(\/var\/log\/nginx\/wp_client_error.log) figura el mensaje anterior deber\u00e1s actualizar el par\u00e1metro fastcgi_pass unix. La versi\u00f3n de php actual la puedes conocer mediante el comando <em>php &#8211;version<\/em> o listando el directorio \/run\/php.<\/p>\n<h3 style=\"text-align: center;\"><strong>WordPress<\/strong><\/h3>\n<p style=\"text-align: justify;\">Una vez instalado el servidor LAMP, antes de la instalaci\u00f3n propia del WordPress, no queda sino <del>batirse<\/del> crear una base de datos (y un usuario para la misma) que almacenar\u00e1 y organizar\u00e1 todo el contenido de la web.<\/p>\n<p style=\"text-align: justify;\">Entramos en Maria DB (mysql -u root -p). A continuaci\u00f3n, creamos una base de datos y un usuario (al que le concederemos todos los permisos) introduciendo los siguientes comandos:<\/p>\n<blockquote><p>create database nombrebd;<br \/>\ncreate user usuariowp@localhost identified by &#8216;contrase\u00f1a&#8217;;<br \/>\ngrant all privileges on nombrebd.* to usuariowp@localhost;<br \/>\nflush privileges;<br \/>\nexit<\/p><\/blockquote>\n<p style=\"text-align: justify;\">Hecho esto, ya tenemos base de datos MySQL y usuario para WordPress. Nos falta instalar WordPress en nuestro servidor, lo cual remediamos tras los siguientes comandos:<\/p>\n<blockquote><p>cd \/tmp<br \/>\nwget httpwordpress.orglatest.tar.gzp<\/p><\/blockquote>\n<p style=\"text-align: justify;\">Una vez descargado, lo extraemos (tar -xvf latest.tar.gz), lo renombramos como nuestro sitio (mv wordpress nuestrositio.com), movemos su contenido al directorio definido en el host de Nginx y cambiamos los permisos (chown -R www-data \/var\/www\/nuestrositio.com).<\/p>\n<p style=\"text-align: justify;\">El \u00faltimo paso consiste en configurar el propio WordPress para su uso. Esto podemos hacerlo de dos maneras v\u00eda web (la m\u00e1s sencilla e interactiva) o modificando los par\u00e1metros que indico m\u00e1s abajo en el archivo wp-config-sample.php, ubicado en la ra\u00edz de WordPress (cd var\/www\/html\/wordpress) y renombr\u00e1ndolo como wp-config.php una vez hecho (ren wp-config-sample.php wp-config.php). Al hacerlo v\u00eda web \u00fanicamente introducimos unos datos en un formulario, y ya se encarga el programa de hacer el resto. En el navegador tecleamos la URL de nuestro sitio y si la pantalla que se muestra es la siguiente significar\u00e1 que todo ha ido sobre ruedas:<\/p>\n<p><img loading=\"lazy\" class=\"wp-image-411 aligncenter\" src=\"https:\/\/94r.es\/wp-content\/uploads\/2017\/11\/wordpressini-300x185.jpeg\" alt=\"\" width=\"684\" height=\"422\" srcset=\"https:\/\/94r.es\/wp-content\/uploads\/2017\/11\/wordpressini-300x185.jpeg 300w, https:\/\/94r.es\/wp-content\/uploads\/2017\/11\/wordpressini-768x474.jpeg 768w, https:\/\/94r.es\/wp-content\/uploads\/2017\/11\/wordpressini-830x512.jpeg 830w, https:\/\/94r.es\/wp-content\/uploads\/2017\/11\/wordpressini-230x142.jpeg 230w, https:\/\/94r.es\/wp-content\/uploads\/2017\/11\/wordpressini-350x216.jpeg 350w, https:\/\/94r.es\/wp-content\/uploads\/2017\/11\/wordpressini-480x296.jpeg 480w, https:\/\/94r.es\/wp-content\/uploads\/2017\/11\/wordpressini.jpeg 865w\" sizes=\"(max-width: 684px) 100vw, 684px\" \/><\/p>\n<p style=\"text-align: justify;\">A continuaci\u00f3n, se nos muestra el formulario antes mencionado. En \u00e9l introducimos el nombre de la base de datos, el usuario y la contrase\u00f1a, lo cu\u00e1l, si hubi\u00e9semos introducido los datos que he puesto de ejemplo, quedar\u00eda de la siguiente manera:<\/p>\n<blockquote><p>Nombre de la base de datos: nombrebd<br \/>\nNombre de usuario: usuariowp<br \/>\nContrase\u00f1a: contrase\u00f1a<br \/>\nServidor de la base de datos: localhost<br \/>\nPrefijo de tabla: wp_<\/p><\/blockquote>\n<p style=\"text-align: justify;\">Una vez hecho esto accedemos a WordPress tal y como lo har\u00edamos si nos hubi\u00e9semos creado una cuenta en el sitio oficial. \u00danicamente queda configurarlo a nuestro gusto, asociarlo a un dominio (si queremos), y publicar hasta que se acaben las letras.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Si tienes un servidor y no se te ocurre qu\u00e9 partido sacarle [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[9],"tags":[],"_links":{"self":[{"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/posts\/167"}],"collection":[{"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/comments?post=167"}],"version-history":[{"count":20,"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/posts\/167\/revisions"}],"predecessor-version":[{"id":449,"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/posts\/167\/revisions\/449"}],"wp:attachment":[{"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/media?parent=167"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/categories?post=167"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/94r.es\/index.php\/wp-json\/wp\/v2\/tags?post=167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}