Este projeto é uma aplicação web simples que exibe uma mensagem de fortuna ao usuário ao clicar em um botão. A aplicação é composta por um backend em Rust que acessa a API externa https://api.adviceslip.com/advice para obter as mensagens de fortuna, e um frontend em Nginx que serve uma página estática. Os contêineres são gerenciados utilizando o Podman.
- Estrutura do Projeto
- Pré-requisitos
- Instruções de Configuração
- Construindo as Imagens Docker
- Executando a Aplicação
- Verificando os Logs
- Licença
.
├── backend
│ ├── Cargo.lock
│ ├── Cargo.toml
│ ├── Dockerfile
│ └── src
│ └── main.rs
├── fortune_logs
│ ├── backend
│ │ └── fortune_backend.log
│ └── frontend
│ ├── access.log
│ └── error.log
└── frontend
├── Dockerfile
├── index.html
└── nginx.conf
- backend/: Código-fonte e Dockerfile do backend em Rust.
- frontend/: Arquivos estáticos e Dockerfile do frontend em Nginx.
- fortune_logs/: Diretório para armazenar os logs do backend e frontend.
Certifique-se de ter as seguintes ferramentas instaladas em seu sistema:
- Podman
- Rust (caso queira compilar o backend localmente)
- Docker (opcional, se preferir usar Docker em vez de Podman)
Clone o repositório do projeto para o seu ambiente local:
git clone https://github.com/seu-usuario/fortune-cookie.git
cd fortune-cookie
Nota: Substitua seu-usuario
pelo nome de usuário correto, se aplicável.
-
Navegue até o diretório do backend:
cd backend
-
Revise o arquivo
Cargo.toml
e as dependências do projeto. -
O arquivo
main.rs
contém o código-fonte do servidor em Rust que fornece as mensagens de fortuna através de uma API REST. -
API Externa: O backend em Rust acessa a API https://api.adviceslip.com/advice para obter as mensagens de fortuna dinamicamente.
-
Navegue até o diretório do frontend:
cd ../frontend
-
O arquivo
index.html
contém a página web que será servida pelo Nginx. -
O arquivo
nginx.conf
é a configuração personalizada do Nginx para servir o frontend.
Antes de executar a aplicação, é necessário construir as imagens Docker para o backend e o frontend.
-
Navegue até o diretório do backend:
cd ../backend
-
Construa a imagem Docker:
podman build -t localhost/fortune-backend:latest .
-
Navegue até o diretório do frontend:
cd ../frontend
-
Construa a imagem Docker:
podman build -t localhost/fortune-frontend:latest .
Utilizaremos o Podman para criar um pod que conterá ambos os contêineres do backend e do frontend.
Crie os diretórios para armazenar os logs do backend e do frontend:
mkdir -p fortune_logs/backend
mkdir -p fortune_logs/frontend
Crie o pod chamado fortune-pod
mapeando as portas necessárias:
podman pod create --name fortune-pod -p 8000:80 -p 8080:8080
Execute o contêiner do backend com o volume para persistência dos logs:
podman run -d \
--name backend \
--pod fortune-pod \
-v $(pwd)/fortune_logs/backend:/var/log/fortune_backend:Z \
-e API_URL=https://api.adviceslip.com/advice \
localhost/fortune-backend:latest
Explicação:
-v $(pwd)/fortune_logs/backend:/var/log/fortune_backend:Z
monta o diretório de logs do backend do host no contêiner.-e API_URL=https://api.adviceslip.com/advice
define a variável de ambienteAPI_URL
com a URL da API externa.
Execute o contêiner do frontend com o volume para persistência dos logs:
podman run -d \
--name frontend \
--pod fortune-pod \
-v $(pwd)/fortune_logs/frontend:/var/log/nginx:Z \
localhost/fortune-frontend:latest
Explicação:
-v $(pwd)/fortune_logs/frontend:/var/log/nginx:Z
monta o diretório de logs do frontend do host no contêiner.
Abra o navegador e acesse:
http://localhost:8000
Clique no botão "Get Your Fortune" para receber uma mensagem de fortuna.
Os logs do backend são armazenados em fortune_logs/backend
.
Verifique os logs:
ls fortune_logs/backend
cat fortune_logs/backend/fortune_backend.log
Os logs do frontend são armazenados em fortune_logs/frontend
.
Verifique os logs:
ls fortune_logs/frontend
cat fortune_logs/frontend/access.log
cat fortune_logs/frontend/error.log
Este projeto é licenciado sob os termos da licença Apache 2.0. Veja o arquivo LICENSE para mais detalhes.
Nota: Certifique-se de ter o Podman devidamente configurado em seu sistema. Os comandos fornecidos utilizam o Podman, mas podem ser adaptados para o Docker com pequenas modificações.
Se você encontrar algum problema ou tiver dúvidas, sinta-se à vontade para abrir uma issue no repositório do projeto.