Hace algunos meses hice un tutorial sobre como Desplegar Ghost CMS con Docker en un VPS pero éste estaba configurado con HTTP. Para mejorar la seguridad vamos a explicar como configurar un certificado con Let’s Encrypt en una imagen de Docker y Nginx.

Para ello, utilizaremos como siempre un servidor con Debian 9 recién creado y listo para ser aprovisionado con Ghost.

Instalar y configurar Docker

Lo primero que vamos hacer es instalar Docker en nuestro servidor:

wget -qO- https://get.docker.com/ | sh

Y luego creamos un usuario:

adduser ghost

Y lo añadimos al grupo de Docker:

usermod -aG docker ghost

Instalación y configuración de Nginx

Instalamos Nginx:

apt install nginx

Habilitamos Nginx al arranque:

systemctl enable nginx systemctl start nginx

Y creamos la configuración de Nginx para Ghost:

nano /etc/nginx/sites-available/ghost.conf

Con el siguiente contenido:

server { listen 80; server_name entrebits.org; location /.well-known/ { root /var/www/html; } location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_pass http://127.0.0.1:2368; proxy_set_header X-Forwarded-Proto https; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }

Activamos la web:

ln -s /etc/nginx/sites-available/ghost.conf /etc/nginx/sites-enabled/ghost.conf

Y reiniciamos Nginx para aplicar la configuración nueva:

systemctl restart nginx

Instalación certificado SSL

Instalamos lo necesario para añadir repositorios:

apt install software-properties-common

Añadimos repositorio y actualizamos:

add-apt-repository ppa:certbot/certbot apt update

Instalamos lo necesario para generar el certificado:

apt install python-certbot-nginx

Y finalmente, creamos el certificado:

certbot --authenticator webroot --installer nginx

Seleccionaremos nuestro dominio y luego marcaremos la opción «enter a new webroot» e indicaremos /var/www/html :



Select the webroot for entrebits.org: -------------------------------------------------------------------- 1: Enter a new webroot -------------------------------------------------------------------- Press 1 [enter] to confirm the selection (press 'c' to cancel):/var/www/html

Desplegar imagen de Ghost con Docker

Primero de todo tendremos que hacer una preparación para Ghost, tendremos que crear un directorio en el home del usuario ghost que hemos creado anteriormente.

mkdir -p /home/ghost/ghost_volume

Descargamos la última imagen de Ghost:

docker pull ghost:latest

Y finalmente, desplegamos imagen y tendremos en cuenta que en el parámetro de url , pondremos la dirección con HTTPS:

docker run --name ghost -p 127.0.0.1:2368:2368 -e url=https://entrebits.org -v /home/ghost/ghost_volume/content:/var/lib/ghost/content --restart=always -d ghost:latest

Y ya tendremos Docker bajo SSL:

¡Oh no! Es una captura de Windows! 🙁

Conclusión

Como podéis ver, al final lo que hemos desplegado en nuestro servidor es un Docker con una imagen de Ghost que nos evitará pelearnos con NodeJS -si, lo odio mucho- y por otro lado tendremos un Nginx trabajando que hará de proxy y que además irá renovando el certificado SSL para que Ghost siempre sea seguro.