Como Habilitar C++ no Apache no Gentoo

Sem usar framework! O CGI para Web é a base de como tudo funciona na vida real.


Como Habilitar C++ no Apache no Gentoo


A maioria dos servidores locais que rodamos para desenvolvimento de uma aplicação nada mais é do que um protótipo para aquilo que realmente irá funcionar.

No Curso de C++ Moderno Avançado nós mostramos como fazer isso no Mint que também serve para Ubuntu, Debian e sistemas relacionados, e como um pouco mais de esforço você consegue fazer isso no Windows se baseando na instalação do Apache que você pode entender e saber como funciona nesse artigo.

Você também pode seguir esse tutorial e substituir tudo que houver no tutorial de .sh por .cpp que, com certeza, irá funcionar tranquilamente.

No Gentoo é o mesmo processo só que com caminhos e ferramentas de adição diferente, vamos ver como fazer!


Habilitando o Apache para interpretar binários criados pelo C++

Antes de mais nada. lógico, você precisa do Apache instalado:

emerge apache

Atualmente, por padrão, o Apache no Gentoo já possui suporte para CGI, logo não precisa adicionar flags ao make.conf(~APACHE2_MODULES=”cgi”~). Então, só basta editar os seguintes arquivos:

01. Descomentar a linha do CGI

Outra coisa que funciona também como padrão é a linha LoadModule cgi_module modules/mod_cgi.so no arquivo: /etc/apache2/httpd.conf, ou seja, não precisa fazer nada, mas é bom sempre dar aquela conferida pra ver se realmente está descomentada.

No entanto, abra o arquivo:

sudo vim /etc/apache2/modules.d/00_mod_mime.conf

E descomente a linha: AddHandler cgi-script. Vai estar assim:

#AddHandler cgi-script .cgi

Deixe assim:

AddHandler cgi-script .cgi

Se quiser que o Apache também rode URLs com extensão .cpp(por padrão ele só lê .html e pra quem tem o PHP instalado, lê também .php), adicione-o ao final da linha, assim:

AddHandler cgi-script .cgi .cpp

Pode até adicionar mais extensões aí, caso seja do seu interesse, ex.: .cc, .c, .hpp, .h, …


02. Habilite o suporte para CGI para o Apache

Abra o arquivo:

sudo vim /etc/conf.d/apache2

Procure a linha que tem a variável APACHE2_OPTS e ela está mais ou menos assim:

APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST"

Adicione o suporte para CGI inserindo um -D CGI ao final:

APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D CGI"

Se quiser, adicione também o -D CPP ao final, igual se faz quando instala o PHP(-D PHP), deixando assim:

APACHE2_OPTS="-D DEFAULT_VHOST -D INFO -D SSL -D SSL_DEFAULT_VHOST -D CGI -D CPP"

No caso do PHP isso é obrigatório, mas pra C++ essa parte é opcional!


03. Restart o servidor Apache

Use o seu gerenciador de inicialização para restartar o Apache. No meu caso eu uso OpenRC:

sudo rc-service apache2 restart

Se você usa SystemD use o comando correspondente para reiniciar o Apache!


04. Alterar permissões e criar o diretório padrão para códigos C++

Antes de mais nada é interessante permitir criar e ler arquivos em CGI, para isso atribua as seguintes permissões:

sudo chown -R $USER:$USER /var/www/localhost

Agora crie o diretório cgi-bin:

Lembrando que o Gentoo separa o localhost/htdocs, ou seja, os arquivos públicos ficam em htdocs e os arquivos backend ficam em localhost/cgi-bin.

Geralmente o próprio Apache cria esse diretório, se já houver, é recomendado também alterar o dono desse diretório pra você conseguir criar e editar arquivos sem precisar de usar sudo ou root, mas se não houver, crie o diretório:

cd /var/www/localhost
mkdir cgi-bin

Se já existir não esqueça de se tornar dono dele: sudo chown -R $USER:$USER /var/www/localhost/cgi-bin.

Em sistemas baseados em APT(Debian, Ubuntu, Mint,…) esse diretório fica em /usr/lib/cgi-bin.


05. Testando C++ na Web

Agora vamos criar um arquivo dentro do diretório localhost/cgi-bin:

cd /var/www/localhost/cgi-bin
vim main.cpp

E use o seguinte código de exemplo:

Atenção para os dois /n/n em Content-Type, eles são fundamentais para evitar o erro do Apache de interpretação de código: Internal Server Error.

#include <iostream>

int main(int argc, char **argv){
  std::cout << "Content-Type: text/html\n\n";
  std::cout << "<h1>C++ rodando de boa na Web!</h1>" << '\n';
  return 0;
}

Compile normalmente:

g++ main.cpp -o index.html

Se tiver habilitando o AddHandler para .cpp também, pode salvar como index.cpp ou até mesmo sem extensão!

Agora é só acessar o entendeço: http://localhost/cgi-bin/ ou http://localhost/cgi-bin/index.cpp(se você habilitou e salvou como index.cpp)

C++ rodando no Apache Web Server

Se quiser que o Apache interprete o index.cpp sem precisar indicar o arquivo na URL edite o arquivo: /etc/apache2/modules.d/00_default_settings.conf:

sudo vim /etc/apache2/modules.d/00_default_settings.conf

Procure a linha que tem o conteúdo:

<IfModule dir_module>
	DirectoryIndex index.html index.html.var
</IfModule>

E adicione o index.cpp logo após ao index.html.var deixando assim:

<IfModule dir_module>
	DirectoryIndex index.html index.html.var index.cpp
</IfModule>

E reinicie o servidor:

sudo rc-service apache2 restart

É possível fazer absolutamente tudo: GET, POST, Autenticação, Sessões, Banco de Dados, Tokens, Cookies,… com C++ no Apache, aliás, muitos sites famosos que você acessa usa C++ na Web!

Aprenda Gentoo

Aprenda C++

Para mais informações acesse o links:


web cpp apache desenvolvimentoweb


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

Desenvolvedor de software
https://github.com/terroo

Artigos Relacionados




Crie Aplicativos Gráficos para Linux e Windows com C++

Aprenda C++ Moderno e crie Games, Programas CLI, GUI e TUI de forma fácil.

Saiba Mais

Receba as novidades no seu e-mail!

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!