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.