Central de Ajuda

Atendimento 24h de segunda à sexta via chat

Node.JS na Umbler

Sejam bem-vindos ao HUB de ajuda sobre Node.js da Umbler  

Aqui você vai encontrar todos os tutoriais sobre Node.JS na Umbler: do setup ao deploy, veja os principais passos para hospedar seu site/app em Node.JS.

Quer saber mais sobre nossa hospedagem Node.JS? Clique aqui.

Para fazer o deploy da sua aplicação em Node.JS é preciso tomar cuidado com um arquivo chamado package.json

O que você precisa cuidar é de ter certeza que dentro das configurações de scripts, terá o script de start, como mostra nesse exemplo de package.json

{
  "name": "umbler-node",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "start": "node app"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "check-node-version": "^2.1.0",
    "cluster": "^0.7.7",
    "express": "^4.15.2",
    "os": "^0.1.1"
  }
}

Como mostra no exemplo, o "start":"node app" ou "start":"seu arquivo de inicialização" precisa exisir para a aplicação rodar aqui com a Umbler

Uma outra configuração importante de se habilitar é rodar a sua aplicação na porta 3000

O primeiro passo é acessar o Painel de controle > Seu Domínio > Site > Deploy > E copiar a sua Git URL:
Depois de pegar a sua Git URL, você deve iniciar um repositório Git na pasta da sua aplicação, caso ainda não tenha feito. Você pode, então, fazer push de um commit nesse repositório. Segue um exemplo de instruções para iniciar o repositório, fazer o commit e o push para o servidor da Umbler.
 
Se você enviar o deploy com o arquivo yarn.lock o servidor vai identificar esse arquivo e ao em vez de executar o NPM INSTALL ele executará o YARN INSTALL.
 
git init
git add .
git commit -m "Meu deploy em Node.JS na Umbler"
git remote add umbler SUA_GIT_URL
git push umbler master
 
O primeiro comando utilizado é o Git Init, ele é responsável pela inicialização do seu repositório Git, você consegue mais informações sobre a utilização do Git nesse link:
Acessando a Git SCM
 
Assim que o push for feito para o servidor da Umbler, vamos verificar se nos arquivos enviados existe o diretório node_modules que é o diretório onde ficam os módulos instalados da sua aplicação. Se você enviar o diretório node_modules no deploy, não será executado o NPM INSTALL em seu servidor, caso você não envie o diretório node_modules será executado o NPM INSTALL em seu servidor e o download de todas as suas dependecianas do package.json será feito.
 
Se você estiver fazendo o push para o servidor da Umbler pela primeira vez terá que se identificar/autenticar. Os dados de autenticação são os mesmos que você utiliza para acessar o painel de controle da Umbler: e-mail e senha.
  
Quando o deploy terminar o Git Bash vai retornar uma mensagem parecida com essa:
 
remote: Build OK
remote: Umbler: Build completed successfully!  Your application will be updated and published soon.
remote: Umbler: Temp address: http://node-na-umbler-com.umbler.net
To https://tatooine.deploy.umbler.com/7e8vlyok/node-na-umbler-com.git
 
Vale lembrar que a sua aplicação deve estar rodando na porta 3000 ou utilizar a variável de ambiente PORT para que a sua aplicação seja acessível externamente.
 
Segue um exemplo de código para te ajudar:

var express = require('express');
var app = express();

//... your code here ...
                                
var port = process.env.PORT || 3000;
app.listen(port, function () {
    console.log('Umbler listening on port %s', port);
});
 
Agora que o deploy foi feito e a sua aplicação publicada é só aguardar o servidor iniciar!  
 
Para verificar os logs do deploy da sua aplicação você precisa acessar o Painel de controle da Umbler > Deploy e clicar em ver logs, como mostra a imagem a seguir: umbler_logs_deploy.png Depois de clicar em ver logs vai aparecer os seus logs, como nessa imagem:  logs_deploy.PNG
Para verificar os logs da sua aplicação, primeiro você precisa ativá-los.
 
Um detalhe importante é que os logs só ficarão ativos por 24 horas. Para ativa-los você precisa acessar o Painel de controle > Seu domínio > Logs, após isso é só clicar em Habilitar por 24H como informa a imagem abaixo: logs_node.png
 
Depois de habilitado, sua tela ficará assim: logs_node_feito.png
Através do painel de controle é possível definir variáveis de ambiente que podem ser acessadas pela sua aplicação. Por padrão o sistema já possui algumas variáveis predefinidas (PORT, TZ, LANG e LANGUAGE) que não podem ser alteradas através desta tela, mas que estão visíveis para fim de informação.
 
Para acessar as variáveis de ambiente acesse: painel de controle > Depois clicando em Site > Configurações > Variáveis de ambiente Node.JS
 
Segue uma imagem de exemplo para te auxiliar: variaveis_de_ambiente.png Agora você poderá ver todas as suas variáveis de ambientes. Por padrão, a variável PORT é criada, como o nosso Node.JS roda na porta 3000, já criamos essa variável de ambiente PORT para te auxiliar.
 
Para criar uma nova variável de ambiente é só clicar em "Criar variável de ambiente" (marcado com o quadrado vermelho) e utilizá-la em sua aplicação através do seguinte código: variaveis_de_ambiente_criar

E aqui um exemplo de como chamar a variável de ambiente em sua aplicação

process.env.NOME_DA_VARIAVEL
Na Umbler você consegue escalar a sua aplicação tanto horizontalmente como verticalmente, você consegue aumentar o tamanho do seu container e também ampliaro número de processos atendendo a sua aplicação.
 
É bem simples fazer um upgrade no seu plano, basta acessar o painel de controle > Site > E depois clicar no botão marcado em laranja e depois no botão em vermelho
 
node_redimensionar.png
 
Agora você estará nessa tela: redimensionamento.PNG Agora é só selecionar como você deseja escalar a sua aplicação, quantos processos você deseja que o Node.JS tenha disponível para utilizar e qual o tamanho deles.
 
Vale lembrar que se você utiliza sessão na sua aplicação é preciso armazena-la em algum local, como um banco de dados ou salvar o token no navegador do usuário como um Cookie mesmo, pois se você armazenar o token de sessão no processo quando o Node.JS for atender outra requisição pode ser que o processo que vá te atender não seja mais o mesmo, e assim o seu token de sessão será perdido.

O erro 503 indica que sua aplicação não está disponível. Este erro pode ocorrer devido a falha no deploy ou por algum erro interno que acontece em seu container.

Recomendamos que verifique o log de erros e também verifique se o seu Package.json está configurado conforme as indicações da Umbler.

O erro 500 está relacionado à problemas com a sua aplicação.

Para resolvê-lo, recomendamos que consulte seus logs de deploy e verifique qual o erro acusado.

O erro 404 indica que alguma requisição em sua aplicação não foi encontrada.

Normalmente este erro é informado nos casos em que uma URL (de imagens, páginas, etc) informada em seu código não está no local onde você informou.

Para resolver este erro, recomendamos que rode a aplicação localmente e verifique se o erro persiste. Se acontecer, é só checar onde a requisição está localizada realmente e pegar o caminho exato, atualizando sua aplicação.

O erro 403 significa que o seu usuário atual não tem permissão para fazer requisição.

Geralmente acontece quando você tem algum sistema de autenticação e um usuário não autenticado tenta fazer algo que ele não pode.

Para rodar o babel é preciso tomar cuidado com um parâmetro "postinstall": "babel-node index.js" dentro do seu package.json. Como os arquivos escritos com o Babel precisam ser compilados, é preciso fazer essa configuração. Veja abaixo um exemplo de package.json configurado da forma correta.

{
  "name": "babelandnode",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "node index",
    "postinstall": "babel-node index.js"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "babel-cli": "^6.24.1",
    "babel-preset-latest": "^6.24.1"
  }
}

Para rodar o TypeScript é preciso tomar cuidado com um parâmetro dentro do seu package.json. A configuração que você deve se atentar é a "postinstall": "grunt".

Essa configuração é feita para que o TypeScript seja compilado antes de começar a ser executado pelo Node.JS . Segue um exemplo de package.json configurado da forma correta

{
  "name": "heros",
  "description": "The tour of heros",
  "version": "1.0.0",
  "private": true,
  "author": "Brian Love",
  "scripts": {
    "dev": "NODE_ENV=development nodemon ./bin/www",
    "grunt": "grunt",
    "start": "node ./bin/www",
    "postinstall": "grunt"
  },
  "dependencies": {
    "body-parser": "^1.15.2",
    "cookie-parser": "^1.4.3",
    "errorhandler": "^1.4.3",
    "express": "^4.14.0",
    "method-override": "^2.3.6",
    "morgan": "^1.7.0",
    "pug": "^2.0.0-beta6"
  },
  "devDependencies": {
    "@types/body-parser": "0.0.33",
    "@types/cookie-parser": "^1.3.30",
    "@types/errorhandler": "0.0.30",
    "@types/method-override": "0.0.29",
    "@types/morgan": "^1.7.32",
    "grunt": "^1.0.1",
    "grunt-contrib-copy": "^1.0.0",
    "grunt-contrib-watch": "^1.0.0",
    "grunt-ts": "^6.0.0-beta.3",
    "nodemon": "^1.11.0",
    "typescript": "^2.0.8"
  }
}

Para rodar o Webpack é preciso tomar cuidado com um parametro dentro do seu package.json, segue um exemplo de package.json configurado da forma correta

{
  "name": "webpack-demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "webpack-dev-server --inline --hot --port 3000",
    "build": "webpack -p --port 3000"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "babel-core": "^6.21.0",
    "babel-loader": "^6.2.10",
    "babel-preset-es2015": "^6.18.0",
    "css-loader": "^0.26.1",
    "extract-text-webpack-plugin": "^2.0.0-beta.4",
    "file-loader": "^0.9.0",
    "node-sass": "^4.1.0",
    "sass-loader": "^4.1.0",
    "style-loader": "^0.13.1",
    "url-loader": "^0.5.7",
    "webpack": "^2.1.0-beta.28",
    "webpack-dev-server": "^2.2.0-rc.0"
  },
  "dependencies": {
    "d3": "^4.4.0",
    "lodash": "^4.17.2"
  }
}

A configuração que tomar cuidado é a "start": "webpack-dev-server --inline --hot --port 3000", essa configuração é feita para que o Webpack rode e fique rodando na porta 3000

Para rodar o Ghost com o Node.JS é preciso ter atenção em algumas configurações no arquivo config.js, são elas:

Elas são, cuidar para a sua aplicação ficar exposta na porta 3000 e também o host ficar configurado para 0.0.0.0, como mostra no seguinte exemplo:

var path = require('path'),
    config;

config = {
    production: {
        url: 'http://localhost:3000',
        mail: {},
        database: {
            client: 'sqlite3',
            connection: {
                filename: path.join(__dirname, '/content/data/ghost.db')
            },
            debug: false
        },

        server: {
            port: '3000',
            host: '0.0.0.0'
        }
    }
    ...

O primeiro passo para configurar a New Relic é se cadastrar no site New Relic e depois criar a sua aplicação em Node.JS lá, assim você vai receber uma chave para continuar com a sua configuração.

Para configurar a New Relic em sua aplicação é necessário instalar o pacote da New Relic, para isso basta abrir o seu Git Bash ou qualquer terminar e executar o seguinte comando:

npm install newrelic --save

Após instalar o módulo você vai acessar a pasta node_modules > newrelic e depois copiar o arquivo newrelic.js para a raiz da sua aplicação.

Depois de mover para a raiz, abra o arquivo newrelic.js no editor de texto que você preferir e insira a sua chave e o nome da sua aplicação dentro dele.

Aqui um exemplo de arquivo configurado:

'use strict'
exports.config = {
  app_name: ['Teste Umbler'],

  license_key: '94f417a76a019a3de38285a589c97631ec955eb5',
  logging: {
    level: 'info'
  }
}

E depois de configurar o newrelic.js é só adicionar o require('newrelic') no topo do seu arquivo que inicia a sua aplicação, geralmente é o index.js ou app.js, segue um exemplo de um arquivo:

require('newrelic')
const express = require('express')
const app = express()

app.get('/', (req, res) => {
    res.send('teste')
})

app.listen(3000, () => {
    console.log('rodando na 3000 ')
})

Depois disso é só aguardar uns 5 minutos de acesso em sua aplicação e logs irão aparecer em seu painel na New Relic.

Para utilizar o Bower basta fazer o envio da sua node_modules junto no seu git push

Uma forma de fazer isso é é renomear o seu arquivo chamado .gitignore para qualquer outra coisa e fazer o push novamente.

Vale lembrar que para isso você precisa antes ter executado o npm install em seu computador local.

Não é preciso utilizar o Nodemon, pois quando o seu container entra em produção, qualquer erro que aconteça com a sua aplicação, o container será reiniciado de forma automática. E por questões de segurança não permitimos a instalação do Nodemon, pois para instala-lo rodar o comando npm install nodemon -g, e esse comando você não tem permissão para utilizar.

Para subir o seu servidor conosco basta configurar o seu package.json com o start com o comando node

Qualquer dúvida que você tiver é só clicar no balãozinho azul no canto inferior direito, estamos prontos ajudar!