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.
- Redis Object Cache.
- edita WP-config para que pueda usar su servidor de redis.
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!
Deja un comentario