From 8ba2d0b49813e6ec6e3d86243101744fcd4a7094 Mon Sep 17 00:00:00 2001 From: Bryan Khelven Date: Mon, 9 Dec 2024 02:42:02 -0300 Subject: [PATCH] Aprimoramento dos arquivos --- README.md | 94 ++++++++++++++++++++++++++++++++++++++++++++-- banco.sql | 4 +- docker-compose.yml | 29 ++++++++++++++ index.php | 89 ++++++++++++++++++++++--------------------- nginx.conf | 27 ++++++------- 5 files changed, 183 insertions(+), 60 deletions(-) create mode 100644 docker-compose.yml diff --git a/README.md b/README.md index 13c2349..24f0546 100644 --- a/README.md +++ b/README.md @@ -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. \ No newline at end of file diff --git a/banco.sql b/banco.sql index 3e52fd1..28c0d16 100644 --- a/banco.sql +++ b/banco.sql @@ -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), diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..ed45eb0 --- /dev/null +++ b/docker-compose.yml @@ -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" diff --git a/index.php b/index.php index c9ee100..3c6c30e 100644 --- a/index.php +++ b/index.php @@ -1,48 +1,53 @@ - -Exemplo PHP + Exemplo PHP - Aprimorado - -'; - -$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; -} - -?> + Versão Atual do PHP: ' . phpversion() . ''; + + $servername = "54.234.153.24"; + $username = "root"; + $password = "Senha123"; + $database = "meubanco"; + + $link = new mysqli($servername, $username, $password, $database); + + if (mysqli_connect_errno()) { + echo "

Falha na conexão: " . mysqli_connect_error() . "

"; + exit(); + } + + echo "

Conexão com o banco estabelecida com sucesso!

"; + + $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 "

Novo registro criado com sucesso.

"; + } else { + echo "

Erro ao inserir registro: " . $link->error . "

"; + } + + // Exibindo os dados na página + $result = $link->query("SELECT * FROM dados"); + if ($result->num_rows > 0) { + echo "

Dados no Banco:

"; + echo ""; + while ($row = $result->fetch_assoc()) { + echo ""; + } + echo "
IDNomeSobrenomeEndereçoCidadeHost
{$row['AlunoID']}{$row['Nome']}{$row['Sobrenome']}{$row['Endereco']}{$row['Cidade']}{$row['Host']}
"; + } else { + echo "

Nenhum dado encontrado no banco.

"; + } + ?> diff --git a/nginx.conf b/nginx.conf index 9d73c4a..06f4807 100644 --- a/nginx.conf +++ b/nginx.conf @@ -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 {}