Implementar o Jetty como daemon da porta 80 no Linux

3

Estou curioso sobre as técnicas que os deuses do administrador do Linux estão usando para gerenciar suas implantações do Jetty. Eu venho de um fundo do Windows Server, então eu ainda estou me acostumando com tudo isso. Eu estive procurando uma boa solução para implantar instâncias do Jetty como porta 80 em uma instalação do Linux.

Até agora eu vi esse segmento que permite que o Jetty seja executado como um daemon:

link

E eu vi esse segmento que fala sobre alternativas para configurar na porta 80:

link

Tudo isso parecia meio hacky. Certamente há uma maneira relativamente padrão de implementar um servidor web como o Jetty no Linux. Atualmente estou usando o CentOS 5.5, mas aberto a outras distros.

Obrigado antecipadamente.

    
por McKAMEY 08.02.2011 / 21:08

2 respostas

2

Infelizmente, os processos Java tendem a não daemonizar, assim como outros idiomas. Para o Jetty, você vai querer usar algo como daemonize para iniciar e gerenciar o processo.

Editar - alguns detalhes adicionais:

Depois de construir o daemonize (conforme as instruções no link acima), os parâmetros da linha de comando são explicados no arquivo gerado daemonize.html . Teste-o a partir do comando de lançamento para garantir que ele funcione como esperado.

Em seguida, para iniciar o Jetty na inicialização, adicione o comando daemonize a um script de shell de inicialização (por exemplo, para append /etc/rc.d/rc.local do CentOS / RHEL). Por exemplo:

#!/bin/bash
#...other startup commands

/path-to/daemonize -c /path-to/jetty/ -p pid.txt -e error.log -o console.log -a /usr/bin/java -jar start.jar
    
por 08.02.2011 / 21:32
1

Eu colocaria um proxy Apache2 na frente de um servidor de aplicativos. O Apache2 possui um módulo específico projetado para isso. Ele adiciona os cabeçalhos apropriados à solicitação do seu aplicativo para identificar o usuário remoto. O Apache2 pode ser usado para fornecer conteúdo estático e apenas passar solicitações de aplicativos para o servidor de aplicativos.

O Windows não implementa portas com privilégios (portas menores que 1024). Além de executar o Jetty como root, é necessária alguma técnica para vincular a porta 80 como root e passar os dados para o Jetty. O Apache2 usa o setuid após vincular a porta para que o processo que manipula uma solicitação não tenha acesso raiz ao sistema.

Os sites que você encontrou mostram algumas das opções:

  • Redirecionar a porta 80 para uma porta sem privilégios usando iptables ou ipchains.
  • Use um wrapper para ligar a porta 80 e, em seguida, executar um comando setuid antes de transferir o controle para o Jetty como um daemon. Java não fornece acesso direto ao setuid, portanto, as bibliotecas nativas são necessárias.
  • Redirecionar a porta 80 para uma porta sem privilégios usando o xinetd. Eu usaria iptables em vez disso.
por 08.02.2011 / 21:36