GNU/Linux >> Tutoriales Linux >  >> Linux

Instalar WordPress con Docker Compose, Nginx, Apache con SSL

Instale WordPress con Docker, Nginx, Apache con SSL. En esta guía, aprenderá cómo realizar una configuración de mejor rendimiento con Docker, Docker Compose, Nginx, Apache, PHP 8.1, MariaDB y Let's Encrypt para ejecutar WordPress en Ubuntu 22.04.

También crearemos volúmenes para que los cambios o actualizaciones se conserven mientras se reinicia el contenedor.

Esta configuración se prueba en la nube de Google con una instancia que ejecuta el sistema operativo Ubuntu 22.04. También puede realizar esta configuración en cualquier servicio en la nube como AWS o Azure o DigitalOcean o cualquier servidor dedicado o VPS.

Requisitos

  1. Instalar Docker en Ubuntu 22.04
  2. Instalar Docker Compose en Ubuntu 22.04.

Asegúrese de haber completado todos los pasos mencionados anteriormente

  • El dominio apuntó a la dirección IP de su servidor.
  • Docker instalado y configurado.
  • Docker Compose instalado y configurado.

Una vez que haya realizado todos los requisitos previos, puede proceder a realizar la instalación y configurar WordPress.

Paso 1:Crear un directorio de proyectos

SSH a su servidor y comience creando un nuevo directorio de proyecto llamado wp-project . También puedes ponerle el nombre que necesites.

mkdir wp-project

Paso 2:Crear un archivo YML de Docker Compose

Ahora navegue dentro del directorio del proyecto y cree un nuevo archivo docker-compose.yml con la siguiente configuración.

cd wp-project

Crear un nuevo docker-compose.yml archivo.

nano docker-compose.yml

Copie todo el contenido a continuación y péguelo en el archivo.

Asegúrese de reemplazar las variables de entorno mencionadas a continuación.

version: "3.9"
services:
    wordpress:
        container_name: wordpress
        image: wordpress:php8.1-apache
        restart: always
        stdin_open: true
        tty: true
        environment:
            WORDPRESS_DB_HOST: mariadb
            WORDPRESS_DB_USER: db_user
            WORDPRESS_DB_PASSWORD: db_user_pass
            WORDPRESS_DB_NAME: db_name
        volumes:
            - wordpress_data:/var/www/html
            - ./wordpress:/var/www/html
    mariadb:
        container_name: mariadb
        image: mariadb
        restart: always
        environment:
            MYSQL_DATABASE: db_name
            MYSQL_USER: db_user
            MYSQL_PASSWORD: db_user_pass
            MYSQL_RANDOM_ROOT_PASSWORD: 'root_pass'
        volumes:
            - db_data:/var/lib/mysql
    nginx:
        container_name: nginx
        image: nginx:latest
        restart: unless-stopped
        ports:
            - 80:80
            - 443:443
        volumes:
            - ./nginx/conf:/etc/nginx/conf.d
            - ./certbot/conf:/etc/nginx/ssl
            - ./certbot/data:/var/www/html
    certbot:
        container_name: certbot
        image: certbot/certbot:latest
        command: certonly --webroot --webroot-path=/var/www/html --email [email protected] --agree-tos --no-eff-email -d domain.com -d www.domain.com
        volumes:
            - ./certbot/conf:/etc/letsencrypt
            - ./certbot/logs:/var/log/letsencrypt
            - ./certbot/data:/var/www/html
volumes:
    db_data:
    wordpress_data:

Presiona CTRL-X seguido de Y y ENTER para guardar y salir del archivo.

Aquí están los detalles de configuración.

  • versión :Compone la versión del archivo que es compatible con Docker Engine. Puede comprobar la compatibilidad aquí.
  • servicios :aquí tenemos 4 servicios llamados wordpress , mariadb , nginx y certbot .
  • imagen :Utilizamos las últimas imágenes de WordPress con PHP 8.1, Apache, Mariadb, Nginx y Certbot disponibles en Docker hub.
  • volúmenes :
    • wordpress :hemos configurado este directorio para que se sincronice con el directorio que deseamos usar como raíz web dentro del contenedor.
    • conf :aquí colocaremos el archivo de configuración de Nginx para que se sincronice con la carpeta Nginx conf.d predeterminada dentro del contenedor.
    • cedtbot/conf :aquí es donde recibiremos el certificado SSL y este se sincronizará con la carpeta que deseamos dentro del contenedor.
    • ports :configurar el contenedor para escuchar en los puertos enumerados.
    • command :el comando utilizado para recibir el certificado SSL.
  • medio ambiente :aquí enumeramos todas las variables de entorno que están disponibles para la imagen de WordPress.
    • WORDPRESS_DB_HOST :Aquí estamos usando el nombre del servicio del contenedor MariaDB.
    • WORDPRESS_DB_USER :Igual que el que tenemos configurado en el servicio mariadb.
    • WORDPRESS_DB_PASSWORD :Igual que el que tenemos configurado en el servicio mariadb.
    • WORDPRESS_DB_NAME :Igual que el que tenemos configurado en el servicio mariadb.

Paso 3:Configurar Nginx

Según el docker-compose.yml configuración que necesitamos para crear el default.conf archivo dentro del nginx/conf directorio.

Crea el directorio además de tu docker-compose.yml para guardar el archivo de configuración.

mkdir -p nginx/conf

Crea un archivo llamado default.conf .

nano nginx/conf/default.conf

Coloque las siguientes configuraciones, aquí usamos la configuración de proxy inverso para el contenedor de wordpress que ejecuta Apache.

 server {
    listen [::]:80;
    listen 80;

    server_name domain.com www.domain.com;

    root /var/www/html;
    index index.php;

    location ~ /.well-known/acme-challenge {
        allow all; 
        root /var/www/html;
    }

    location / {
        try_files $uri @apache;
    }

    location ~ ^/.user.ini {
        deny all;
    }

    location ~*  .(svg|svgz)$ {
        types {}
        default_type image/svg+xml;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location @apache {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://wordpress:80;
    }

    location ~[^?]*/$ {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://wordpress:80;
    }

    location ~ .php$ {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://wordpress:80;
    }

    location ~/. {
        deny all;
        access_log off;
        log_not_found off;
    }
} 

Presiona CTRL-X seguido de Y y ENTER para guardar y salir del archivo.

Ahora tiene la configuración de composición de su ventana acoplable y su configuración de Nginx.

Paso 4:implementar WordPress con Docker Compose

Inicie los contenedores con el siguiente comando, recibirá los certificados SSL una vez que se inicien los contenedores.

docker-compose up -d

Una vez que se inicien todos los contenedores, verá dos directorios adicionales certbot y wordpress creado junto con su docker-compose.yml archivo.

El directorio wordpress contiene todo el código fuente de su sitio web de WordPress.

El directorio certbot contiene todos los archivos relacionados con sus certificados SSL.

Para ver los contenedores puede ejecutar el siguiente comando.

docker-compose ps

Paso 5:Configure Let's Encrypt SSL con Nginx

Como ha recibido el certificado SSL de Let's Encrypt, puede configurar HTTPS y configurar la redirección a HTTPS.

Edite el default.conf y realice los siguientes cambios.

nano nginx/conf/default.conf
server {
    listen [::]:80;
    listen 80;

    server_name domain.com www.domain;

    return 301 https://www.domain.com$request_uri;
}

 server {
    listen [::]:443 ssl http2;
    listen 443 ssl http2;

    server_name domain.com;

    ssl_certificate /etc/nginx/ssl/live/domain.com/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/live/domain.com/privkey.pem;

    return 301 https://www.domain.com$request_uri; 
}

server {
    listen [::]:443 ssl http2;
    listen 443 ssl http2;

    server_name www.domain.com;

    ssl_certificate /etc/nginx/ssl/live/domain.com/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/live/domain.com/privkey.pem;

    root /var/www/html;
    index index.php;

    location ~ /.well-known/acme-challenge {
         allow all; 
         root /var/www/html;
    }

    location / {
        try_files $uri @apache;
    }

    location ~ ^/.user.ini {
        deny all;
    }

    location ~*  .(svg|svgz)$ {
        types {}
        default_type image/svg+xml;
    }

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    location @apache {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://wordpress:80;
    }

    location ~[^?]*/$ {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://wordpress:80;
    }

    location ~ .php$ {
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        proxy_pass http://wordpress:80;
    }

    location ~/. {
        deny all;
        access_log off;
        log_not_found off;
    }
} 

Presiona CTRL-X seguido de Y y ENTER para guardar y salir del archivo.

Ahora reinicie el servicio Nginx para cargar las nuevas configuraciones.

docker-compose restart nginx

Ahora puede verificar su nombre de dominio desde su navegador. Obtendrá una redirección a HTTPS y verá la página de instalación de WordPress para completar la instalación.

Aprende las Técnicas Avanzadas de WordPress con este curso fácil de aprender ahora.

Conclusión

Ahora ha aprendido a instalar y configurar WordPress con Nginx, Apache, PHP 8.1, MariaDB y Let's Encrypt con Docker y Docker Compose en Ubuntu 22.04.

Gracias por tu tiempo. Si tiene algún problema o comentario, deje un comentario a continuación.


Linux
  1. Cómo instalar WordPress con Nginx en Ubuntu 18.04

  2. Cómo instalar WordPress con Docker en Ubuntu

  3. Instale ModSecurity con Apache en un contenedor Docker

  4. Instalar WordPress en Linux con Apache

  5. Cómo instalar Apache 2.4.2 desde el origen en CentOS 6.2 con SSL

Instalar WordPress con Nginx en Ubuntu 18.04

Cómo instalar WordPress en CentOS 7.1 con Apache

Instalar WordPress con Docker en Ubuntu 20.04

Cómo instalar Apache Tomcat 10 en Ubuntu 20.04 con Nginx

Instale y use Docker Compose con Docker en Ubuntu 22.04

Cómo instalar Apache Tomcat 10 en Ubuntu 22.04 con Nginx