Node.js: Introdução

Aprenda a implementar um serviço Node.js no Stackhero de forma rápida e segura

👋 Bem-vindo à documentação do Stackhero!

A Stackhero oferece uma solução Node.js cloud pronta a usar que proporciona uma série de benefícios, incluindo:

  • Implemente a sua aplicação em segundos com um simples git push.
  • Utilize o seu próprio nome de domínio e beneficie da configuração automática de certificados HTTPS para uma segurança reforçada.
  • Desfrute de tranquilidade com backups automáticos, atualizações com um clique, e preços simples, transparentes e previsíveis.
  • Obtenha desempenho ótimo e segurança robusta graças a uma VM privada e dedicada.

Poupe tempo e simplifique a sua vida: só leva 5 minutos para experimentar a solução de hospedagem cloud Node.js da Stackhero!

Implementar um serviço Node.js no Stackhero é rápido, eficiente e fiável. Este guia orienta-o através dos passos essenciais para implementar a sua aplicação em segundos, garantindo segurança e desempenho de primeira linha.

Comece por criar um serviço Node.js no Stackhero. Este passo estabelece a base para a implementação da sua aplicação e prepara-o para explorar todos os benefícios da solução de alojamento em cloud do Stackhero.

Antes de implementar no Stackhero, certifique-se de que tem as seguintes ferramentas instaladas:

  1. Git. Pode descarregá-lo de https://git-scm.com/downloads.
  2. Para utilizadores de Windows, sugerimos o uso do Windows Terminal disponível na Microsoft Store para uma melhor experiência.

A única configuração necessária é a atualização da sua chave pública SSH. Esta chave permite que o Stackhero aceda de forma segura ao seu repositório de código.

Para localizar a sua chave pública, execute um destes comandos:

cat ~/.ssh/id_rsa.pub

ou

cat ~/.ssh/id_ed25519.pub

Se ainda não tiver um par de chaves SSH, pode gerar uma executando ssh-keygen no Linux ou macOS ou ssh-keygen.exe no Windows.

Após recuperar a sua chave pública, inicie sessão no painel de controlo do Stackhero, selecione o seu serviço Node.js, navegue até à sua configuração e cole a sua chave.

Dica: Pode definir a sua chave pública SSH globalmente para que todos os serviços futuros a incluam automaticamente. Para isso, vá ao painel de controlo do Stackhero, clique na sua foto de perfil (localizada no canto superior direito), navegue até 'O seu perfil' e cole a sua chave pública SSH.

É fornecida uma aplicação Node.js de exemplo para ilustrar o processo de implementação no Stackhero. Pode clonar o repositório com os seguintes comandos:

git clone https://github.com/stackhero-io/nodejsGettingStarted.git stackhero-nodejs-getting-started
cd stackhero-nodejs-getting-started

Implementar a sua aplicação via git é rápido, fiável e simples no Stackhero. Na página principal do seu serviço, encontrará um comando para adicionar um repositório remoto git. Pode parecer algo assim:

git remote add stackhero ssh://stackhero@XXXXX.stackhero-network.com:222/project.git

Basta copiar e colar o comando no seu terminal.

Envie o seu código para o Stackhero usando o seguinte comando:

git push stackhero main

Na primeira vez que enviar, ser-lhe-á solicitado que adicione a impressão digital da chave. Digite "yes" para continuar.

Após alguns momentos, a sua aplicação estará online. Pode verificar o seu estado visitando o URL do site fornecido no painel de controlo do Stackhero (por exemplo, https://XXXXX.stackhero-network.com).

É isso. A sua aplicação está agora implementada!

Se fizer alterações ao ficheiro app.js, basta confirmar e enviar as suas modificações:

git add -A .
git commit -m "Update app.js"
git push stackhero main

Para aplicações existentes, adicione o repositório remoto conforme descrito anteriormente em Configurar o servidor de repositório remoto. Depois, implemente as suas alterações com:

git push stackhero main

Se encontrar o seguinte erro:

error: failed to push some refs to '[...]'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
(e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

Este erro indica que o seu repositório local não está sincronizado com o repositório remoto. Neste caso, pode forçar o envio executando:

git push -f stackhero main

Se vir este erro ao executar git push stackhero main:

error: src refspec main does not match any
error: failed to push some refs to 'ssh://<XXXXXX>.stackhero-network.com:222/project.git'

Isto indica que o ramo main não existe. Pode tentar enviar o ramo master em vez disso:

git push stackhero master

Se o git responder com "Everything up-to-date" mas as suas alterações não forem implementadas, pode ser porque se esqueceu de confirmar as suas alterações. Nesse caso, execute:

git add -A .
git commit -m "Your commit message"
git push stackhero main

Se não foram feitas alterações mas ainda assim deseja forçar uma implementação, pode forçar um commit vazio:

git commit --allow-empty -m "Force update"
git push stackhero main

Se quiser implementar um ramo diferente de main, como production, pode usar o seguinte comando:

git push stackhero production:main

Se trabalhar com tags e quiser implementar uma tag específica (por exemplo, v1.0), execute:

git push stackhero 'v1.0^{}:main'

Aqui, ^{} garante que o commit associado à tag seja enviado.

Se precisar de implementar um commit específico, primeiro identifique o hash do commit usando git log. Depois implemente-o com:

git push -f stackhero <HASH>:main

Pode configurar múltiplos serviços Node.js para diferentes ambientes, como produção e staging. Para renomear o repositório remoto atual de stackhero para stackhero-staging, execute:

git remote rename stackhero stackhero-staging

Em seguida, crie um novo serviço Node.js no painel de controlo do Stackhero e adicione-o como stackhero-production:

git remote add stackhero-production ssh://stackhero@XXXXX.stackhero-network.com:222/project.git

Implemente em produção ou staging usando os comandos respetivos:

git push stackhero-production main

ou

git push stackhero-staging main

No macOS, pode ser solicitado a introduzir a palavra-passe da sua chave SSH cada vez que envia o seu código. Para maior conveniência e segurança (sem remover a palavra-passe da sua chave), pode guardá-la no keychain do macOS executando:

/usr/bin/ssh-add --apple-use-keychain ~/.ssh/id_rsa

Este comando guarda a palavra-passe da sua chave no keychain para que não seja solicitado novamente durante futuras implementações.

Para ambientes de staging e produção, gerir segredos como tokens ou palavras-passe de forma segura é essencial. Em vez de armazenar estes segredos diretamente no seu repositório, use variáveis de ambiente para uma segurança reforçada.

Pode adicionar variáveis de ambiente através do painel de controlo do Stackhero e acedê-las no seu código Node.js. Por exemplo, se definir uma variável chamada mySecret, pode acedê-la na sua aplicação da seguinte forma:

process.env.mySecret

Se a sua aplicação não usar HTTP, pode ser necessário abrir portas TCP e UDP adicionais através do painel de controlo do Stackhero. Basta especificar a porta de entrada pública, a porta de destino no seu serviço Node.js e o protocolo (TCP ou UDP) para garantir uma conectividade adequada.

Para armazenar ficheiros como fotos de utilizadores, é melhor usar uma solução de armazenamento de objetos. Esta abordagem permite o compartilhamento de ficheiros entre múltiplos serviços e instâncias enquanto mantém o seu código separado dos seus dados. Recomendamos MinIO como uma solução simples, rápida e poderosa compatível com o protocolo Amazon S3.

Se preferir armazenamento local, pode usar o armazenamento persistente disponível com a sua instância Node.js. Este armazenamento está localizado em /persistent/storage/.

ATENÇÃO: Nunca armazene dados fora da pasta /persistent/storage/!

Os dados armazenados fora desta pasta podem ser perdidos se a sua instância reiniciar ou se enviar alterações de código.

Ao implementar uma nova versão da sua aplicação, a versão antiga recebe um sinal de terminação antecipadamente. Isto dá-lhe tempo para fechar graciosamente as ligações à base de dados e parar outros serviços.

O sinal de terminação SIGTERM é emitido. Pode capturar este sinal no seu código da seguinte forma:

process.on('SIGTERM', () => {
  // Este log aparece no painel de controlo do Stackhero na aba 'logs'
  console.info('😯 Sinal SIGTERM recebido.');

  // Feche aqui as ligações à base de dados ou outros serviços
  // ...
});

Por padrão, o Node.js é executado num único núcleo usando um único thread. Para tirar pleno proveito de todos os núcleos de CPU disponíveis, considere usar a API cluster do Node.js. Pode consultar a documentação oficial aqui: https://nodejs.org/api/cluster.html.

Abaixo está um exemplo simples que cria um servidor HTTP utilizando todos os CPUs disponíveis:

const cluster = require('cluster');
const http = require('http');
const cpusCount = require('os').cpus().length;

if (cluster.isMaster) {
  console.log(`Master ${process.pid} is running`);

  // Fork workers
  for (let i = 0; i < cpusCount; i++) {
    cluster.fork();
  }

  cluster.on('exit', (worker, code, signal) => {
    console.log(`Worker ${worker.process.pid} died`);
  });
} else {
  // Os workers partilham qualquer ligação TCP; neste caso, um servidor HTTP
  http.createServer((req, res) => {
    res.writeHead(200);
    res.end('hello world\n');
  }).listen(8000);

  console.log(`Worker ${process.pid} started`);
}