Cyber Monday

ATÉ 40% OFF

TÁ ACABANDO!

0 dias

0 horas

0 min

0 seg

2
respostas

Linux: Servidor Web!

Ola pessoal. Tudo bem?
Resolvi dar uma aprimorada no conteudo do curso para os entusiastas de plantão.
Se voce chegou até aqui com certeza já sabe o que é um servidor web e seu objetivo principal.
Nas aulas foi utilizado o apache2 mas tambem há outras alternativas.
Resumindo o que queremos é nossa pagina web locada em um servidor para que possamos acessar pelo ip.
A seguir vou mostrar algumas etapas de como fazer isso:
Objetivo:
Rodar um projeto em Node.js ou Python (Flask) no Ubuntu Server, usando Apache como proxy reverso para servir o app na web com domínio ou IP.
Atualize seu servidor:

sudo apt update && sudo apt upgrade -y

Instale o Apache

sudo apt install apache2 -y

Habilite o módulo de proxy:

sudo a2enmod proxy proxy_http
sudo systemctl restart apache2

Teste se o Apache está ok:

curl http://localhost

Ou acesse no navegador: http://meu_ip
Instale Node.js (caso vá usar)

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs

Instale Python (caso vá usar Flask ou FastAPI)
Python já vem por padrão no Ubuntu, mas instale o venv:

sudo apt install python3-venv -y

Criar app simples com node

mkdir -p ~/meuapp-node
cd ~/meuapp-node

Crie index.js com:

const http = require('http');
const server = http.createServer((req, res) => {
  res.end('Olá, mundo do Node.js!');
});
server.listen(3000, () => {
  console.log('Servidor rodando na porta 3000');
});

Inicie o app:

node index.js

Teste:

curl http://localhost:3000

Criar app Flask simples com python

mkdir -p ~/meuapp-flask
cd ~/meuapp-flask
python3 -m venv venv
source venv/bin/activate
pip install flask

Crie app.py:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Olá, mundo do Flask!"

app.run(host='0.0.0.0', port=3000)

Execute:

python3 app.py

Teste:

curl http://localhost:3000

Configurar Apache como Proxy Reverso
Criar um Virtual Host

sudo nano /etc/apache2/sites-available/meuapp.conf

Conteúdo:

<VirtualHost *:80>
    ServerName meuapp.local
    ProxyPreserveHost On
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/
</VirtualHost>

Ativar site:

sudo a2ensite meuapp.conf
sudo systemctl reload apache2

Se for testar local:

echo "127.0.0.1 meuapp.local" | sudo tee -a /etc/hosts

Acesse: http://meuapp.local/
Dicas e Boas Práticas
Use PM2 para manter o app Node.js ativo:

sudo npm install -g pm2
pm2 start index.js
pm2 startup
pm2 save

Para Flask, use Gunicorn:

pip install gunicorn
gunicorn -w 4 app:app --bind 0.0.0.0:3000

Pode usar HTTPS com Certbot:

sudo apt install python3-certbot-apache -y
sudo certbot --apache

Com isso temos nosso app rodando em um servidor web.
continua...

2 respostas

Lembrando que podemos automatizar este processo utilizando um script.sh:
Na raiz do ubuntu crie um arquivo script.sh

sudo mkdir script.sh

Dê as permissões necessarias:

chmod +x script.sh

Cole o script abaixo no seu arquivo:

#!/bin/bash

echo " Iniciando configuração do servidor web..."

# Escolha da linguagem
echo "Qual tipo de app você quer rodar? [node|flask]"
read APP_TYPE

# Atualizar sistema
apt update && apt upgrade -y

# Instalar Apache + módulos necessários
echo " Instalando Apache e habilitando proxy..."
apt install -y apache2 curl
a2enmod proxy proxy_http
systemctl restart apache2

# Criar diretório da aplicação
mkdir -p /var/www/meuapp
cd /var/www/meuapp

if [ "$APP_TYPE" = "node" ]; then
  echo " Instalando Node.js..."
  curl -fsSL https://deb.nodesource.com/setup_18.x | bash -
  apt install -y nodejs

  # Criar app Node.js simples
  echo " Criando app Node.js..."
  cat <<EOF > index.js
const http = require('http');
const server = http.createServer((req, res) => {
 res.end('Olá, mundo do Node.js!');
});
server.listen(3000, () => {
 console.log('Servidor rodando na porta 3000');
});
EOF

  # Instalar PM2 e iniciar app
  npm install -g pm2
  pm2 start index.js --name meuapp
  pm2 startup systemd -u $USER --hp /home/$USER
  pm2 save

elif [ "$APP_TYPE" = "flask" ]; then
  echo " Instalando Python + Flask..."
  apt install -y python3 python3-pip python3-venv

  # Criar ambiente virtual e app Flask
  python3 -m venv venv
  source venv/bin/activate
  pip install flask gunicorn

  echo "Criando app Flask..."
  cat <<EOF > app.py
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
  return "Olá, mundo do Flask!"

if __name__ == "__main__":
  app.run(host="0.0.0.0", port=3000)
EOF

  # Iniciar com gunicorn
  gunicorn -w 2 app:app --bind 0.0.0.0:3000 &

else
  echo "Tipo de app inválido. Use 'node' ou 'flask'."
  exit 1
fi

# Configurar Apache como proxy reverso
echo "Configurando Apache como proxy reverso..."
cat <<EOF > /etc/apache2/sites-available/meuapp.conf
<VirtualHost *:80>
  ServerName meuapp.local
  ProxyPreserveHost On
  ProxyPass / http://localhost:3000/
  ProxyPassReverse / http://localhost:3000/
</VirtualHost>
EOF

a2ensite meuapp.conf
systemctl reload apache2

# Adicionar entrada ao /etc/hosts para uso local
echo "127.0.0.1 meuapp.local" >> /etc/hosts

echo "Tudo pronto!"
echo "Acesse: http://meuapp.local"

Isso é apenas a ponta do Iceberg e temos muito para aprender. Testa ai e avise.
Qualquer duvida ou sugestão comenta ai.
Obrigado.

Oi, Ronaldo! Como vai?

Agradeço por compartilhar.

Gostei do conteúdo que você trouxe, explicando o fluxo completo para rodar apps em Node ou Flask com Apache como proxy reverso. Com base no que você explicou, ficou claro que a ideia é mostrar alternativas além do básico do curso, dando mais contexto para quem quer praticar no servidor.

Continue contribuindo assim, seus detalhes ajudam bastante quem está avançando no DevOps.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!