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 :
- 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.
- 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.