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
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:
sudo apt-get update
para buscar as últimas versões dos pacotessudo apt-get upgrade
para atualizar os pacotes usando as últimas versõescurl -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)sudo apt-get install -y nodejs
(para substituir a sua versão atual pela última versão instalada, nesse caso a 18)- 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.
sudo -i -u ghost-mgr
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.