Terminal de aeroporto
Photo by Belinda Fewings / Unsplash

Como atualizar o Node.js para a última versão na Digital Ocean para o Ghost

Ao atualizar o Ghost para uma versão mais recente você pode se deparar com um erro similar a esse depois de rodar ghost update.

Message: Ghost v5.75.2 is not compatible with the current Node version. Your node version is 16.15.0, but Ghost v5.75.2 requires ^18.12.1
Message: Ghost v5.75.2 is not compatible with the current Node version. Your node version is 16.15.0, but Ghost v5.75.2 requires ^18.12.1

A pergunta que fica é: Como atualizar o Node.js na Digital Ocean para a última versão necessária pro Ghost?

Vamos ao passo a passo:

  1. sudo apt-get update para buscar as últimas versões dos pacotes
  2. sudo apt-get upgrade para atualizar os pacotes usando as últimas versões
  3. curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - (aqui vamos usar a versão 18, mas você pode trocar pela versão 20 ou superior)
  4. sudo apt-get install -y nodejs (para substituir a sua versão atual pela última versão instalada, nesse caso a 18)
  5. Ao rodar node -v você deve ver a nova versão no terminal

Agora você pode prosseguir novamente para atualizar o Ghost no seu Droplet. Antes, precisamos entrar na pasta e logar com o usuário correto.

  1. sudo -i -u ghost-mgr
  2. cd /var/www/ghost

Edit Outubro/24: Depois de usar a Digital Ocean por vários anos, entrei no programa de referrals. Caso queria criar uma conta e receber $200 créditos para gastar em 60 dias, você pode utilizar o meu link de afiliado: digitalocean.com. Como faço tudo com total transparência, ressalto que se você usar o meu link, recebo uma comissão da Digital Ocean em forma de crédito para gastar na plataforma, o que me ajuda a manter o blog no ar.

O primeiro passo é rodar sudo npm install -g ghost-cli@latest (para instalar a última versão da CLI. Caso você não instale, terá um erro similar a esse:

Message: The version of Node.js you are using is not supported.
Supported: ^12.22.1 || ^14.17.0 || ^16.13.0
Installed: 18.19.0
Message: The version of Node.js you are using is not supported.
Supported: ^12.22.1 || ^14.17.0 || ^16.13.0
Installed: 18.19.0

Agora é só rodar ghost backup (por garantia) e depois ghost update. Pronto.

Caso você tenha algum erro relacionado ao banco de dados no processo de update, você precisa atualizar a configuração do Ghost. É super simples.

O erro que você deve ver é similar a esse aqui:

Message: Ghost was able to start, but errored during boot with: connect ECONNREFUSED ::1:3306
Help: Unknown database error
Suggestion: journalctl -u ghost_mydomain-com -n 50
Message: Ghost was able to start, but errored during boot with: connect ECONNREFUSED ::1:3306
Help: Unknown database error
Suggestion: journalctl -u ghost_mydomain-com -n 50

Esse erro acontece por que o Node.js 18 prefere a resolução ipv6 em vez de ipv4 - você pode ver isso na mensagem de erro com a conexão MySQL ::1:3306. Se o seu servidor MySQL não estiver ouvindo na interface ipv6, então o Node não será capaz de se conectar a ele.

A correção mais rápida é especificar explicitamente 127.0.0.1 para o host do seu banco de dados no lugar de localhost na sua configuração do Ghost.

Você pode alterar a sua configuração rodando vim config.production.json.

No final, a configuração deve ficar semelhante a essa:

{
"url": "url",
"server": {
"port": 2368,
"host": "127.0.0.1"
},
"database": {
"client": "mysql",
"connection": {
"host": "127.0.0.1",
"user": "user",
"password": "password",
"port": 3306,
"database": "ghost_production"
}
},
"mail": {},
"logging": {
"transports": ["file", "stdout"]
},
"process": "systemd",
"paths": {
"contentPath": "/var/www/ghost/content"
}
}
{
"url": "url",
"server": {
"port": 2368,
"host": "127.0.0.1"
},
"database": {
"client": "mysql",
"connection": {
"host": "127.0.0.1",
"user": "user",
"password": "password",
"port": 3306,
"database": "ghost_production"
}
},
"mail": {},
"logging": {
"transports": ["file", "stdout"]
},
"process": "systemd",
"paths": {
"contentPath": "/var/www/ghost/content"
}
}

Depois de salvo o arquivo, você precisa reiniciar o ghost rodando ghost restart. Pronto! Ao seguir essas etapas você atualiza o Node.js e o Ghost.