Introducción
Ghost es un sistema de administración de contenido (CMS) liviano y de código abierto creado en NodeJS, que fue el resultado de un exitoso Kickstarter. Recientemente han lanzado la nueva versión Ghost 5.0 LTS, que ofrecerá un ciclo de vida hasta Enero del 2024 (Major Versions & Long Term Support).
En este artículo se explicará cómo actualizar la versión manualmente, actualizar de versión y también configurarlo con systemd para una actualización automática (Upgrade). Se utilizará la Imagen preinstalada de Ghost 4.X para el ejemplo de actualización.
Índice
Preparación para actualización de Ghost
Será imprescindible tener correctamente configurada la propiedad y permisos del directorio de Ghost. Por lo tanto, primero accede a la ruta de Ghost:
# cd /var/www/ghostPosteriormente, accede con el usuario de Ghost:
# su ghostinstLuego lanza un diagnóstico de Ghost:
# ghost doctorDebería aparecerte todas las comprobaciones correctas, como el siguiente resultado:
Love open source? We’re hiring JavaScript Engineers to work on Ghost full-time.
https://careers.ghost.org
✔ Checking system Node.js version - found v16.18.1
✔ Checking logged in user
✔ Ensuring user is not logged in as ghost user
✔ Checking if logged in user is directory owner
✔ Checking current folder permissions
✔ Checking system compatibility
✔ Checking for a MySQL installation
+ sudo systemctl is-active ghost_ejemplo-clouding-host
Instance is currently running
ℹ Validating config [skipped]
✔ Checking folder permissions
✔ Checking file permissions
✔ Checking content folder ownership
✔ Checking memory availability
✔ Checking binary dependencies
✔ Checking free space
✔ Checking systemd unit file
✔ Checking systemd node version - found v16.18.1
En caso que alguna de las comprobaciones muestre un resultado incorrecto, deberás solucionarlo y normalmente en el diagnóstico, explica cómo corregir el problema.
Copia de seguridad de Ghost
Antes de actualizar Ghost, es recomendable tener un respaldo de él. Por lo tanto, puedes utilizar directamente la herramienta nativa que incorpora. Ejecutando lo siguiente crearás un respaldo de Ghost:
# ghost backupTambién puedes utilizar un snapshot del servidor en vez de utilizar la opción nativa de Ghost, será más rápido y seguro que almacenar la copia en el mismo servidor.
Actualización a la última versión de Ghost
Una vez realizados los pasos previos siguiendo la preparación, para la actualización de Ghost ejecuta un update.
# ghost check-updateResultado:
Love open source? We’re hiring JavaScript Engineers to work on Ghost full-time.
https://careers.ghost.org
Current version: 4.48.2
Latest 4.x version: 4.48.8
Latest version: 5.23.0
Major update available!
En el resultado podemos observar que hay una nueva revisión de la versión actual y un versión mayor disponible. Por ejemplo, el comando para únicamente realizar la actualización de la versión actual es el siguiente:
# ghost update v4En caso de tener la última versión disponible de Ghost, no es necesario indicar la versión:
# ghost updateAl ejecutar la actualización mostrará el siguiente contenido como resultado:
Love open source? We’re hiring JavaScript Engineers to work on Ghost full-time.
https://careers.ghost.org
+ sudo systemctl is-active ghost_ejemplo-clouding-host
✔ Checking system Node.js version - found v16.18.1
✔ Ensuring user is not logged in as ghost user
✔ Checking if logged in user is directory owner
✔ Checking current folder permissions
✔ Checking folder permissions
✔ Checking file permissions
✔ Checking content folder ownership
✔ Checking memory availability
✔ Checking free space
✔ Checking for available migrations
✔ Checking for latest Ghost version
# 4.48.8
This release contains fixes for minor bugs and issues reported by Ghost users.
---
View the changelog for full details:
* Ghost - https://github.com/tryghost/ghost/compare/v4.48.7...v4.48.8
* Admin - https://github.com/tryghost/admin/compare/v4.48.7...v4.48.8
🪄 Love open source? We're hiring [JavaScript Engineers](https://careers.ghost.org/)
to work on Ghost full-time
✔ Fetched release notes
✔ Downloading and updating Ghost to v4.48.8
+ sudo systemctl stop ghost_ejemplo-clouding-host
✔ Stopping Ghost
✔ Linking latest Ghost and recording versions
+ sudo systemctl start ghost_ejemplo-clouding-host
✔ Restarting Ghost
ℹ Removing old Ghost versions [skipped]
Posteriormente, puedes comprobar el estado de Ghost con un diagnóstico:
# ghost doctorDebería aparecer todo correcto, como en el siguiente resultado:
Love open source? We’re hiring JavaScript Engineers to work on Ghost full-time.
https://careers.ghost.org
✔ Checking system Node.js version - found v16.18.1
✔ Checking logged in user
✔ Ensuring user is not logged in as ghost user
✔ Checking if logged in user is directory owner
✔ Checking current folder permissions
✔ Checking system compatibility
✔ Checking for a MySQL installation
+ sudo systemctl is-active ghost_ejemplo-clouding-host
Instance is currently running
ℹ Validating config [skipped]
✔ Checking folder permissions
✔ Checking file permissions
✔ Checking content folder ownership
✔ Checking memory availability
✔ Checking binary dependencies
✔ Checking free space
✔ Checking systemd unit file
✔ Checking systemd node version - found v16.18.1
También puedes verificar que tienes la última revisión de la versión ejecutando de nuevo:
# ghost check-updateActualización de versión de Ghost (upgrade)
Actualización npm y CLI Ghost (solo para upgrade)
Para realizar una actualización a una nueva versión de Ghost, primero deberás actualizar NPM y el CLI de Ghost. Para actualizar NPM, simplemente ejecuta lo siguiente con el usuario root:
# npm install -g npmY para actualizar la versión de CLI de Ghost, ejecuta:
# npm i -g ghost-cli@latestUna vez realizado, estará preparado para realizar un upgrade de Ghost.
Actualización a una versión superior
Para la actualización a una versión superior, utiliza el comando upgrade:
# ghost upgradeTe mostrará el siguiente resultado y deberás confirmar la actualización a la nueva versión:
Love open source? We’re hiring JavaScript Engineers to work on Ghost full-time.
https://careers.ghost.org
+ sudo systemctl is-active ghost_ejemplo-clouding-host
✔ Checking system Node.js version - found v16.18.1
✔ Ensuring user is not logged in as ghost user
✔ Checking if logged in user is directory owner
✔ Checking current folder permissions
✔ Checking folder permissions
✔ Checking file permissions
✔ Checking content folder ownership
✔ Checking memory availability
✔ Checking free space
✔ Checking for available migrations
✔ Checking for latest Ghost version
# 5.22.11
* 🐛 Fixed error when importing members - Simon Backx
---
View the changelog for full details: https://github.com/tryghost/ghost/compare/v5.22.10...v5.22.11
🪄 Love open source? We're hiring [JavaScript Engineers](https://careers.ghost.org/) to work on Ghost full-time
✔ Fetched release notes
✔ Downloading and updating Ghost to v5.22.11
Checking theme compatibility for Ghost 5.22.11
✔ Your theme is compatible.
You can also check theme compatibility at https://gscan.ghost.org
Please review the full list of breaking changes at https://ghost.org/docs/changes/
⚠ Have you run `ghost backup`?
? Are you sure you want to migrate to Ghost 5.22.11? Yes
✔ Updating to a major version
+ sudo systemctl stop ghost_ejemplo-clouding-host
✔ Stopping Ghost
✔ Linking latest Ghost and recording versions
+ sudo systemctl start ghost_ejemplo-clouding-host
✔ Restarting Ghost
✔ Removing old Ghost versions
Automatización de la actualización (systemd)
Para automatizar el proceso de actualización, puedes utilizar systemd. Primero deberás crear un servicio para la actualización de NPM y el CLI de Ghost:
# nano /etc/systemd/system/update_npm.serviceEl contenido sería el siguiente:
[Unit]
Description=Update npm and ghost-cli automatically with systemd
[Service]
Type=oneshot
ExecStartPre=/usr/bin/npm install -g npm
ExecStart=/usr/bin/npm i -g ghost-cli@latest
Posteriormente, deberás crear otro servicio para la actualización de Ghost:
# nano /etc/systemd/system/update_ghost.serviceEl contenido será el siguiente y recuerda modificar en el update de Ghost para indicar la versión si no está instalada la última:
[Unit]
Description=Update ghost instance automatically with systemd
Wants=update_npm.service
After=update_npm.service
[Service]
Type=oneshot
User=ghostinst
WorkingDirectory=/var/www/ghost
ExecStartPre=/usr/bin/ghost check-update
ExecStart=/usr/bin/ghost update --no-prompt --auto
ExecStartPost=/usr/bin/ghost check-update
Luego deberás crear un timer para que se ejecute periódicamente los servicios:
# nano /etc/systemd/system/update_ghost.timerCon el siguiente contenido, se ejecutará una vez cada semana:
[Unit]
Description=Update ghost instance automatically with systemd weekly
[Timer]
OnBootSec=5m
OnUnitActiveSec=1w
[Install]
WantedBy=timers.target
Por último, deberás activar el timer con el siguiente comando:
# systemctl enable update_ghost.timerPuedes listar los timers para ver la próxima ejecución:
# systemctl list-timers --allPara verificar el funcionamiento de los servicios, puedes ejecutar los siguientes comandos:
# service update_npm start && journalctl --unit=update_npm.service --no-pager
# service update_ghost start && journalctl --unit=update_ghost.service --no-pagerRecuerda, si tienes consultas sobre esta u otra cuestión relacionada con tus servidores en Clouding, no dudes en escribir a soporte@clouding.io ¡Estamos a tu lado para lo que necesites, consúltanos!