Mi blog está alojado en DigitalOcean. Francamente, ni te lo pienses: ve directamente allí y créate un Droplet con Docker pre-instalado.

Si no tienes muy claro como se hace seguramente, este tuto te pueda ayudar. Recuerda elegir uno con Docker pre-instalado.

Voy a suponer que desde este punto estás trabajando en un Droplet con Docker y tienes acceso ssh a él sin ningún problema. Y que ya has configurado las DNS de tu dominio para que esté apuntando a tu recien creado servidor. Puede que esta guía te ayude.

Accedemos al servidor mediente ssh y hacemos un poco de trabajar de administración:

$ ssh [email protected]
... Estando ya en el servidor
$ adduser deployer
$ adduser deployer sudo
$ gpasswd -a deployer docker
$ service docker.io restart

Hemos creado un user deployer y agregado este usuario al grupo de docker. Nos volvemos a loguear en el servidor mediante ssh con el nuevo user creado. Y arrancamos dos containers. Uno con Nginx y otro con Ghost, al igual que hicimos con la máquina vagrant.

Queda pendiente reescribir esta serie de posts, usando Ansible para la configuración del servidor y evitar tener que hacerlo a mano.

$ ssh [email protected]
$ mkdir -p /var/www/blog
$ docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock jwilder/nginx-proxy
$ docker run -d -P -v /var/www/blog:/ghost-override -e VIRTUAL_HOST=myblog.com,www.myblog.com -e NODE_ENV=production --name blog dockerfile/ghost

Genial! Ya tenemos nuestra infraestructura montada. Hemos montado un proxy inverso y un blog con dos comandos. No esta mal verdad?!
Vamos a comprobar que todo esta funcionando como esperamos.

$ docker ps -a

Debe darte una salida como la siguiente:

CONTAINER ID        IMAGE                        COMMAND               CREATED             STATUS              PORTS                         NAMES  
7517c3a40985        dockerfile/ghost:latest      "bash /ghost-start"   14 hours ago        Up 9 hours          0.0.0.0:49178->2368/tcp       blog  
dfa959de6e1b        jwilder/nginx-proxy:latest   "forego start -r"     37 hours ago        Up 36 hours         443/tcp, 0.0.0.0:80->80/tcp   distracted_nobel  

Hemos creado la carpeta /var/www/blog en el servidor y esta carpeta es la que tiene que contener lo que tenemos en blog/src en nuestra propia máquina. Es lo último que nos queda por hacer.

Si no lo hiciste a la hora de crear el Droplet, es el momento de colocar tu key ssh pública en tu server para evitar introducir la clave cada vez que te conectas al servidor. Para ello recomiendo usar ssh-copy-id. En este blog te cuentan en detalle por qué.

Voy a suponer que desde este punto puedes conectarte a su servidor sin tener que poner la clave.

Creamos el fichero blog/deploy.sh y le damos permisos de ejecución:

$ touch blog/deploy.sh
$ chmod u+x blog/deploy.sh

En su interior escribimos lo siguiente:

# Posiblemente tú no tengas que excluir los mismos directorios que yo
rsync -arzPv \  
      --exclude=content/themes/ghostium/node_modules \
      src/ [email protected]:/var/www/blog

ssh [email protected] 'docker restart blog'

Consejo: Un poco más de info sobre rsync por si quieres afinar tu script

Con todo esto debería ser suficiente para tener tu blog en producción up & running :)

Espero que te haya ayudado en algo o al menos hayas sacado alguna idea de lo que se puede hacer. Agradecería muchísimo comentarios sobre qué cambiaríais para mejorar el proceso.

Suscríbete a mi lista de correo

* Campos obligatorios