Como Rodar o Crow C++ com Apache

🐦‍⬛ Passo a passo no Arch e Ubuntu e dica para Windows.


Como Rodar o Crow C++ com Apache


Neste artigo, vamos mostrar como integrar o Crow com o servidor Apache, permitindo rodar aplicações C++ com suporte a HTTP, proxy reverso e configuração em produção.


📦 Dependências

Antes é necessário, lógico, possuir o Crow C++ instalado no seu sistema, para isso, instale as dependências:

No Windows

Veja aqui: Como Instalar o Crow C++ no Windows, é mais interessante rodar sem ser no Apache usando diretamente com o servidor do Crow rodando o binário!

No Ubuntu:

sudo apt install git build-essential cmake make libasio-dev g++

No Arch:

sudo pacman -S git base-devel cmake asio

Agora clone, compile e instale o Crow C++:

git clone https://github.com/CrowCpp/Crow
cd Crow
cmake . -B build -DCROW_BUILD_EXAMPLES=OFF -DCROW_BUILD_TESTS=OFF
sudo cmake --install build

Se quiser, já pode remover o repositório clonado: cd .. && rm -rf CrowCpp


⚙️ Rodar no Apache

Certifique-se de possuir o Apache instalado e com as devidas permissões de escrita e leitura.

  • Se resume em:
sudo apt install apache2
sudo chown -R $USER:$USER /var/www/html/
  • E no Arch:
sudo pacman -S apache
sudo chown -R $USER:$USER /srv/http

01. Crie uma pasta na raiz do seu Apache entre na mesma, exemplo

# Ubuntu
mkdir -p /var/www/html/crow
cd /var/www/html/crow

# Arch
mkdir -p /srv/http/crow
cd /srv/http/crow

02. Crie um código exemplo simples para teste:

main.cpp

#include <crow.h> // No Windows use aspas duplas

int main(){
    crow::SimpleApp app;

    CROW_ROUTE(app, "/")([](){
        return "Hello world";
    });

    app.port(18080).multithreaded().run();
}

Compile: g++ main.cpp -o app e teste: ./app e acesse no navegador: http://localhost:18080.


🏃 Rodar diretamente no Apache sem precisar rodar o binário

Use os caminhos e comandos similares no Arch.

01. Crie um arquivo para o systemd:

sudo vim /etc/systemd/system/crow-app.service, ou com seu editor preferido.

Cole isso dentro:

No Arch altere todos: /var/www/html para /srv/http e em vez de www-data use somente: http tanto para User quanto para Group

[Unit]
Description=Crow C++ Web Application
After=network.target

[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/var/www/html/crow
ExecStart=/var/www/html/crow/app
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Salve e saia.

02. Ative e inicie o serviço:

sudo systemctl daemon-reload
sudo systemctl enable crow-app
sudo systemctl start crow-app
sudo systemctl status crow-app  # para verificar se está rodando

Vai aparecer mais ou menos isso:

Crow Apache

03. Configure o Apache como Proxy Reverso

Ative os módulos necessários:

  • No Ubuntu:
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
  • No Arch: Edite o arquivo: sudo vim /etc/httpd/conf/httpd.conf e E descomente (ou adicione, se não estiver presente) as seguintes linhas:
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
LoadModule rewrite_module modules/mod_rewrite.so

E também encontre (ou adicione) a seguinte linha:

Se tiver comentada(com # tralha na frente, remova), descomente.

Include conf/extra/httpd-vhosts.conf

04. Adicione esta configuração no seu VirtualHost do Apache

  • Ubuntu: sudo vim /etc/apache2/sites-available/000-default.conf
  • e Arch: sudo vim /etc/httpd/conf/extra/httpd-vhosts.conf

Apague tudo que estiver dentro e cole isso:

No Arch altere a linha /var/www/html para /srv/http e também troque: ${APACHE_LOG_DIR} por /var/log/httpd

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    # Proxy reverso simples que remove o prefixo
    ProxyRequests Off
    ProxyPreserveHost On
    
    # Proxy para porta 18080
    ProxyPass /crow/ http://127.0.0.1:18080/
    ProxyPassReverse /crow/ http://127.0.0.1:18080/

    # Reescrever URLs para remover o prefixo /crow/
    RewriteEngine On
    RewriteRule ^/crow/(.*)$ http://127.0.0.1:18080/$1 [P,L]
    RewriteRule ^/crow/?$ http://127.0.0.1:18080/ [P,L]

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Ative o modo rewrite, reinicie o Apache e teste acessando a URL:

No Arch basta reiniciar com esse comando: sudo systemctl restart httpd.

sudo pkill -f app # Opcional se não modificou o binário
sudo a2enmod rewrite
sudo systemctl restart apache2
xdg-open http://localhost/crow/

Pronto, agora é só desenvolver suas aplicações com Crow!

Lembrando que sempre que fizer alterações no binário, é necessário restartar o binário, usando pkill:

sudo pkill -f app

No Arch prefira usar esses dois comandos abaixo:

sudo systemctl daemon-reexec # ou daemon-reload, se você não alterou o binário do systemd
sudo systemctl enable --now crow-app.service

Se quiser verificar o status: sudo systemctl status crow-app.service


desenvolvimentoweb webdev cpp crow web apache


Compartilhe


Nosso canal no Youtube

Inscreva-se


Marcos Oliveira

Marcos Oliveira

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


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!