Como configurar corretamente um serviço da web (Ubuntu 12.04)?

2

Eu tenho um projeto web (website) que roda seu próprio servidor web (no meu caso eu estou usando o servidor de snap do Haskell - mas isso é irrelevante para o propósito desta questão).

Como posso executá-lo na porta 80 do sistema para veicular seu conteúdo para o público? Em particular, estou interessado em:

  1. Onde no sistema eu coloco? %código%? Existe um lugar padrão para isso no linux?
  2. Qual usuário e / ou grupo o serviço deve executar? Eu sei que para correr em 80 você tem que ser root.
  3. Que tipo de permissões / propriedades essa pasta (na etapa 1) precisa ter?
  4. Como inicio meu serviço automaticamente e o mantenho em execução após o logout da conexão ssh? (Por exemplo, no Windows, isso é feito com sc. exe )

Qualquer ajuda é apreciada ou um ponto na direção certa. Obrigada!

P.S .: Estou usando o Ubuntu 12.04 64bits se isso ajudar.

    
por drozzy 03.07.2012 / 05:33

3 respostas

1

Você pode colocá-lo em qualquer lugar. / usr / bin é um local padrão para o servidor; / var / www é um local padrão para o conteúdo do site ou CGI.

Um serviço bem escrito será iniciado como raiz, vinculado à porta 80 e descartará privilégios para um usuário com menos privilégios ou para ninguém. É assim que usa uma porta privilegiada. Se ele usar certificados SSL, ele também deverá lê-los como root e, em seguida, descartar privilégios. Você deve, portanto, iniciá-lo como root.

O webroot (geralmente / var / www) precisa ter lido + executar disponível para qualquer usuário para o qual seu daemon descarte privilégios. World-readable e world-execute raramente é uma má ideia para as coisas que você está servindo na web de qualquer maneira.

Você pode iniciá-lo automaticamente com um script de inicialização. Existe um daemon de chamada C () (pelo menos no GNU C) que faz com que o processo elimine seus terminais e ignore hups, o que significa que ele será executado depois que sua sessão ssh for fechada e tty desaparecer. Se não estiver escrito assim, você pode sufixar o comando com um e comercial (&) para que ele seja executado em segundo plano, e ele persistirá após o seu shell morrer.

    
por 03.07.2012 / 05:38
1

Eu usei o upstart do Ubuntu para fazer isso.

  1. Crie /etc/init/mysite.conf (como root)
  2. Adicionar descrição do serviço (trabalho):

    chdir /home/john/webapps/mysite
    exec /home/john/webapps/mysite/bin/snap-app -p 80
    
  3. Verifique se está sendo executado e inicie-o manualmente se for necessário:

    initctl list | grep mysite
    initctl start mysite
    

Note que aqui eu usei a diretiva chdir do upstart para dizer a ele para executar um processo a partir desse diretório. Isso é necessário porque esse diretório contém todos os modelos necessários (html, etc.) para o binário (que está na pasta bin ).

O projeto pertence ao usuário john , então acho que está tudo bem.

    
por 03.07.2012 / 06:08
-1

Eu também uso um servidor de snap no Ubuntu 12.04 e uma solução simples, não sei se "melhor", pode estar configurando um cron job como este.

sudo crontab -e

sudo se você realmente quiser na porta 80 e, em seguida, adicione essa linha

@reboot cd /home/path/yourapp; sudo /home/path/.cabal/bin/yourapp -p  80

Ctrl+x e yes ou y para salvá-lo (é o editor vi) e você pode reinicializar e ver. A reinicialização real é a instância de inicialização. Agora, se você não parar, mude o cron job ou desligue o computador, isto irá rodar na porta 80.

Também pode funcionar com o exec do projeto, mas isso é testado.

A versão Upstart também funciona, mas é simples.

    
por 14.02.2013 / 23:31