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

2 min de leitura
Como atualizar o Node.js para a última versão na Digital Ocean para o Ghost
Photo by Belinda Fewings / Unsplash

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

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

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

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

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"
  }
}

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.