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
- Instalar Docker en Ubuntu 22.04
- 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
ycertbot
. - 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.