Como hacer una pagina de wordpress en un Raspberry pi 5 utilizando Docker y WordPress.

Requisitos:

  • Raspberry pi 5 8GB (rpi 4 puede funcionar, no esperes muchos plugins… menos ram tambien, pero 8 te sirve para tener un cache enorme)
  • Tarjeta SD (lo mejor seria un SSD…)
  • Fuente estable de 5V y 4A-5A
  • Un provedor de internet / router que te permita abrir puertos (especificamente 80 y 443)
  • Una coneccion SSH o terminal en el Raspberry pi
  • Un DNS Configurado correctamente(en mi caso sera cloudflare.)
  • Instalado docker(si aun no lo tienes, aqui te dejo el link para los tutoriales: https://docs.docker.com/engine/install/debian/)

Que esperamos lograr?

Esperamos que nuestro raspberry pi tenga una instalacion de:

  • Redis
  • Nginx reverse proxy manager
  • Data Base de MariaDB
  • WordPress

La estructura de nuestro proyecto.

Como el titulo dice la estructura del proyecto va a ser la siguiente.

proyecto/
├── Compose/
│   ├── .env
│   └── docker-compose.yml
│
└── Container/
    ├── db_data/
    ├── npm_data/
    ├── npm_letsencrypt/
    ├── redis_data/
    └── wp_data/

Cabe remarcar que deberan crear todas las carpetas para que se cree correctamente el proyecto. aqui les voy dejando un script que hace eso

mkdir -p proyecto/Compose
mkdir -p proyecto/Container/db_data
mkdir -p proyecto/Container/npm_data
mkdir -p proyecto/Container/npm_letsencrypt
mkdir -p proyecto/Container/redis_data
mkdir -p proyecto/Container/wp_data
touch proyecto/Compose/.env
touch proyecto/Compose/docker-compose.yml

El archivo .env

Este archivo tiene 2 objetivos.

  • Seguridad
  • Comodidad

Basicamente junta todas las variables directamente en un solo archivo. seguramente sea el unico archivo que deberan modificar.
el contenido del mismo deberia ser asi:

MYSQL_ROOT_PSW= REPLAZAR
MYSQL_DB= REPLAZAR
MYSQL_USERNAME= REPLAZAR
MYSQL_USR_PSW= REPLAZAR

VOLUMES_BASE_PATH=REPLAZAR

DB_DATA_PATH=${VOLUMES_BASE_PATH}/proyecto/Container/db_data
WP_DATA_PATH=${VOLUMES_BASE_PATH}/proyecto/Container/wp_data
REDIS_DATA_PATH=${VOLUMES_BASE_PATH}/proyecto/Container/redis_data
NPM_DATA_PATH=${VOLUMES_BASE_PATH}/proyecto/Container/npm_data
NPM_LETSENCRYPT_PATH=${VOLUMES_BASE_PATH}/proyecto/Container/npm_letsencrypt

Como indica el .env que brinde, deberan replazar donde diga “REMPLAZAR” (MYSQL_ROOT_PSW) con su contraseña de root de la DB, luego (MYSQL_DB) sera el nombre de la DB que va a usar WP (se deberia configurar solo.), luego (MYSQL_USERNAME) y (MYSQL_USR_PSW) sera el nombre de usuario y la contraseña que usara wordpress para acceder a su DB.
(VOLUMES_BASE_PATH) debera recivir el path en el que este la carpeta proyecto sin incluir a la carpeta proyecto, ej:

si la carpeta proyecto esta en /home/josesito/docker/proyecto, ustedes deberan escribir “/home/josesito/docker”<== importante no agregar una ultima “/”

Una vez termines de modificar el .env, ve a la carpeta donde esta guardado y en una termina escribe:

chmod 600 .env

Esto hara que tu .env este un poco mas seguro.

El docker-compose.yml

El archivo docker-compose.yml es el que le dice a Docker como se debe realizar el servidor, es el archivo mas importante y largo de todos.

version: '3.8'

services:
  db:
    image: mariadb:latest
    command: '--default-authentication-plugin=mysql_native_password'
    volumes:
      - db_data:/var/lib/mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PSW}
      - MYSQL_DATABASE=${MYSQL_DB}
      - MYSQL_USER=${MYSQL_USERNAME}
      - MYSQL_PASSWORD=${MYSQL_USR_PSW}
    networks:
      - internal

  wordpress:
    image: wordpress:latest
    volumes:
      - wp_data:/var/www/html
    restart: always
    environment:
      - WORDPRESS_DB_HOST=db:3306
      - WORDPRESS_DB_USER=${MYSQL_USERNAME}
      - WORDPRESS_DB_PASSWORD=${MYSQL_USR_PSW}
      - WORDPRESS_DB_NAME=${MYSQL_DB}
    networks:
      - internal
    expose:
      - "80"  # Allow internal access to port 80

  redis:
    image: redis:latest
    restart: always
    volumes:
      - redis_data:/data
    networks:
      - internal

  nginx-proxy-manager:
    image: jc21/nginx-proxy-manager:latest
    restart: always
    ports:
      - "80:80"
      - "443:443"
      - "81:81"
    volumes:
      - npm_data:/data
      - npm_letsencrypt:/etc/letsencrypt
    networks:
      - internal

volumes:
  db_data:
    driver: local
    driver_opts:
      type: none
      device: ${DB_DATA_PATH}
      o: bind

  wp_data:
    driver: local
    driver_opts:
      type: none
      device: ${WP_DATA_PATH}
      o: bind

  redis_data:
    driver: local
    driver_opts:
      type: none
      device: ${REDIS_DATA_PATH}
      o: bind

  npm_data:
    driver: local
    driver_opts:
      type: none
      device: ${NPM_DATA_PATH}
      o: bind

  npm_letsencrypt:
    driver: local
    driver_opts:
      type: none
      device: ${NPM_LETSENCRYPT_PATH}
      o: bind

networks:
  internal:
    driver: bridge

Ahora solo queda ejecutarlo abriendo una terminal en /proyecto/Compose y escribiendo:

sudo docker compose up -d

Configuracion Basica de wordpress

Ahora tendrias que tipear la direccion de tu Raspberry Pi en el navegador e seguir la configuracion basica de wordpress.

NGINX & Puertos

Antes de continuar debera abrir el puerto 443 y temporalmente el puerto 80 (para conseguir el certificado let’s encrypt)

Ahora una vez la configuracion basica de WordPress esta completa lo que deberas hacer es ir a http://<Ip de tu Pi>:81 para configurar NGINX Proxy Manager. Debera proseguir como indica la imagen.

Luego debera presionar donde dice “Add Proxy Host”, una ventana se abrirar y rellene correspondiente a estas imagenes:

El resto de menus quedan iguales, luego de presionar en save y esperar a que consiga el certificado de let’s encrypt deberia poder acceder a su sitio web desde el internet usando su DNS.

Configuracion “avanzada” de wordpress.

Solo queda agregar dos cosas.

Ahora solo debe ir a:

Pagina principal del sitio>menu desplegable “escritorio”>plugins>add plugin buscar Redis Object Cache by Till Krüss> instalar> esperar un momento> activar.

Ahora debe editar WP config.

Debe ir a “wp_data” y ahi se encuentra wp-config.php, edite este archivo y agregue esto:

define('WP_REDIS_HOST', 'redis');

luego debe reiniciar

sudo docker compose stop -d
sudo docker compose up -d

y eso deberia ser todo, ahora tiene un servidor de wordpress con redis instalado!

Comments

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *