Pure Bash Lightweight Web Server.
Solução fácil para configurar um site local sem nenhuma configuração do servidor !!!
Isso é inspirado no Bashttpd. No entanto, o comportamento é totalmente diferente. Veja abaixo para obter mais informações.
Apresentação
Como usar
Como usar (especialista)
Exemplo
Sobre segurança
Por que Sherver?
Licença?
Apenas clone e execute ./sherver.sh . Em seguida, você poderá se conectar ao host local: 8080. Você pode passar a porta para ouvir como um parâmetro: ./sherver.sh 8080 (o padrão é 8080 ).
Isso é feito para correr com Bash . Pode não funcionar em outra concha. As ferramentas a seguir precisam estar presentes no sistema (observe que todas fazem parte da instalação padrão do Debian):
envsubst se você quiser fazer modelossocat para executar o servidor.netcat , mas não funciona bem com solicitações HTTP simultâneasSherver é um servidor da Web que implementa parte do HTTP 1.0. Mesmo que esteja escrito em algumas linhas de festa, é capaz de fazer muito:
scripts ou em pastas filestdoutTudo isso faz do Sherver a ferramenta perfeita para executar um pequeno servidor que sirva algumas páginas na sua rede local.
Mesmo que pareça incrível, Sherver ainda tem as seguintes limitações:
É por isso que Sherver deve permanecer em um ambiente privado e controlado. Não exponha o Sherver na Internet !!! Se você deseja expor seu site na Internet, use uma ferramenta que saiba sobre segurança e simultaneidade (como Nginx ou outro).
Sempre corra Sherver atrás de um firewall que impeça qualquer invasão de fora .
Documentação rápida sobre como usar o Sherver para seu próprio uso. Todas as variáveis e funções mencionadas aqui têm uma descrição completa no scripts/readme.md.
A coisa mais simples que você pode fazer é servir páginas estáticas: arquivos HTML puros que não precisam de processamento.
Para fazer isso, você só precisa colocar seus arquivos HTML no arquivo/páginas do subdiretório. Em seguida, você pode acessar suas páginas através de um URL como /file/pages/index.html (se o nome do seu arquivo for index.html , por exemplo).
Observe que você terá que dar o nome completo do arquivo no URL para que o Sherver possa encontrá -lo.
É tão simples assim! Se o Sherver puder encontrar o arquivo, ele servirá. Caso contrário, ele retornará um erro 404.
Você pode servir qualquer tipo de arquivo do Sherver. De texto baseado em texto, como CSS ou JavaScript a binários, como imagens, vídeos, zip ...
Basta colocar os arquivos no arquivo de subdiretório. Você pode fazer referência a eles através de um URL como /file/venise.webp . Observe que é preferível dar um caminho completo em vez de caminhos relativos.
O Sherver servirá automaticamente o arquivo se conseguir encontrá -lo, com o tipo MIME correto. Ele até permitirá que o navegador cache o arquivo e só o servirá novamente se o arquivo tiver alterado. Se o Sherver não conseguir encontrar o arquivo, ele retornará um erro 404.
Para recursos, como CSS, JavaScript, Favicon ... é melhor colocá -los no arquivo/recursos da subpasta, embora você não precise.
Exemplo de como vincular um arquivo CSS:
< link rel =" stylesheet " type =" text/css " href =" /file/resources/ugly.css " >Exemplo de como integrar uma imagem em seu HTML:
< img src =" /file/venise.webp " alt ="" >É aqui que o Sherver se torna útil: pode servir páginas dinâmicas, o lado do servidor construído, dependendo do contexto.
Para fazer isso, você só precisa adicionar executáveis nos scripts da subpasta. Os executáveis podem ser de qualquer tipo (script Bash, script python, quaisquer outros scripts, qualquer binário como C ++ compilado executável ...) assim que o Sherver puder executá -lo (ele deve ter o conjunto de sinalizadores executable ).
Assim que você tiver um executável lá, o Sherver o executará e servirá sua saída. Observe que index.sh é um nome específico, pois é o que será executado pelo despachante se você acessar a raiz do site (consulte a seção Dispatcher abaixo). Se o Sherver não puder executar nenhum arquivo, ele retornará um erro 404. Se o executável falhar (o código de retorno não for 0 ), ele retornará um erro 500.
Para vincular um executável, você deve omitir os scripts da pasta no url: /page.sh procurará o executável ./scripts/page.sh .
O executável é executado da pasta scripts .
Bash scripts
Sherver é feito principalmente para trabalhar com scripts de bash. Se você criar um script bash, a primeira coisa que você deve fazer é executar a função init_environment . Então você terá acesso a todas as seguintes variáveis:
REQUEST_FULL_STRINGREQUEST_METHODREQUEST_URLREQUEST_HEADERSREQUEST_BODYURL_BASEURL_PARAMETERSDATERESPONSE_HEADERSHTTP_RESPONSEE também muitas funções úteis como:
add_headersend_responsesend_filesend_error Verifique toda a documentação sobre a biblioteca SHERVER_UTILS.sh em scripts/readme.md.
Tudo escrito na saída padrão será enviado ao cliente. Aqui está um script muito simples que retorna as solicitações em um formato de texto:
#! /bin/bash
init_environment
if [ " $REQUEST_METHOD " != ' GET ' ] ; then
send_error 405
fi
add_header ' Content-Type ' ' text/plain '
send_response 200 " $REQUEST_FULL_STRING "Quaisquer outros scripts ou binários
Se você não usar o Bash, só terá acesso à variável de ambiente REQUEST_FULL_STRING que contém a solicitação completa como uma string. O URL solicitado ( REQUEST_URL ) será aprovado como primeiro argumento.
Tudo escrito na saída Standt será enviado ao cliente. No entanto, você deve escrever os cabeçalhos da resposta.
Para scripts bash, existe um modelo básico de modelo integrado ao Sherver (LOL). Na verdade, ele usa envsubst para substituir qualquer ocorrência de $VARIABLE pela variável do ambiente, se houver.
Você pode colocar seus modelos nos scripts/modelos da subpasta, embora não seja obrigatório.
Aqui está um modelo para um template.txt de arquivo de texto.
You entered the following request:
$REQUEST
E você o usaria com o seguinte script:
#! /bin/bash
init_environment
if [ " $REQUEST_METHOD " != ' GET ' ] ; then
send_error 405
fi
REQUEST= " $REQUEST_FULL_STRING "
# put REQUEST in the environment so we can use it in our template
export REQUEST
# load the template
response= $( envsubst < ' templates/template.txt ' )
add_header ' Content-Type ' ' text/plain '
send_response 200 " $response "Exemplo HTML completo no exemplo abaixo.
As solicitações de postagem são suportadas. Você pode verificar o valor da variável REQUEST_METHOD que será GET ou POST , para que você possa ter um comportamento diferente com base no tipo de solicitação.
O conteúdo da solicitação de postagem pode ser retomado na variável REQUEST_BODY . Se os dados forem codificados pelo cliente, você poderá usar a função parse_url com alguns truques para obter uma matriz associativa dos parâmetros.
Qualquer conteúdo pode ser enviado de volta ao cliente. Você pode adicionar o tipo MIME correto graças ao método add_header .
Todas as variáveis e funções mencionadas aqui têm uma descrição completa no scripts/readme.md.
Qualquer coisa gravada no erro padrão pode ser registrada. Para facilitar os logs, você pode usar o log de funções.
Para manter os logs em um arquivo, você pode redirecionar a saída de erro do sherver.sh em um arquivo:
./sherver.sh 2> logs.txtPor padrão, os cabeçalhos das solicitações e das respostas são registrados, mas não os corpos.
O despachante é responsável por pedir para servir um arquivo ou executar um script, dependendo do UTL solicitado. Ele é implementado no despachante de arquivo.sh.
Atualmente tem 4 ações:
/ ), ele executa os scripts scripts/index.shindex.htm ou index.html , ele executará os scripts scripts/index.sh/file/ , serve o arquivo solicitado/test/dummy.sh executará os scripts scripts/test/dummy.sh se houver).Todos esses comportamentos podem ser alterados editando o despachante de arquivo.sh.
Primeiro de tudo, você precisa criar um usuário específico que executará sherver.sh com baixos privilégios. Vamos ligar para o nosso usuário sherver e colocaremos o site inteiro em seu diretório Hone.
Precisamos adicionar nosso usuário aos grupos sudo e netdev , para que ele possa gerenciar a VPN (obviamente não é uma boa ideia dar sudo ao usuário, é por isso que você não deve expor o site na Internet).
useradd -mUG sudo,netdev -s /usr/bin/bash sherver
passwd sherver
... Observe que você pode adicionar seu usuário atual ao grupo sherver por razões práticas (você terá que se lançar para torná -lo eficaz):
adduser USER sherverAgora, vamos colocar o site em seu diretório doméstico
su sherver
cd ~
git clone https://github.com/remileduc/sherver.git
cd sherver
git checkout perso Por fim, precisamos ativar o serviço para que ele inicie sherver.sh automaticamente. Para fazer isso, copie o arquivo sherver.service em /usr/share/systemd/ e ative o serviço:
cp sherver.service /usr/share/systemd/
ln -s /usr/share/systemd/sherver.service /etc/systemd/system/sherver.service
systemctl daemon-reload
systemctl enable sherver.serviceVocê pode ver como exemplo os scripts que eu uso em casa para gerenciar minha VPN. É acessível na filial Perso. Observe que você precisa do script vpn-mgr.sh para poder usá-lo corretamente.
Veja Bashttpd. É óbvio dizer que isso vem sem nenhum recurso de segurança. Não exponha o Sherver na Internet .
Se você precisar expor o site na Internet, precisará de um servidor real que tenha sido criado especialmente para enfrentar todos esses problemas.
No entanto, é perfeito para usar em uma rede local. Será tão seguro quanto sua conexão Wi -Fi e seu firewall.
Eu queria configurar rapidamente um servidor que serviria páginas dinâmicas, e que pudesse executar alguns scripts de bash, a fim de controlar meu centro de mídia através de páginas da web.
Eu não queria instalar e configurar o apache ou nginx. Na verdade, eu não queria nenhuma configuração.
Sherver é capaz de executar sem nenhuma configuração. Você só precisa adicionar arquivos no lugar certo. Ele pode ser executado sem nada a ser instalado (todas as ferramentas usadas fazem parte da instalação padrão do Debian, exceto talvez para o SOCAT).
Você pode ver meu caso de uso no perso Branche.
Tudo está sob licença do MIT.
Usamos o script mimetype , enviado em scripts/utils/mimetype, que está sob licença PERL.