Desplegar wordpress

Lo primero que debemos hacer es desplegar WordPress en nuestro Docker.

Para ello podemos seguir los pasos de esta web:

https://hub.docker.com/_/wordpress/

Básicamente son :

  1. Crearnos un archivo llamado : Stack.yml , y pegar el siguiente contenido.
version: '3.1'

services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 80:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - wordpress:/var/www/html

  db:
    image: ghcr.io/linuxserver/mariadb:latest
    restart: always
    environment:
      MYSQL_DATABASE: exampledb
      MYSQL_USER: exampleuser
      MYSQL_PASSWORD: examplepass
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql

volumes:
  wordpress:
  db:

#Debemos cambiar los valores pertinentes, véase : nombre de la base de datos, usuario, contraseña... en la parte del WordPress y de mariaDB. Además si queremos podemos cambiar la ruta donde se mapean los archivos de WordPress.
  1. Lanzamos los contenedores usando docker-compose, con el siguiente comando:
docker-compose -f stack.yml up

Con esto se nos desplegará una base de datos mariadb y el contenedor con WordPress, para acceder a nuestro WordPress recién creado debemos acceder a través de : http://host-ip donde host-ip es la ip de la máquina donde hemos desplegado los contenedores.

Conseguir certificado https

Para conseguir nuestro certificado https lo primero debemos parar nuestro contenedor docker.

Una vez parado, tenemos que desplegar otro contenedor docker que nos conseguirá los archivos necesarios para utilizar nuestra conexión https.

Para ello utilizaremos el siguiente código:

docker run --rm -it -p 80:80 -p 443:443 -v $PWD/letsencrypt:/etc/letsencrypt certbot/certbot certonly --standalone

Tras generar los certificados, los copiamos a la ruta que consideremos oportuna :

cp letsencrypt/live/my.domain/* certs/

Configurar HTTPS

Para configurar nuestra imagen de WordPress con https debemos realizar los siguientes cambios sobre la imagen de WordPress:

  wordpress:
    image: WordPress:latest
    restart: always
    environment:
    WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: exampleuser
      WORDPRESS_DB_PASSWORD: examplepass
      WORDPRESS_DB_NAME: exampledb
    volumes:
      - ./wordpress:/var/www/html
      - ./certs:/etc/ssl/certs:ro
      - ./default-ssl.conf:/etc/apache2/sites-available/default-ssl.conf:ro
      - ./docker-entrypoint.sh:/usr/local/bin/docker-entrypoint.sh:ro
    ports:
      - 443:443
...
(No cambiamos la demás configuración)
  • ./certs es la ruta donde tenemos los certificados generados anteriormente.
  • ./default-ssl.conf es la configuración de https para apache, para ello crearemos el un archivo con el siguiente contenido:
<VirtualHost *:443>
  DocumentRoot /var/www/html
  ErrorLog ${APACHE_LOG_DIR}/error.log
  CustomLog ${APACHE_LOG_DIR}/access.log combined
  SSLEngine on
  ServerName my.domain  # Cambiar por el nombre de nuestro servidor
  SSLCertificateFile  /etc/ssl/certs/fullchain.pem
  SSLCertificateKeyFile /etc/ssl/certs/privkey.pem
  <FilesMatch "\.(cgi|shtml|phtml|php)$">
          SSLOptions +StdEnvVars
  </FilesMatch>
  <Directory /usr/lib/cgi-bin>
          SSLOptions +StdEnvVars
  </Directory>
</VirtualHost>
  • docker-entrypoint.sh es el archivo que se ejecuta previo al arranque del WordPress.

Para obtenerlo y hacer modificaciones primero debemos copiarlo desde docker a nuestro equipo:

docker cp wordpress_wordpress_1:/usr/local/bin/docker-entrypoint.sh .

wordpress_wordpress_1 es el nombre del contenedor donde tenemos desplegado WordPress, si el nuestro tiene otro nombre debemos cambiarlo.

Luego debemos modificar la ultima linea del archivo para que tenga el siguiente código:

a2enmod ssl
a2ensite default-ssl
service apache2 restart
service apache2 stop
exec "$@"

Una vez hecho esto podemos arrancar el contenedor con WordPress con los últimos cambios, y debería funcionar todo correctamente.

por domingo

Deja una respuesta

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