Mais recentes

Conteúdo técnico, ferramentas e experiências práticas da IceNex.

terça-feira, 30 de julho de 2024

10 Dicas Essenciais de Segurança Cibernética para Proteger Seus Dados Online


Fala pessoal, tudo bem?

No mundo digital de hoje, a segurança cibernética tornou-se uma preocupação fundamental para todos os usuários de internet. Com o aumento das ameaças cibernéticas, como hackers, vírus e fraudes online, é crucial adotar medidas de proteção para manter suas informações pessoais e profissionais seguras. Neste post, vamos compartilhar 10 dicas essenciais de segurança cibernética que você pode implementar para proteger seus dados online.

1. Use Senhas Fortes e Únicas

Crie senhas fortes e únicas para cada uma de suas contas online. Use uma combinação de letras maiúsculas e minúsculas, números e símbolos. Evite usar informações pessoais óbvias, como datas de nascimento ou nomes de familiares.

2. Ative a Autenticação de Dois Fatores (2FA)

A autenticação de dois fatores adiciona uma camada extra de segurança às suas contas. Além da senha, você precisará de um segundo fator, como um código enviado para o seu celular, para acessar sua conta.

3. Mantenha Seus Softwares Atualizados

Certifique-se de que todos os seus softwares, incluindo sistemas operacionais, navegadores e aplicativos, estejam sempre atualizados. Atualizações frequentemente contêm correções de segurança que protegem contra vulnerabilidades recentes.

4. Tenha Cuidado com Phishing

Seja cauteloso com e-mails ou mensagens suspeitas que solicitam informações pessoais ou financeiras. Verifique sempre o remetente e evite clicar em links ou abrir anexos de fontes desconhecidas.

5. Use Redes Wi-Fi Seguras

Evite usar redes Wi-Fi públicas para acessar informações sensíveis. Se precisar usar uma rede pública, utilize uma VPN (Rede Privada Virtual) para criptografar sua conexão e proteger seus dados.

6. Faça Backup Regular dos Seus Dados

Realize backups regulares dos seus dados importantes. Utilize serviços de backup em nuvem ou dispositivos de armazenamento externos para garantir que você não perca informações valiosas em caso de ataque cibernético ou falha no sistema.

7. Tenha um Bom Software Antivírus

Instale e mantenha um software antivírus confiável em todos os seus dispositivos. O antivírus ajuda a detectar e remover malware, além de oferecer proteção em tempo real contra ameaças.

8. Gerencie Suas Configurações de Privacidade

Revise e ajuste as configurações de privacidade nas suas contas de redes sociais e outros serviços online. Limite a quantidade de informações pessoais que você compartilha publicamente.

9. Seja Cuidadoso com o Que Você Compartilha Online

Pense duas vezes antes de compartilhar informações pessoais ou profissionais online. Hackers podem usar informações que você compartilha publicamente para realizar ataques de engenharia social.

10. Eduque-se Continuamente sobre Segurança Cibernética

A segurança cibernética é um campo em constante evolução. Mantenha-se informado sobre as últimas ameaças e melhores práticas participando de webinars, lendo blogs especializados e seguindo especialistas em segurança cibernética.

Considerações Finais

Proteger seus dados online é uma responsabilidade contínua que requer vigilância e ação proativa. Ao seguir essas dicas de segurança cibernética, você pode reduzir significativamente o risco de se tornar vítima de ataques cibernéticos e manter suas informações seguras.

É isso, aquela dica rápida que ajuda bastante.

Abs e até a próxima.
:wq!

quinta-feira, 25 de julho de 2024

A Importância da Automação de Testes em Projetos de Software

E aí pessoal, tudo bem?

A qualidade do software é um fator crucial para o sucesso de qualquer projeto de desenvolvimento. Com a crescente complexidade dos sistemas e a necessidade de entregas rápidas, garantir que o software funcione corretamente em todas as fases do ciclo de desenvolvimento tornou-se um grande desafio. É aqui que a automação de testes se torna essencial. Neste post, vamos explorar o conceito de automação de testes, seus benefícios e como ela pode transformar a maneira como desenvolvemos software.

O que é Automação de Testes?

Automação de testes é o uso de ferramentas e scripts para executar testes de software automaticamente. Isso inclui a criação de testes, a execução dos testes, a comparação dos resultados com os esperados e a geração de relatórios. A automação pode ser aplicada a diferentes tipos de testes, como testes unitários, de integração, de sistema, de aceitação e de regressão.

Benefícios da Automação de Testes

  1. Velocidade e Eficiência

    • Os testes automatizados são significativamente mais rápidos do que os testes manuais, permitindo que você execute testes repetidamente com alta eficiência.
  2. Cobertura de Testes Ampliada

    • A automação permite a execução de um grande número de casos de teste, cobrindo uma gama maior de cenários e aumentando a confiabilidade do software.
  3. Detecção Precoce de Defeitos

    • Com testes automáticos integrados ao pipeline de integração contínua, os defeitos são detectados mais cedo no ciclo de desenvolvimento, reduzindo os custos e o tempo de correção.
  4. Consistência e Reprodutibilidade

    • Testes automatizados garantem que os testes sejam executados de maneira consistente e reprodutível, eliminando a variabilidade dos testes manuais.
  5. Feedback Rápido

    • A automação fornece feedback imediato aos desenvolvedores, permitindo que eles identifiquem e corrijam problemas rapidamente.

Como Implementar Automação de Testes

  1. Escolha das Ferramentas

    • Selecione ferramentas de automação de testes que atendam às necessidades do seu projeto. Algumas opções populares incluem Selenium, JUnit, TestNG, e Cypress.
  2. Definição da Estratégia de Testes

    • Determine quais testes devem ser automatizados e crie uma estratégia que inclua testes unitários, de integração, de sistema e de regressão.
  3. Escrita de Scripts de Teste

    • Desenvolva scripts de teste que cobrem as funcionalidades críticas do seu software. Certifique-se de que os scripts sejam bem documentados e fáceis de manter.
  4. Integração Contínua

    • Integre seus testes automatizados com ferramentas de integração contínua (CI) como Jenkins, Travis CI ou GitHub Actions para garantir a execução automática dos testes a cada mudança no código.
  5. Monitoramento e Manutenção

    • Monitore os resultados dos testes e mantenha seus scripts de teste atualizados para refletir quaisquer mudanças no software.

Aqui vai um exemplo, de como ficaria um pipeline de integração contínua, testes e entrega contínua:

Pipeline - Integração e Entrega Contínua

Considerações Finais

A automação de testes é uma prática fundamental para garantir a qualidade do software em projetos modernos. Ao investir em automação, as equipes de desenvolvimento podem aumentar a eficiência, melhorar a cobertura de testes e fornecer um software mais robusto e confiável. Lembre-se de que a automação não elimina a necessidade de testes manuais, mas complementa-os, permitindo que os testers se concentrem em áreas que exigem atenção humana.

Até a próxima.

Abs
:wq!

terça-feira, 23 de julho de 2024

Como Implementar um Modelo de Classificação de Texto com NLP e Scikit-learn


Fala pessoal, tudo certo?

Hoje vamos "brincar" um pouco com um modelo de classificação de texto :)

Vamos mostrar como implementar um modelo de classificação de texto usando Natural Language Processing (NLP) e Scikit-learn. Vamos dividir o processo em duas partes:

  1. Criar um arquivo CSV com os dados de exemplo.
  2. Escrever o código Python para carregar os dados, treinar o modelo e fazer previsões.

Parte 1: Criar o Arquivo CSV

Primeiro, vamos criar um arquivo CSV chamado data.csv com dados de exemplo. Este arquivo conterá duas colunas: text e target.

text,target

"Eu adoro o serviço prestado, muito bom!",positivo

"Esse produto é horrível e não vale o preço.",negativo

"Excelente qualidade e atendimento rápido.",positivo

"Não gostei, a entrega foi atrasada e o produto veio com defeito.",negativo

"Ótimo custo-benefício, recomendaria para amigos.",positivo

"Não recomendo, tive uma péssima experiência.",negativo

"Produto fantástico, atende todas as expectativas!",positivo

"Serviço ruim e atendimento ao cliente não responde.",negativo

Salve o arquivo.

Parte 2: Código Python para Treinamento e Previsão

Agora, vamos escrever o código para carregar os dados, treinar um modelo de classificação de texto e fazer previsões.

import pandas as pd
from sklearn.model_selection import train_test_split, StratifiedShuffleSplit
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import make_pipeline
from sklearn.metrics import classification_report

# Carregar os dados
df = pd.read_csv('data.csv')

# Verificar os dados
print("Primeiras linhas dos dados:")
print(df.head())
print("\nDistribuição das classes:")
print(df['target'].value_counts())

# Separar características e alvo
X = df['text']
y = df['target']

# Dividir os dados em conjuntos de treino e teste com preservação das classes
splitter = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
for train_index, test_index in splitter.split(X, y):
    X_train, X_test = X.iloc[train_index], X.iloc[test_index]
    y_train, y_test = y.iloc[train_index], y.iloc[test_index]

# Criar o pipeline
model = make_pipeline(TfidfVectorizer(), MultinomialNB(alpha=1.0))

# Treinar o modelo
model.fit(X_train, y_train)

# Fazer previsões
y_pred = model.predict(X_test)

# Avaliar o modelo
print("\nRelatório de Classificação:")
print(classification_report(y_test, y_pred, zero_division=1))

Salve este código em um arquivo chamado text_classification.py

O Que Fazer em Seguida?

  1. Certifique-se de que o arquivo data.csv está no mesmo diretório que o script de classificação.
  2. Estando tudo no mesmo diretório e os arquivos salvos sem erros, vamos executá-lo:
python3 text_classification.py

O Que Esperar na Saída

  • Distribuição das Classes: Mostra quantos exemplos existem para cada classe no seu conjunto de dados.
  • Relatório de Classificação: Fornece métricas como precision, recall, e f1-score para cada classe. Se o modelo estiver funcionando corretamente, você deve ver valores diferentes de zero para essas métricas.
Exemplo da saída esperada:


Explicação do Exemplo:

  • Precision, Recall, e F1-Score para Cada Classe (A e B): Avaliam o desempenho do modelo para cada classe individualmente.
  • Accuracy (Precisão Geral): Proporção geral de previsões corretas em relação ao total de previsões.
  • Macro Average: Média das métricas (precisão, revocação e F1-Score) calculadas para cada classe sem considerar o suporte.
  • Weighted Average: Média das métricas (precisão, revocação e F1-Score) ponderada pelo suporte de cada classe.
Um pouco mais de detalhes de como se chegou nisso.

1. Precision (Precisão)

Definição: A precisão é a proporção de verdadeiros positivos em relação ao total de previsões positivas feitas pelo modelo. Em outras palavras, de todas as vezes que o modelo previu uma determinada classe, quantas vezes ele estava correto?


Interpretação: Uma alta precisão significa que quando o modelo prevê uma classe, é mais provável que a previsão esteja correta. A precisão é importante quando o custo de uma previsão incorreta é alto.

2. Recall (Revocação) ou Sensitivity (Sensibilidade)

Definição: A revocação é a proporção de verdadeiros positivos em relação ao total de instâncias reais dessa classe. Ou seja, de todas as instâncias que realmente pertencem a uma classe, quantas o modelo conseguiu identificar corretamente?


Interpretação: Uma alta revocação indica que o modelo é bom em identificar todas as instâncias de uma determinada classe. A revocação é importante quando perder uma instância positiva é crítico.

3. F1-Score

Definição: O F1-Score é a média harmônica da precisão e da revocação. É uma métrica que combina ambas, fornecendo uma única pontuação que leva em conta tanto a precisão quanto a revocação.

Interpretação: O F1-Score é útil quando você precisa de um equilíbrio entre precisão e revocação e quando há uma distribuição desigual entre as classes.

4. Support (Suporte)

Definição: O suporte é o número de ocorrências de cada classe no conjunto de teste. Representa quantas instâncias de cada classe estão presentes na verdade.

Interpretação: O suporte ajuda a entender o quão bem o modelo está performando em cada classe com base no número real de instâncias dessa classe no conjunto de teste.

É isso.
O tema é bem complexo mesmo, mas achei legal trazer com um exemplo mais prático para vermos de forma simplificada e muito, mas muito macro de como funciona essa parte de análise de dados.

Até a próxima.
Abs
:wq!

quinta-feira, 18 de julho de 2024

Introdução ao Infrastructure as Code (IaC) com um Laboratório de Teste Prático


Fala turma, blz?

Infrastructure as Code (IaC) é uma prática que permite gerenciar e provisionar a infraestrutura de TI por meio de código em vez de processos manuais. Isso traz benefícios como versionamento, consistência e automação. Neste post, vamos explorar os conceitos básicos de IaC e criar um laboratório de teste que qualquer pessoa pode seguir para entender como isso funciona na prática.

O Que é IaC?

Infrastructure as Code é a prática de definir e gerenciar a infraestrutura através de arquivos de configuração legíveis por humanos, que são tratados da mesma forma que o código de software. Ferramentas populares para IaC incluem Terraform, Ansible, Puppet e Chef. Neste tutorial, usaremos o Terraform devido à sua simplicidade e ampla adoção.

Benefícios do IaC

  • Consistência: Garantia de que a infraestrutura é provisionada da mesma maneira todas as vezes.
  • Automação: Redução de erros humanos e aumento da eficiência.
  • Versionamento: Controle de versões da infraestrutura, permitindo rastrear mudanças ao longo do tempo.
  • Escalabilidade: Facilidade para escalar a infraestrutura conforme necessário.

Laboratório de Teste com Terraform

Vamos configurar um ambiente simples na AWS usando Terraform. Para isso, você precisará de uma conta na AWS e de ter o Terraform instalado em sua máquina.

Pré-requisitos

  1. Conta na AWS: Se você ainda não tem uma, pode criar uma conta gratuita na AWS.
  2. Instalar o Terraform: Siga as instruções na documentação oficial para instalar o Terraform.
Minha conta gratuita e a "access key" já estão criadas e como podemos ver no print abaixo, ainda não tenho nenhuma instância criada ou em execução:


Passo 1: Configurar Credenciais da AWS

Primeiro, você precisa configurar suas credenciais da AWS. Crie um arquivo ~/.aws/credentials com o seguinte conteúdo:

[default]
aws_access_key_id = YOUR_ACCESS_KEY
aws_secret_access_key = YOUR_SECRET_KEY

Passo 2: Criar um Arquivo de Configuração do Terraform

Crie uma pasta para o seu projeto e dentro dela, crie um arquivo chamado main.tf com o seguinte conteúdo:

provider "aws" {

  region = "us-east-1"

}


resource "aws_instance" "example" {

  ami           = "ami-01fccab91b456acc2" # Amazon Linux 2 AMI

  instance_type = "t2.micro"


  tags = {

    Name = "terraform-example"

  }

}



Este arquivo define um provedor AWS e uma instância EC2.

Passo 3: Inicializar e Aplicar o Terraform

Abra um terminal, navegue até a pasta do projeto e execute os seguintes comandos:

terraform init
terraform apply

O Terraform pedirá confirmação antes de criar a infraestrutura. Digite yes e pressione Enter. Em alguns minutos, você terá uma instância EC2 rodando na AWS.

Passo 4: Verificar a Instância

Você pode verificar a instância EC2 criada acessando o Console da AWS. Navegue até o painel de EC2 e você verá sua instância em execução.


Conclusão

Neste tutorial, você aprendeu os conceitos básicos de IaC e como criar uma infraestrutura simples na AWS usando Terraform. O uso de IaC pode simplificar muito a gestão da sua infraestrutura, trazendo automação, consistência e controle de versões. Experimente expandir este laboratório adicionando novos recursos, como grupos de segurança, volumes EBS ou até mesmo provisionamento de um cluster Kubernetes.

Abs e até a próxima.
:wq!

quarta-feira, 17 de julho de 2024

I.A. - Como Começar a Usar Inteligência Artificial em Seus Projetos Pessoais


Fala pessoal, tudo bem?

A Inteligência Artificial (IA) está transformando diversas indústrias e se tornando cada vez mais acessível para projetos pessoais. Se você está curioso sobre como começar a usar IA em seus próprios projetos, este post vai te guiar pelos primeiros passos de maneira prática e descomplicada.

1. Escolha uma Ferramenta de IA

Existem várias ferramentas e bibliotecas que facilitam a implementação de IA, mesmo para iniciantes. Aqui estão algumas das mais populares:

  • TensorFlow: Uma biblioteca open-source de machine learning desenvolvida pelo Google. Ideal para projetos complexos.
  • Keras: Uma API de alto nível para redes neurais que funciona em cima do TensorFlow. Ótima para iniciantes.
  • Scikit-Learn: Uma biblioteca simples e eficiente para análise de dados e machine learning em Python.
  • IBM Watson: Serviços baseados em cloud que oferecem uma gama de ferramentas de IA.

2. Defina um Problema Claro

Antes de começar, defina claramente o problema que você quer resolver com IA. Pode ser algo simples, como classificar e-mails como spam ou não spam, ou algo mais complexo, como criar um chatbot.

  • Dica: Comece com problemas menores e específicos para aprender os conceitos básicos antes de passar para projetos mais ambiciosos.

3. Reúna e Prepare os Dados

Os dados são o combustível da IA. Reúna um conjunto de dados relevante para o seu problema e prepare-o para análise. Isso pode incluir limpeza, normalização e transformação dos dados.

  • Dica: Use datasets open-source disponíveis em plataformas como Kaggle, UCI Machine Learning Repository, ou Google Dataset Search para começar.

4. Escolha e Treine um Modelo

Com os dados prontos, escolha um modelo de machine learning apropriado para o seu problema. Utilize bibliotecas como TensorFlow, Keras ou Scikit-Learn para treinar seu modelo.

  • Dica: Comece com modelos simples, como regressão linear ou árvores de decisão, antes de explorar redes neurais profundas.

5. Avalie e Melhore o Modelo

Após treinar o modelo, avalie sua performance usando métricas apropriadas como precisão, recall e F1-score. Ajuste hiperparâmetros e tente diferentes modelos para melhorar a performance.

  • Dica: Divida seu dataset em conjuntos de treino e teste para validar a eficácia do modelo de maneira imparcial.

6. Implemente e Teste em um Projeto Real

Depois de treinar e ajustar seu modelo, é hora de implementá-lo em um projeto real. Pode ser um script que você executa localmente ou uma aplicação web que usa o modelo para fazer previsões.

  • Dica: Use frameworks como Flask ou Django para criar uma interface web simples para o seu modelo de IA.

Conclusão

Começar com Inteligência Artificial pode parecer intimidador, mas com as ferramentas certas e um passo a passo claro, você pode incorporar IA em seus projetos pessoais. Escolha uma ferramenta de IA, defina um problema, reúna dados, treine e avalie um modelo, e implemente-o em um projeto real para ver o poder da IA em ação.

Espero que essas dicas ajudem você a dar os primeiros passos no mundo da IA. Se tiver dúvidas ou quiser compartilhar sua experiência, deixe um comentário abaixo!

Abs e até a próxima.
:wq!

sábado, 25 de maio de 2024

Microsserviços - Montando uma laboratório - Parte II - Login e banco de dados Login - Clientes


Olá pessoal, tudo bem? Espero que sim.

Vamos dar sequência no nosso laboratório para estudo com microsserviços, containers, docker... etc.

Agora que já temos o "server" com o Docker pronto, vamos iniciar a subida dos containers e baixar os códigos para começarmos a dar forma para o nosso ambiente.

Só relembrando, toda estrutura do nosso ambiente, o que iremos utilizar e a preparação do laboratório, está neste primeiro POST.

Agora, vamos começar a criação dos containers e subida das aplicações.

Clientes - Aplicação Login e Banco de Dados Login

Vamos acessar por SSH o Server Docker - 192.168.0.32

$ ssh docker@192.168.0.32
$ sudo su -


Como podemos ver, ainda não temos nenhum container rodando. 

Banco de Dados Login Clientes:
Nome do Container: db_login_clientes
Imagem: mysql:5.7

$ docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc123 -d mysql:5.7
Com este comando, iremos baixar a imagem do mysql:5.7, expor ele na porta 3306 para o nosso host hospedeiro, e senha para conectarmos no banco de dados.
O tempo aqui pode demorar um pouco, devido ao tempo de download da imagem.


Agora, se executarmos novamente o comando docker ps iremos ver já nosso primeiro container executando.


Agora, para deixar tudo mais organizado e saber do que se trata cada container que estamos subindo, iremos renomea-lo:
# docker rename pensive_dubinsky db_login_clientes

Olha que legal! 
Na coluna NAMES, temos o nome que representa a função desse nosso container.

Agora vamos criar o banco de dados e a tabela que iremos utilizar.

Para isso, podemos conectar por linha de comando ou utilizar o MySQL Workbench que é um gerenciador de MySQL por interface.

No exemplo vamos seguir por linha de comando, OK?

Conectando no MySQL

Podemos utilizar o próprio host Docker Server para isso, mas antes vamos instalar o mysql-cli:
# apt-get install mysql-cli
# mysql -u root -p -h 192.168.0.32 -P 3306

Dando tudo certo, teremos um prompt semelhante a este:


Agora, criaremos o banco de dados e a tabela.

mysql> create database login;
mysql> use login;
mysql> create database login;
mysql> CREATE TABLE `login`.`usuario` (   `usuario_id` INT NOT NULL AUTO_INCREMENT, `nome` VARCHAR(200) NOT NULL,   `usuario` VARCHAR(200) NOT NULL,   `senha` VARCHAR(32) NOT NULL, `data_cadastro` DATETIME NOT NULL,PRIMARY KEY (`usuario_id`));

Perfeito. 
Agora temos a estrutura do banco de dados pronta para receber a conexão da aplicação de login e cadastro de login dos clientes.

Para sair do Shell do MySQL, basta digitar exit:

mysql> exit;

Agora, vamos subir um novo container e uma nova imagem onde será hospedada a aplicação que ira utilizar esse banco de dados.

Aplicação Login Clientes:
Nome do Container: app_login_clientes
Imagem: webdevops/php-nginx

# docker run -p 80:80 -d webdevops/php-nginx

O comando é semelhante ao que usamos para criar o container de banco de dados. Iremos export a porta 80 no nosso host hospedeiro para facilitar nosso acesso e mudamos também a imagem para baixar uma imagem contendo já o PHP e o Nginx instalado.


Aqui vamos novamente renomear o container para deixá-lo com um nome mais amigável e fácil de identificar a função dele no ambiente.

# docker rename laughing_kilby app_login_clientes

Agora vamos fazer um teste de acesso do nosso navegador mesmo, para ver se estamos conseguindo conectar no Nginx:


Conseguimos!!!
Mas veja que como não temos nada configurado ainda, ele da esse status Code 403 - onde ele aceitou nossa solicitação mas não tinha nada para responder.

Já vamos arrumar isso.

Vamos conectar por linha de comando no container. 
Para isso, executaremos o seguinte comando:

# docker exec -it app_login_clientes bash

Conforme podemos ver na imagem abaixo, estamos agora no Shell (linha de comando) do nosso container.



Vamos aos ajustes que precisaremos fazer.
Não vou entrar no detalhe de cada um, OK? Pois não é o foco desse conteúdo.

Os arquivos de configuração do Nginx ficam por default no path /etc/nginx/

# cd /etc/nginx/
# vi nginx.conf
A hora que o arquivo abrir, iremos procurar a linha "include /etc/nginx/conf.d/*.conf;", e vamos deletá-la.
Com o "vi", basta ir até ela com a seta do teclado e apertar duas vezes a tecla "d" do teclado. Assim que a linha sumir, vamos salvar e sair do arquivo com o comando :wq!

Agora, vamos criar a estrutura default onde será informado o path onde serão hospedados os arquivos da aplicação, as configurações de porta default que ela irá utilizar e as configurações do PHP.

Para criarmos o arquivo, vamos usar o seguinte comando:

# vi /etc/nginx/sites-enabled/default

Copie e cole o seguinte conteúdo:

server {
        listen 80;                                                                                    

        root /var/www/html;                                                                                          
                                                                                                                         
        # Add index.php to the list if you are using PHP                                                             
        index index.php index.html index.htm index.nginx-debian.html;                                                          
                                                                                                                         
        server_name _;                                                                                               
                                                                                                                         
        location / {                                                                                                 
                try_files $uri $uri/ /controllers$uri.php;
    location ~ \.php$ {
      try_files $uri /index.php;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi.conf; 
      }
   }
        }

Mesma coisa, para salvar o arquivo depois de colar o conteúdo, aperte a tecla "ESC" e digite :wq!

Vamos reiniciar o serviço do Nginx:

# service nginx restart
E vamos tentar acessar novamente o endereço http://192.168.0.32.

No caso de sucesso, temos uma página default que está hospedada no path /var/www/html:



** OBS **
Caso queira fazer um teste, como ainda estamos no Shell do container em questão (app_login_clientes), vamos até o path /var/www/html:

# cd /var/www/html/

Nele existe um arquivo chamado index.nginx-debian.html. Vamos editar ele com o "vi":
# vi index.nginx-debian.html

Localize a linha que contém: "<h1>Welcome to nginx!</h1>". Navegue até ela com as setas do teclado.
Vamos com o cursor até depois do ponto de exclamação. 
Para entrar no modo insert do "vi", aperte a tecla i do teclado.
E vamos digitar: APP Login Clientes

Depois de digitar, vamos apertar a tecla "ESC" e digitar :wq!

Voltemos no navegador onde acessamos o endereço http://192.168.0.32 e vamos dar um reload:


Olha que legal!
Apareceu agora com o texto que inserimos no arquivo default do site.

Web server validado e pronto para receber nossa aplicação =]

Como o intuito aqui não é te fazer programar, eu vou deixar todo código utilizado e necessário aqui nesse repositório do GitHub - https://github.com/jguandalini/lab-microservices

Procure pela aplicação Login_Clientes


Clique na pasta para ter acesso ao conteúdo dela. 
Será um arquivo compactado com o nome "app_login.tar.gz".
Vamos clicar nele e na tela seguinte, vamos clicar nos três pontinhos no lado direito e na opção Download:



Isso irá baixar o arquivo para nossa máquina.

Assim que finalizar, precisaremos copiar ele para dentro do docker server e posterior para o container.
# scp app_login.tar.gz docker@192.168.0.32:/home/docker

Agora que o arquivo está dentro do servidor docker, vamos copiar para dentro do container:

# docker cp /home/docker/app_login.tar.gz app_login_clientes:/var/www

Dando tudo certo, o resultado será esse:


Agora, vamos voltar para a linha de comando do container app_login_clientes

# docker exec -it app_login_clientres bash

Vamos até o diretório onde salvamos o arquivo compactado da aplicação:

# cd /var/www/

Se executamos o comando de listagem do linux, vamos ver o nosso arquivo copiado no passado anterior:

# ls -la


Agora vamos descompactar tudo aqui. Para isso, vamos executar o comando:

# tar xzvf app_login.tar.gz

** OBS **
Como já tínhamos uma pasta html aqui, ao descompactarmos o arquivo copiado, ela será sobrescrita, ok?

Entrando na pasta html, iremos ver todos esses arquivos:

# cd html/
# ls -la

Vamos voltar para o navegador onde acessamos o endereço http://192.168.0.32 e vamos dar um reload:



Podemos ver que agora, já temos a tela do Sistema de Login. Mas como não temos login cadastrado, não vai funcionar.

Para cadastrar, precisamos fazer dois passos:
1 - Alterar a string de conexão com nosso banco de dados (que foi o primeiro passo desse procedimento)
2 - Acessar o endereço http://192.168.0.32/cadastro.php

Vamos pro passo 1:
Vamos pegar o endereço IP do container com o banco de dados db_login_clientes. Para isso, no docker server vamos executar o comando:

# docker inspect db_login_clientes
Iremos procurar a linha "IPAddress":


Agora que já sabemos que o IP do container do banco de dados é 172.17.0.2, vamos voltar no Shell do container da aplicação e alterar o arquivo conexao.php informando este IP e a senha que fornecemos durante a criação do banco de dados.

No meu caso, ficou dessa forma:



Agora sim, vamos voltar a acessar o endereço http://192.168.0.32/cadastro.php


Vamos cadastrar nosso usuário cliente para acesso ao sistema.

Exemplo:
Nome: joao
Usuário: joao
Senha: 123mudar


Se der certo o cadastro, ele vai aparecer essa mensagem no quadro verde já com link para voltar a tela de login.

Testando o Login, vamos ter acesso a seguinte página:


A ideia é que futuramente, aqui apareça também a listagem do prestadores e empresas cadastradas na plataforma.

Com isso finalizamos a parte II - Aplicação de Login e banco de dados Login de clientes.

No próximo post, vamos dar sequência na criação de outro microsserviço e assim não vamos deixar muito conteúdo de uma única vez.

Abs
:wq!