Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Aprimoramento dos arquivos #12

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 91 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,92 @@
Docker: Utilização prática no cenário de Microsserviços
Denilson Bonatti, Instrutor - Digital Innovation One
Códigos aprimorados ;D
# Docker: Utilização prática no cenário de Microsserviços

Muito se tem falado de containers e consequentemente do Docker no ambiente de desenvolvimento. Mas qual a real função de um container no cenários de microsserviços? Qual a real função e quais exemplos práticos podem ser aplicados no dia a dia? Essas são algumas das questões que serão abordadas de forma prática pelo Expert Instructor Denilson Bonatti nesta Live Coding. IMPORTANTE: Agora nossas Live Codings acontecerão no canal oficial da dio._ no YouTube. Então, já corre lá e ative o lembrete! Pré-requisitos: Conhecimentos básicos em Linux, Docker e AWS.
## Sobre o Projeto
Este repositório é uma implementação prática de microsserviços utilizando **Docker** e **Nginx**, com integração a um banco de dados MySQL e uma aplicação PHP simples. O projeto demonstra o uso de contêineres para construir um sistema modular, escalável e fácil de gerenciar.

Este projeto é uma evolução do conteúdo apresentado por Denilson Bonatti no curso da **Digital Innovation One**, com melhorias significativas para tornar a solução mais robusta e completa.

---

## Tecnologias Utilizadas
- **Docker**: Para criar e gerenciar contêineres.
- **Nginx**: Proxy reverso e balanceamento de carga.
- **PHP**: Aplicação backend simples para manipulação de dados.
- **MySQL**: Banco de dados para armazenamento de informações.
- **Docker Compose**: Para orquestrar os serviços.

---

## Estrutura do Projeto
- **`Dockerfile`**: Configura o contêiner Nginx.
- **`nginx.conf`**: Configuração do Nginx para proxy reverso e balanceamento.
- **`index.php`**: Aplicação PHP para conexão ao banco de dados.
- **`banco.sql`**: Script para criação da tabela no banco de dados.
- **`docker-compose.yml`**: Orquestração dos serviços (Nginx, PHP e MySQL).

---

## Funcionalidades
1. **Backend PHP**:
- Conecta-se a um banco de dados MySQL.
- Insere registros automaticamente.
- Exibe os dados armazenados no banco.

2. **Nginx**:
- Realiza o balanceamento de carga entre múltiplas instâncias.
- Atua como proxy reverso para a aplicação PHP.

3. **Banco de Dados MySQL**:
- Armazena as informações criadas pelo backend.
- Fornece dados para exibição na aplicação.

---

## Configuração e Execução

### Pré-requisitos
- Docker instalado na máquina.
- Docker Compose configurado.
- Banco de dados MySQL rodando ou configurado no Docker Compose.

### Passos para executar:
1. Clone o repositório:
```bash
git clone https://github.com/seu-usuario/toshiro-shibakita.git
cd toshiro-shibakita

## 2. Tecnologias Utilizadas
- **Docker**: Para criar e gerenciar contêineres.
- **Nginx**: Proxy reverso e balanceamento de carga.
- **PHP**: Aplicação backend simples para manipulação de dados.
- **MySQL**: Banco de dados para armazenamento de informações.
- **Docker Compose**: Para orquestrar os serviços.

---

## 3. Estrutura do Projeto
- **`Dockerfile`**: Configura o contêiner Nginx.
- **`nginx.conf`**: Configuração do Nginx para proxy reverso e balanceamento.
- **`index.php`**: Aplicação PHP para conexão ao banco de dados.
- **`banco.sql`**: Script para criação da tabela no banco de dados.
- **`docker-compose.yml`**: Orquestração dos serviços (Nginx, PHP e MySQL).

---

## 4. Funcionalidades
1. **Backend PHP**:
- Conecta-se a um banco de dados MySQL.
- Insere registros automaticamente.
- Exibe os dados armazenados no banco.

2. **Nginx**:
- Realiza o balanceamento de carga entre múltiplas instâncias.
- Atua como proxy reverso para a aplicação PHP.

3. **Banco de Dados MySQL**:
- Armazena as informações criadas pelo backend.
- Fornece dados para exibição na aplicação.

---

Desenvolvido com base no projeto de Denilson Bonatti e adaptado por Bryan Khelven.
4 changes: 2 additions & 2 deletions banco.sql
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
CREATE TABLE dados (
AlunoID int,
Nome varchar(50),
AlunoID int AUTO_INCREMENT PRIMARY KEY,
Nome varchar(50) NOT NULL,
Sobrenome varchar(50),
Endereco varchar(150),
Cidade varchar(50),
Expand Down
29 changes: 29 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
version: '3.8'

services:
php:
image: php:7.4-apache
container_name: php_app
volumes:
- ./index.php:/var/www/html/index.php
ports:
- "80:80"

nginx:
build:
context: .
dockerfile: Dockerfile
container_name: nginx_proxy
ports:
- "4500:4500"
depends_on:
- php

db:
image: mysql:5.7
container_name: mysql_db
environment:
MYSQL_ROOT_PASSWORD: Senha123
MYSQL_DATABASE: meubanco
ports:
- "3306:3306"
89 changes: 47 additions & 42 deletions index.php
Original file line number Diff line number Diff line change
@@ -1,48 +1,53 @@
<html>

<head>
<title>Exemplo PHP</title>
<title>Exemplo PHP - Aprimorado</title>
</head>
<body>

<?php
ini_set("display_errors", 1);
header('Content-Type: text/html; charset=iso-8859-1');



echo 'Versao Atual do PHP: ' . phpversion() . '<br>';

$servername = "54.234.153.24";
$username = "root";
$password = "Senha123";
$database = "meubanco";

// Criar conexão


$link = new mysqli($servername, $username, $password, $database);

/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}

$valor_rand1 = rand(1, 999);
$valor_rand2 = strtoupper(substr(bin2hex(random_bytes(4)), 1));
$host_name = gethostname();


$query = "INSERT INTO dados (AlunoID, Nome, Sobrenome, Endereco, Cidade, Host) VALUES ('$valor_rand1' , '$valor_rand2', '$valor_rand2', '$valor_rand2', '$valor_rand2','$host_name')";


if ($link->query($query) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $link->error;
}

?>
<?php
ini_set("display_errors", 1);
header('Content-Type: text/html; charset=iso-8859-1');

echo '<h1>Versão Atual do PHP: ' . phpversion() . '</h1>';

$servername = "54.234.153.24";
$username = "root";
$password = "Senha123";
$database = "meubanco";

$link = new mysqli($servername, $username, $password, $database);

if (mysqli_connect_errno()) {
echo "<p style='color: red;'>Falha na conexão: " . mysqli_connect_error() . "</p>";
exit();
}

echo "<p style='color: green;'>Conexão com o banco estabelecida com sucesso!</p>";

$valor_rand1 = rand(1, 999);
$valor_rand2 = strtoupper(substr(bin2hex(random_bytes(4)), 1));
$host_name = gethostname();

$query = "INSERT INTO dados (AlunoID, Nome, Sobrenome, Endereco, Cidade, Host)
VALUES ('$valor_rand1', '$valor_rand2', '$valor_rand2', '$valor_rand2', '$valor_rand2','$host_name')";

if ($link->query($query) === TRUE) {
echo "<p style='color: green;'>Novo registro criado com sucesso.</p>";
} else {
echo "<p style='color: red;'>Erro ao inserir registro: " . $link->error . "</p>";
}

// Exibindo os dados na página
$result = $link->query("SELECT * FROM dados");
if ($result->num_rows > 0) {
echo "<h2>Dados no Banco:</h2>";
echo "<table border='1'><tr><th>ID</th><th>Nome</th><th>Sobrenome</th><th>Endereço</th><th>Cidade</th><th>Host</th></tr>";
while ($row = $result->fetch_assoc()) {
echo "<tr><td>{$row['AlunoID']}</td><td>{$row['Nome']}</td><td>{$row['Sobrenome']}</td><td>{$row['Endereco']}</td><td>{$row['Cidade']}</td><td>{$row['Host']}</td></tr>";
}
echo "</table>";
} else {
echo "<p>Nenhum dado encontrado no banco.</p>";
}
?>
</body>
</html>
27 changes: 14 additions & 13 deletions nginx.conf
Original file line number Diff line number Diff line change
@@ -1,19 +1,20 @@
http {

upstream all {
server 172.31.0.37:80;
server 172.31.0.151:80;
server 172.31.0.149:80;
upstream backend {
server php_app:80;
}

server {
listen 4500;
location / {
proxy_pass http://all/;
}
}

}
listen 4500;

location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

events { }
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
}
}
events {}