Etiqueta: Tecnologia

  • 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!