«

»

Jun 19

Servidor WordPress con la Raspberry PI

Raspberry pi 3

Con las conexiones a Internet actuales basadas en fibra y con velocidades hasta 300Mb/s simétricos es más que viable alojar en casa o en la oficina un servidor web por un precio de mantenimiento mínimo. El problema suele ser el espacio perdido, el ruido y el coste de electricidad de mantener un servidor 24 horas al día.

Utilizando este blog como conejillo de indias, en los últimos días he realizado diferentes pruebas de funcionamiento y comparado velocidades y tiempos de respuesta con un Cloud VPS, un PC de sobremesa, una máquina virtual dentro de un PC de sobremesa y por último una raspberry pi. La sorpresa es que si no hay cargas muy altas de trabajo la Raspberry se desenvuelve casi tan bien como el Cloud VPs, con la diferencia de que los costes anuales en una caso son de 220€ y en el otro de unos 10€. También se ve rápidamente que es mejor un servidor bien optimizado en una raspberry que uno sin optimizar en un ordenador de sobremesa.

Con esto en la cabeza he decidido trasladar el servidor del blog de inventos a una raspberry. Voy a contar los pasos necesarios para llegar aquí.

Para empezar necesitamos:

  • Raspberry pi 3B como la de la foto, las versiones anteriores podrían estar un poco cortas de potencia para esta tarea, pero en principio podriamos utilizar algún otro micropc similar.
  • Tarjeta SD de 8 o16GB para almacenar el sistema operativo.
  • Alimentador
  • Disipadores para mantener la temperatura lo más baja posible
  • Caja
  • Latiguillo Ethernet
  • NAS
  • Conexión a internet con ip fija y un dominio propio, o una cuenta de ddns como dynu o noip si la ip es dinámica (también podría ser con dominio propio)
  • Saber manejarnos mínimamente con la línea de comando de linux. Hay cientos de manuales por internet.

Proceso de instalación:

  • Utilizaremos una distribución Raspbian lite como punto de partida:
  • Metemos la SD en la raspberry, la conectamos a la red con el latiguillo ethernet y la alimentamos. Si queremos podemos hacer toda la instalación con un teclado y un monitor o un televisor con HDMI, pero la opción que yo he seguido es utilizar  un terminal ssh desde otro ordenador.
  • La distribución Raspbian arranca con un servidor ssh ya configurado, y configura automaticamente la dirección IP si tenemos DHCP en la red. Para saber en que dirección IP ha terminado la raspberry sin tener que conectar un monitor, tendremos que entrar en la configuración de nuestro router y buscar un listado de equipos con sus ips asignadas en DHCP. Ya puestos configuramos el router para que asigne siempre la misma IP a esta dirección MAC (http://rootear.com/mantenimiento/asignar-ip-fija) y asignamos en la configuración NAT del router en “mapeo de puertos” los puertos 80,443 y 22 a esta dirección IP. Lo mejor es consultar la documentación de cada router concreto para hacer todo esto.
  • Si no lo tenemos ya, instalamos en el ordenador desde el que vamos a trabajar un cliente de ssh, por ejemplo putty (http://www.putty.org/) y nos conectamos a la dirección donde está la raspberry. El usuario y contraseña de partida son pi/raspberry
  • Lo primero que vamos a hacer es cambiar el usuario y contraseña que viene por defecto. Podemos seguir esta guia: http://www.redeszone.net/raspberry-pi/como-cambiar-el-nombre-de-usuario-pi-que-viene-por-defecto-en-raspbian/ Pero además hay que permitir el acceso root por ssh durante la modificación, para ello editamos el fichero /etc/ssh/sshd_config y modificar la entrada “PermitRootLogin”  para que ponga “PermitRootLogin yes”, luego lo dejamos en no por seguridad.
  • Ejecutamos como root raspi-config (sudo raspi-config), expandimos el sistema de ficheros para que ocupe toda la tarjeta de memoria y podemos configurar el teclado, la zona horaria, etc…
  • Ahora podemos apagar (sudo shutdown now) y ponerlo todo en su ubicación definitiva. En mi caso una caja de registro sin usar de un provedor de internet de infausto recuerdo.oh_no_1
  • Como decía es importantisimo que la configuración del servidor esté lo más optimizada posible, así que vamos a usar un servidor web ligero que se llama nginx y la última versión de php que es notablemente más rápida. Instalamos nginx 1.9 y php 7.0, con esta guía: https://getgrav.org/blog/raspberrypi-nginx-php7-dev
  • Ahora tenemos servidor web, pero en mi caso no era suficiente, para alojar este blog hace falta mysql y wordpress
  • Instalamos mysql server: sudo apt-get install mysql-server php7.0-mysql Nos pedirá una contraseña de administrador para la mysql
  • Creamos la base de datos de wordpress en mysql, para ello ejecutamos:
    • mysql -u root -p
    • ponemos la contraseña de root que escogimos durante la instalación
    • Escribimos:
      CREATE USER wpuser@localhost IDENTIFIED BY 'password'; (elegimos el password que queramos para el usuario wpuser)
      GRANT ALL PRIVILEGES ON wordpress.* TO wpuser@localhost IDENTIFIED BY 'password';
      FLUSH PRIVILEGES;
      quit;
  • Ahora descargamos el último wordpress y lo descomprimimos en la raíz del servidor web (/var/www/html). Puedes echar un vistazo a este tutorial en los puntos 4 y 6: https://www.raspberrypi.org/learning/lamp-web-server-with-wordpress/worksheet/
  • Para que todo vaya bien faltan aun de configurar alguna cosa de nginx:
    • Crear el fichero con el nombre que queráis en el directorio /etc/nginx/sites-available (sudo nano /etc/nginx/sites-available/wordpress) y meter dentro lo siguiente:
      server {
          listen 80;
          index index.php;
      
          ## Begin - Server Info
          root /var/www/html;
      
          server_name blog.deinventos.com;
          ## End - Server Info
      
          ## Begin - Index
          # for subfolders, simply adjust:
          # `location /subfolder {`
          # and the rewrite to use `/subfolder/index.php`
          location / {
              try_files $uri $uri/ /index.html /index.php;
          }
      
          ## End - Index
      
          ## Begin - PHP
          location ~ \.php$ {
              # Choose either a socket or TCP/IP address
              fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
              # fastcgi_pass 127.0.0.1:9000;
      
              fastcgi_split_path_info ^(.+\.php)(/.+)$;
              fastcgi_index index.php;
              include fastcgi_params;
              fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name;
          }
          ## End - PHP
      
              # set client body size to 16M #
              client_max_body_size 16M;
      
          ## Begin - Security
          # deny all direct access for these folders
          location ~* /(.git|cache|bin|logs|backups|tests)/.*$ { return 403; }
          # deny running scripts inside core system folders
          location ~* /(system|vendor)/.*\.(txt|xml|md|html|yaml|php|pl|py|cgi|twig|sh|bat)$ {
      return 403; }
          # deny running scripts inside user folder
          location ~* /user/.*\.(txt|md|yaml|php|pl|py|cgi|twig|sh|bat)$ { return
      403; }
          # deny access to specific files in the root folder
          location ~ /(LICENSE.txt|composer.lock|composer.json|nginx.conf|web.config|htaccess.txt|\.htaccess)
      { return 403; }
          ## End - Security
      }
      
      
  • Revisamos los permisos en /var/www/html – el propietario debe ser www-data (sudo chown -R www-data:www-data /var/www/html/*)
  • reiniciar servicio web (sudo service nginx restart)
  • Ya podemos configurar wordpress y empezar nuestro blog o restaurar una salvaguarda si es el caso.

Deja un comentario

Tu dirección de correo electrónico no será publicada.

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies