Cómo migrar Ghost a un contenedor en Docker
Mucho se habla de contenedores en este Blog pero el mismo no corre en uno. Hace unos días, solucione eso y te muestro cómo hacerlo.
Este blog corría a la "vieja" escuela, sobre un Ubuntu Server, con los paquetes de Node instalados, la Cli de Ghost y una base de datos, todo en el mismo server, Por supuesto, sin ningún problema pero el Ubuntu se quedo viejito (Tenía 14.04) y como estoy en proceso de re acomodar algunas cosas y tengo recursos disponibles en Azure, bueno, acá estamos.
Lo que primero hay que tener en cuenta cuando vamos a comenzar a migrar es lo siguiente:
- La carpeta "content" debemos resguardarla, ahí esta casi todo el contenido de nuestro blog.
- Exportar todos los posts y configuraciones en un archivo "JSON", eso se hace desde el apartado Labs, vean la siguiente captura
Con estas dos cosas estamos listos para migrar.
Poniendo a andar el nuevo Ghost.
Para hacer la configuración de nuestro nuevo contenedor, voy a usar un archivo Docker-Compose, para que sea más fácil de entender para todos. Así quedaría.
version: "3.3"
services:
cduser.com:
container_name: cduser-ghost
image: ghost:3.11.0
labels:
- "traefik.http.routers.cduser.tls.certresolver=leresolver"
- "traefik.http.routers.cduser.rule=Host(`cduser.com`,`www.cduser.com`)"
- "traefik.enable=true"
- "traefik.http.routers.cduser.entrypoints=websecure"
volumes:
- /home/data/volumes/cduser.com/content:/var/lib/ghost/content
En mi caso particular uso Traefik, como proxy reverso, si ustedes no lo usan o quieren exponerlo directo, algunos cambios deben hacerse, como por ejemplo, borrar todo lo que sea "labels" y especificar puertos. Quedando más o menos así:
Lo más importante de este contenedor es el montar el volumen. ¿Se acuerdan del la carpeta "content" que les comente más arriba? Bueno, esa hay que montarla en un volumen de Docker.
En mi caso, queda así, monto el contenido de "/home/data/volumes/cduser.com/content" en el "/var/lib/ghost/content" dentro del contenedor.
Una vez que las opciones están definidas, guardamos el archivo con el nombre docker-compose.yml y ejecutamos lo siguiente:
docker-compose up -d
Esto va a descargar la imagen de Ghost, este proceso se va a ver más o menos así:
Creating network "labs_default" with the default driver
Pulling cduser.com (ghost:3.11.0)...
3.11.0: Pulling from library/ghost
68ced04f60ab: Downloading [=======> ] 3.881MB/27.09MB
d08ae0b74f9b: Download complete
fae40cf84f67: Downloading [=================> ] 8.325MB/24.05MB
b2e030243655: Downloading [==========================> ] 1.444MB/2.765MB
2f877e419203: Waiting
21f095ca0a43: Waiting
8b6adca4bd4f: Waiting
25cc90b3a929: Waiting
83ef21406efd: Waiting
Si todo salió bien, cuando corramos un "docker ps", deberíamos verlo corriendo.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
df892bd2ac61 ghost:3.11.0 "docker-entrypoint.s…" 4 seconds ago Up 2 seconds 0.0.0.0:80->2368/tcp cduser-ghost
Con esto estamos listo para visitar nuestra URL/ghost o el localhost/ghost si estamos probando hacer esto localmente. Veremos la pantalla de bienvenida de Ghost, donde debemos crear nuestra cuenta, acuérdate, que si esta expuesto a Internet, el que primero crea la cuenta es el "owner" del Blog, así que no te demores mucho, siempre hay gente dando vueltas, buscando hacer maldades.
Una vez que estamos adentro, vamos a Lab y en vez de exportar, vamos a importar el archivo Json que les comenté más arriba.
Una vez arriba, si todo sale como planeamos, va a traer todos los posts, paginas y configuraciones.
Y eso es todo. No hay mucho más secreto.
Contame cómo te fue, si tuviste algún problema o si conoces otra manera de realizar este procedimiento.