En este artículo explico cómo configuré este blog al que estás accediendo en una pequeño ordenador Raspberry Pi, funcionando desde mi casa. No es un proceso extraordinariamente complejo, pero sí intervienen muchos pasos y pueden surgir problemas, por lo que es recomendable que ya tengas una cierta familiaridad con Linux y WordPress en general, sin que tampoco tengas que ser un experto (yo no lo soy).
1- Instalar Ubuntu
Probablemente WordPress podría instalarse en Raspbian, el OS por defecto de Raspberry, pero yo opté por utilizar Ubuntu para tener una experiencia más parecida a un servidor estándar. Para la instalación de Ubuntu en Raspberry, recomiendo seguir este tutorial en la web oficial de Ubuntu. En mi caso, me salté el paso de instalar el entorno gráfico, ya que no lo voy a utilizar.
2- Averiguar la IP de nuestra Raspberry
Es posible que en el paso anterior ya hayamos indicado una IP estática. Pero si tienes dudas, para identificar la IP de nuestra Raspberry, podemos utilizar el comando ip addr show
desde la Raspberry. En mi caso, la tengo conectada por cable de red (ethernet), por lo que la encontraremos en la parte de la interfaz eth0, justo al lado de inet. No sería raro que te atascaras en este paso. Encontrar la IP de una Raspberry es a veces todo un arte.
3- Acceder a la Raspberry por SSH desde nuestro ordenador
Sabiendo ya la IP, con un Mac u ordenador Linux podemos ahora acceder a nuestra Raspberry directamente a través del Terminal de nuestro ordenador. Tecleamos ssh ubuntu@laipdeturaspberry
. Nos pedirá crear una contraseña para el usuario ubuntu. Decimos que yes.
4- Crear un nuevo usuario en la Raspberry-Ubuntu
Todos los comandos que utilicemos en los siguientes pasos serán en Ubuntu, dentro de la sesión ssh. A menos que se indique lo contrario.
Por seguridad, vamos a eliminar el usuario por defecto ubuntu (con sus carpetas) y crearemos uno nuevo. Sustituir en los comandos siguientes nombreusuario por el nuevo nombre de usuario elegido. Introducirlos uno a uno.
sudo adduser nombreusuario
sudo usermod -aG sudo nombreusuario
exit
ssh nombreusuario@laipdeturaspberry
sudo pkill -u ubuntu
sudo deluser ubuntu
sudo rm -r /home/ubuntu
El paso anterior es muy importante, ya que, a partir de ahora, la manera por defecto de acceder desde tu ordenador a la Raspberry (y a tu servidor) por ssh será:
ssh nombreusuario@laipdeturaspberry
Para reforzar la seguridad, debemos asegurarnos de que SSH siempre pida contraseña. Para ello, introducimos:
sudo visudo
Buscamos la línea Defaults env_reset y sustituirla por:
Defaults env_reset,timestamp_timeout=0
Luego salimos haciendo CTRL+X y CTRL+Y.
5- Cambiarle el hostname a la Raspberry/Ubuntu
Esta paso es completamente opcional. Pero es habitual cambiar el hostname (o nombre de ordenador) de la Raspberry/Ubuntu, para acceder a ella sin necesidad de teclear su IP cada vez que hagamos SSH. Además, si tenemos más de una Raspberry y ambas tienen el mismo hostname (perfectamente posible), podría haber confictos en la red. Para cambiar el hostname, haremos lo siguiente.
Para ver el hostname actual:
hostnamectl
Para cambiar el hostname (sustituye nuevonombrehost por el de tu elección):
hostnamectl set-hostname 'nuevonombrehost'
Sustituye en este archivo el antiguo hostname por el nuevo (con esta línea aseguramos que se conserve al reiniciar). Es posible que ya esté cambiado:
sudo nano /etc/hostname
Edita también el archivo hosts (si esto te resulta extraño, es porque aparentemente Linux utiliza el nombre del host en la ejecución de procesos internos, por lo que debemos asociarlo a la IP interna).
sudo nano /etc/hosts
Sustituye 127.0.0.1 localhost
por:
127.0.0.1 nuevonombrehost
Comprobamos si se actualizado correctamente haciendo otra vez:
hostnamectl
Si no funcionara, haz sudo /etc/init.d/hostname.sh
y luego reinicia la Raspberry con sudo reboot
.
Por último, para que otros equipos de la red conozcan la IP de nuestra Raspberry solo indicando su hostname, deberemos instalar un mDNS. Para ello, hacemos:
sudo apt-get install avahi-daemon
Y ahora, desde Linux o Mac, ya podremos conectarnos a nuestra Raspberry haciendo:
ssh nombreusuario@nuevonombrehost.local
Si te has perdido un poco en esta parte, recomiendo este artículo de How-To-Geek.
6- Instalar Apache, PHP y MySQL en la Raspberry/Ubuntu
El servidor Apache y la base de datos MySQL son los aliados habituales para hacer funcionar WordPress. Buena parte de la información de este paso la he obtenido en este tutorial de la web oficial de Raspberry.
Instalar Apache:
sudo apt-get install apache2 -y
(Si ahora vas desde un navegador a laipdeturaspberry, se debe mostrar archivo de /var/www/html/index.html. ¡Bien! El servidor Apache está funcionando)
Instalar PHP
sudo apt-get install php -y
Instalar MySQL
sudo apt-get install mysql-server php-mysql -y
sudo service apache2 restart
7- Complementos de Apache para que WordPress funcione correctamente
El servidor Apache ya estará instalado de manera básica. Pero necesitaremos algunos complementos para que luego WordPress funcione adecuadamente. En este paso es cuando te das cuenta que lo estás haciendo todo desde cero, en comparación a un hosting de pago.
Eliminar la página HTML por defecto de Apache
cd /var/www/html/
sudo rm *
Instalar mod_rewrite
sudo a2enmod rewrite
systemctl restart apache2
Capacidad de utilizar archivos htaccess
Los archivos htacess permiten hacer cambios de configuración a nivel de directorio.
sudo nano /etc/apache2/sites-available/000-default.conf
Aseguramos que aparezca la parte en negrita después de la primera línea, especialmente el AllowOverride All:
<VirtualHost *:80> <Directory "/var/www/html"> AllowOverride All </Directory> ...
Salimos del archivo y lo guardamos (CTRL+X y Y). Ahora reiniciamos el servidor.
sudo service apache2 restart
Permitir que Apache deje importar archivos de más de 2 mb
Hay que editar el archivo php.ini. Para encontrar ubicación de php.ini:
sudo find / -name php.ini
Devolverá algo como:
/etc/php/7.4/cli/php.ini
/etc/php/7.4/apache2/php.ini
Editar el segundo, que es el del plugin php de Apache:
sudo nano /etc/php/7.4/apache2/php.ini
Encontrar y reemplazar las siguientes líneas:
- upload_max_filesize = 2M ---> upload_max_filesize = 25M
- post_max_size = 13M ---> post_max_size = 25M
Salimos/guardamos (CTRL+X, Y) y reiniciamos el servidor: sudo systemctl restart apache2
Instalar módulo gd_module (requerido por WordPress)
sudo apt install php-gd
sudo systemctl restart apache2
Módulo php-xml (para xmlrpc.php)
Es para que el archivo xmlrpc.php funcione bien (por ejemplo, si queremos usar Jetpack).
sudo apt-get install php-xml
systemctl restart apache2
Más módulos que he instalado
sudo apt-get install php-curl
sudo apt-get install php-mbstring
sudo apt-get install php-imagick
sudo apt-get install php-zip
systemctl restart apache2
Y para permitir que WordPress pueda enviar mails (de forma básica)
sudo apt-get install sendmail
Si fuera necesario instalar más módulos o complementos, lo podremos averiguar una vez instalado nuestro WordPress desde: http://dominiodetublog/wp-admin/site-health.php
8- Descargar e instalar WordPress en Raspberry/Ubuntu (¡por fin!)
Si todavía estás leyendo, enhorabuena. ¡Ahora ya toca descargar WordPress e instalarlo!
Descargar el archivo de WordPress en la Raspberrycd /var/www/html/
sudo wget http://wordpress.org/latest.tar.gz
sudo tar xzf latest.tar.gz
sudo mv wordpress/* .
sudo chown -R www-data: .
A tener en cuenta que, en lugar de /var/www/html, podríamos instalar WordPress en /var/www/nombredetublog (por ejemplo, si planeas tener varias webs funcionando). Yo cambié la carpeta a posteriori de la siguiente manera (puedes ignorar estos pasos a continuación si vas a utilizar la carpeta por defecto de Apache):
Movemos WordPress a la nueva carpeta (cambia tuweb.com por tu dominio).
sudo mv /var/www/html/ /var/www/tuweb.com/
sudo chown -R www-data: /var/www/tuweb.com/
Creamos un archivo de configuración de Apache específico para tu dominio.
sudo nano /etc/apache2/sites-available/tuweb.com.conf
En este archivo, pegamos el siguiente código (sustituye con tus datos y no pasa nada si aun no tienes el dominio comprado, es simplemente para darle un nombre).
<VirtualHost *:80> <Directory "/var/www/tuweb.com"> AllowOverride All </Directory> ServerAdmin tucorreo@loquesea.com ServerName tuweb.com ServerAlias www.tuweb.com DocumentRoot /var/www/tuweb.com ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost>
Habilitamos el nuevo archivo de configuración, deshabilitamos el default y reiniciamos el servidor.
sudo a2ensite tuweb.com.conf
sudo a2dissite 000-default.conf
sudo systemctl restart apache2
Comprobamos que Apache esté funcionando correctamente (todo debe estar OK).
sudo apache2ctl configtest
Preparar la base de datos MySQL que utilizará WordPress
sudo mysql_secure_installation
(piensa e introduce aquí tucontraseñasql nueva de MySQL. Anótala, porque la utilizarás más adelante)sudo mysql -uroot -p
create database wordpress;
USE mysql;
drop user root@localhost;
flush privileges;
CREATE USER 'root'@'localhost' IDENTIFIED BY 'tucontraseñasql';
GRANT ALL ON wordpress.* TO 'root'@'localhost';
FLUSH PRIVILEGES;
¡Accedemos a WordPress y su proceso de instalación!
Accedemos a WordPress con el navegador del ordenador, usando la IP de la Raspberry. Es decir, abre tu navegador y pon en la barra de direcciones: http://laipdeturaspberry
Aquí debería abrirse la ventana clásica de WordPress para iniciar el proceso de instalación. En base a las indicaciones previas, utilizaríamos los siguientes datos para conectarse a la base de datos.
Database Name: wordpress
User Name: root
Password: tucontraseñasql
Database Host: localhost
Table Prefix: wp_
Y escoge un usuario y contraseña para tu WordPress. Si todo sale bien, ¡ya tienes tu blog funcionando!
Hasta aquí la primera parte del proceso de instalación de WordPress en una Raspberry. Tu blog ya estará funcionando en la Raspberry y puedes empezar a crear contenido. Pero hay un problema: solo tú puedes acceder a él, ya que solo es visible desde la red interna de casa a través de la IP local de tu Raspberry. Además, WordPress en este momento construye las URLs (de imágenes, css, etc) utilizando la IP interna, que es algo que tendremos que corregir, porque desde el exterior no tendrá sentido (accediendo al blog desde fuera de casa, las imágenes se mostrarán todas rotas, ya que el dominio será una IP interna innaccesible desde el exterior).
En el siguiente artículo te explico cómo hacer que tu blog sea accesible desde fuera de casa, ¡desde cualquier parte del mundo! Con un dominio y una conexión normal a internet normal (aunque la IP pública que te asigne tu operador sea dinámica).
Por otra parte, también recomiendo como lectura complementaria esta guía paso a paso de Paul Gibss, aunque él utiliza Raspbian.