Qual é a melhor maneira de implantar o Node.js?
Eu tenho um VPS Dreamhost (é o que eles chamam de VM ) e pude instalar o Node.js e configurar um proxy. Isso funciona muito bem, desde que eu mantenha aberta a conexão SSH que iniciei o nó.
node.js
service
deployment
daemon
respectTheCode
fonte
fonte
Respostas:
Resposta de 2016 : quase toda distribuição Linux vem com systemd, o que significa que eternamente, monit, PM2 etc. não são mais necessários - o seu sistema operacional já lida com essas tarefas .
Crie um
myapp.service
arquivo (substituindo 'myapp' pelo nome do seu aplicativo, obviamente):Observe se você é novo no Unix:
/var/www/myapp/app.js
deve ter#!/usr/bin/env node
na primeira linha.Copie seu arquivo de serviço para a
/etc/systemd/system
pastaInforme o systemd sobre o novo serviço com
systemctl daemon-reload
.Comece com
systemctl start myapp
.Habilite para rodar na inicialização com
systemctl enable myapp
.Veja logs com
journalctl -u myapp
Isso é retirado de Como implantamos aplicativos de nó no Linux, edição 2018 , que também inclui comandos para gerar um AWS / DigitalOcean / Azure CloudConfig para criar servidores Linux / nó (incluindo o
.service
arquivo).fonte
Failed to issue method call: Unit name ... is not valid.
?/etc/systemd/system
você pode precisar executarsystemctl daemon-reload
(o systemd normalmente informa se isso é necessário). TBH, isso é melhor perguntado como uma pergunta separada./etc/systemd/system
, você pode simplesmente usarsystemctl enable /full/path/to/myapp.service
, o que cria um link simbólico/etc/systemd/system
para você.node
é chamado por/var/www/myapp/app.js
si só. No Unix, se você tornar um arquivo executável, e a primeira linha começar com#!/some/file
o arquivo será interpretada com esse binário. Google 'intérprete Unix' para saber mais.Use para sempre . Ele executa os programas Node.js em processos separados e os reinicia, se houver algum.
Uso:
forever start example.js
para iniciar um processo.forever list
para ver a lista de todos os processos iniciados por sempreforever stop example.js
para interromper o processo ouforever stop 0
para o processo com o índice 0 (como mostrado porforever list
).fonte
forever stop 0
cometeu um erro e as coisas meio que desmoronaram a partir daí. Eu tenho tentado fazer isso sem root em seu próprio usuário, para que eu possa limpar facilmente quando encontrar a solução certa. Esse pode ser o meu problema. Vou investigar um pouco mais.Eu escrevi sobre o meu método de implantação aqui: Implantando aplicativos node.js.
Em resumo:
fonte
pm2 faz os truques.
Os recursos são: Monitoramento, recarga de código ativo, balanceador de carga interno, script de inicialização automática e processos de ressurreição / despejo.
fonte
Você pode usar
monit
,forever
,upstart
ousystemd
para iniciar o seu servidor.Você pode usar o verniz ou o HAProxy em vez do Nginx (sabe-se que o Nginx não funciona com websockets).
Como uma solução rápida e suja que você pode usar
nohup node your_app.js &
para impedir que seu aplicativo terminar com o seu servidor, masforever
,monit
e outras soluções propostas são melhores.fonte
Criei um script Upstart usado atualmente para meus aplicativos:
Personalize tudo antes de #########, crie um arquivo em /etc/init/your-service.conf e cole-o lá.
Então você pode:
fonte
Eu escrevi um guia bastante abrangente para implantar o Node.js, com arquivos de exemplo:
Tutorial: Como implantar aplicativos Node.js, com exemplos
Abrange coisas como http-proxy, SSL e Socket.IO .
fonte
Aqui está um artigo mais longo sobre como resolver esse problema com o systemd: http://savanne.be/articles/deploying-node-js-with-systemd/
Algumas coisas a ter em mente:
Todas essas coisas são feitas facilmente com o systemd.
fonte
Se você tiver acesso root, é melhor configurar um daemon para que ele seja salvo e salvo em segundo plano. Você pode ler como fazer exatamente isso no Debian e Ubuntu na postagem do blog Run Node.js como um serviço no Ubuntu .
fonte
Para sempre fará o truque.
@ Kevin: Você deve ser capaz de matar processos bem. Eu verificaria a documentação um pouco. Se você puder reproduzir o erro, seria ótimo publicá-lo como um problema no GitHub.
fonte
Tente o seguinte: http://www.technology-ebay.de/the-teams/mobile-de/blog/deploying-node-applications-with-capistrano-github-nginx-and-upstart.html
Um guia excelente e detalhado para implantar aplicativos Node.js. com Capistrano, Upstart e Nginx
fonte
Como Box9 disse, Forever é uma boa escolha para código de produção. Mas também é possível manter um processo em andamento, mesmo que a conexão SSH seja fechada a partir do cliente.
Embora não seja necessariamente uma boa ideia para a produção, isso é muito útil quando no meio de longas sessões de depuração, ou após a saída do console de processos demorados, ou sempre que é útil desconectar sua conexão SSH, mas mantenha o terminal ativo no servidor para se reconectar mais tarde (como iniciar o aplicativo Node.js. em casa e reconectar-se ao console mais tarde no trabalho para verificar como estão as coisas).
Supondo que seu servidor seja uma caixa * nix, você pode usar o comando screen do shell para manter o processo em execução, mesmo se o SSH do cliente estiver fechado. Você pode fazer o download / instalar a tela da Web, se ainda não estiver instalada (procure um pacote para sua distribuição, se Linux, ou use MacPorts, se OS X).
Funciona da seguinte forma:
Você pode ter várias sessões de tela em execução simultaneamente, se necessário, e pode se conectar a qualquer uma delas a partir de qualquer cliente. Leia a documentação online para todas as opções.
fonte
nohup
eforever
Forever é uma boa opção para manter os aplicativos em execução (e é o npm instalável como um módulo, o que é bom).
Mas, para uma "implantação" mais séria - como gerenciamento remoto de implantação, reinicialização, execução de comandos etc. - eu usaria o capistrano com a extensão do nó.
https://github.com/loopj/capistrano-node-deploy
fonte
https://paastor.com é um serviço relativamente novo que faz a implantação para você, em um VPS ou outro servidor. Há uma CLI para enviar código. O Paastor possui um nível gratuito, pelo menos no momento da publicação.
fonte
No seu caso, você pode usar o daemon inicial . Para uma solução completa de implantação, posso sugerir capistrano . Dois guias úteis são: Como configurar o Node.js. env e Como implantar via capistrano + upstart .
fonte
Tente node-deploy-server . É um conjunto de ferramentas complexo para implantar um aplicativo em seus servidores privados. Está escrito em Node.js e usa o npm para instalação.
fonte