Como Rodar Shell Script e Python via Apache no Linux
Crie Sistemas Web com Shell Script ou Python de maneira rápida e prática.
O tutorial de hoje vamos configurar o Apache para rodar Shell Script e Python como exemplos, mas você pode testar em qualquer linguagem de programação de seu interesse. Também vamos usar de cobaia o Arch Linux, mas com mínimas adaptações é o mesmo procedimento pra qualquer Linux ou BSD, e até mesmo qualquer sistema baseado em UNIX.
Let’s go! ✌
1º - Atualize todo o sistema de maneira efetiva com os dois comandos abaixo
2º - Instale o Apache
3º - Habilite o Apache para iniciar junto com o sistema e também start para já poder usá-lo:
Por padrão o conteúdo que acessa pelo localhost está no endereço /srv/http/ lá após instalação não haverá nada, então crie um arquivo index.html e insira um conteúdo nele para poder visualizar, use um editor de texto ou com o comando abaixo:
Lembre-se que dentro deste diretório precisa ser root ou sudo , não tente sudo echo
Agora abra o navegador e acesse o endereço: http://localhost/ , você verá o conteúdo que você escreveu.
Usando um diretório alternativo sem precisa de root ou sudo
Os diretórios de usuários estão disponíveis por padrão através de http://localhost/~usuario/ e mostram o conteúdo de ~/public_html
Note que há o sinal til (~) na URL, logo digite ela também antes do seu nome de usuário, caso contrário haverá erro 404, exemplo:
Mas para criar uma visualização customizada é necessário criar o diretório, alterar as permissões e criar um arquivo html:
O Apache possui opções e diretivas<Directory ..i> para determinar suas configurações.
O arquivo de configuração principal é /etc/httpd/conf/httpd.conf , que inclui vários outros arquivos de configuração. Ao abrir ele verifique que as linhas que estão descomentadas(sem começar com tralha #), quer dizer que já estão pré-configuradas pra você, vejamos alguns exemplos:
ServerRoot “/etc/httpd” - Diretório raíz do Apache onde ficam os arquivos de configuração /etc/httpd/conf/ e os módulos /etc/httpd/modules/
Listen 80 - Porta que o servidor irá exibir as páginas na Web via http, se quiser que fique acessível só pra seu computador e ninguém consiga acessar externamente altere para Listen 127.0.0.1:80
ServerAdmin you@example.com - Este é o endereço de e-mail do administrador, que pode ser encontrado, por exemplo, em páginas de erro. Se quiser altere para o que você deseja.
DocumentRoot “/srv/http” - Este é o diretório onde você deve colocar suas páginas da web. Você pode alterá-lo, mas não se esqueça de também alterar <Directory "/srv/http"> para o que você mudou seu DocumentRoot , ou você provavelmente vai ter um erro 403 (falta de privilégios) quando você tenta acessar a nova raiz do documento. Não se esqueça de alterar a linha Require all denied para Require all granted , caso contrário, você receberá um erro 403 . Lembre-se de que o diretório DocumentRoot e suas pastas pai devem permitir permissão de execução para outros (pode ser configurado com chmod o+x /path/to/DocumentRoot ), caso contrário você obterá um erro 403 .
AllowOverride None - Esta diretiva nas seções <Directory> faz com que o Apache ignore completamente os arquivos .htaccess . Observe que esse é o padrão do Apache 2.4, portanto, é necessário permitir explicitamente substituições se você planeja usar arquivos .htaccess . Se você pretende usar mod_rewrite ou outras configurações em arquivos .htaccess , pode permitir quais diretivas declaradas nesse arquivo podem substituir a configuração do servidor.
ServerSignature Off - Para ocultar informações do servidor, como as versões do Apache, linguagem, sistema operacional…
Include conf/extra/httpd-userdir.conf - Se você não quiser que os diretórios dos usuários estejam disponíveis na web, comente essa linha. Ou se quiser alterar o nome e/ou localização do mesmo, edite o arquivo: /etc/httpd/conf/extra/httpd-userdir.conf.
Entre outras opções e diretivas que podem ser vistas no próprio arquivo.
Habilitando Shell Web cgi
Introdução
O CGI (Common Gateway Interface) define uma maneira de um servidor da Web interagir com programas geradores de conteúdo externos, que são geralmente chamados de programas CGI ou scripts CGI. É uma maneira simples de colocar conteúdo dinâmico em seu site, usando qualquer linguagem de programação com a qual você esteja mais familiarizado.
1º - Procure no arquivo de configuração do Apache /etc/httpd/conf/httpd.conf a linha que possui esse conteúdo LoadModule cgid_module modules/mod_cgid.so ou algo parecido, use um editor de texto (por exemplo, no Vim/LoadModule cgid_module.* ) ou se quiser procurar diretamente pelo terminal, rode: egrep 'LoadModule cgid_module modules.*' /etc/httpd/conf/httpd.conf . Verifique que ela estará comentada (com uma tralha# na frente) , mais ou menos assim: #LoadModule cgid_module modules/mod_cgid.so , tire a tralha da frente e deixe mais ou menos assim: LoadModule cgid_module modules/mod_cgid.so
2º - Próximo passo é verificar se a linha correspondente ao ScriptAlias está descomentada, procure a linha ScriptAlias /cgi-bin/ "/srv/http/cgi-bin/", geralmente ela já está descomentada e pronta pra uso e também pode ser que ela esteja apontando para outro diretório, lembre-se desse diretório, pois é lá que você guardará seus scripts. Isso quer dizer que você vai guardar no diretório /srv/http/cgi-bin/ , mas acessará o conteúdo pelo endereço: http://localhost/cgi-bin/ . Se o diretório não existir, crie: sudo chmod -p /srv/http/cgi-bin/ .
3º - Permitir a execução de CGI utilizando a diretiva Options . Encontre as tags mais ou menos iguais a essa abaixo, na sua distro pode ser que esteja com o caminho diferente, mas esse exemplo é no Arch Linux, mas serve pra qualquer distro:
Altere e insira a linha Options +ExecCGI antes de AllowOverride None, ficando assim:
Não esqueça de ir salvando o arquivo a cada alteração correta feita.
4º - O quarto passo é adicionar a diretiva AddHandler as extensões de arquivo que você deseja que ele aceite, encontre a linha que tem a palavra Addhandler e altere como deseja, por exemplo, ela vai estar mais ou menos assim:
Essa palavra pode ser encontrada em outros lugares do arquivo, mas a única linha que não possui tralha# na frente, é justamente a que você deve alterar.
Vamos supôr que você vai querer rodar no seu servidor extensões Shell Script .sh , Python .py e Perl .pl , então deixe ela assim:
Além, lógico, dos arquivo com extensão .cgi que provavelmente haverá qualquer linguagem de programação, e quem irá identificar é SheBang#!/bin/linguagem que estará no arquivo.
5º - Criando um arquivo de teste para verificarmos se já está tudo ok, exemplo para shell script:
Dentro do arquivo coloque esse conteúdo:
Obs.: Respeite a linha em branco logo abaixo da shebang um echo vazio logo abaixo de echo "content-type: text/html" também precisa ser respeitado, caso contrário haverá erro exibido pelo apache.
Arquivo exemplo:
Exemplo Python:
6º - Dando as permissões necessárias para o Apache ler o navegador ler o arquivo e o diretório :
O Apache usa um programinha chamado suexec que serve pra gerar problemas de permissão ☹ . Verifique ele está habilitado e carregado com o Apache, use o comando: apachectl -V se na saída houver a uma linha com o conteúdo: -D SUEXEC_BIN=”/usr/bin/suexec” , tente renomear ele e reiniciar o Apache e depois verifique se agora funcionou a exibição via browser:
Se aparecer mensagens como: Proibido, POST Method Not Allowed,… Verifique os logs de erro lá em /var/log/apache_ou_http/ .
Problemas com caracteres em Hexadecimais em requições POST ou GET ? Haha, aí é seu programinha que irá resolver, esse não é um problema do Apache, no entanto, existem alguns módulos que podem lhe ajudar, mas vai por mim, é melhor você mexer a cuca e tentar resolver com sua linguagem de programação! ☻
Dicas adicionais
Se quiser que o Apache leia seus index.sh, index.py,… encontre a palavra index.html e ao lado dela inclua os indexes que deseja, exemplo:
Após cadastro e confirmação do e-mail, enviaremos semanalmente resumos e também sempre que houver novidades por aqui para que você mantenha-se atualizado!