Article image
Rodrigo Santana
Rodrigo Santana16/12/2022 14:33
Compartilhe

Criando um servidor web gratuito na AWS com Ubuntu, Docker e Apache

  • #Linux
  • #Docker
  • #AWS

Este tutorial tem a intenção de ser um guia prático, passo-a-passo e relativamente fácil para a realização de uma tarefa avançada: a criação de um servidor web rodando em nuvem (com custo zero durante o período de gratuidade de um ano que a AWS concede), utilizando um terminal Linux e dockerfile.

É ao mesmo tempo uma boa oportunidade para ganhar intimidade com o terminal da melhor maneira, pondo a mão na massa pra aumentar a endorfina vendo a coisa toda funcionar.

1) Criando uma conta gratuita na AWS (link)

Abra o tutorial indicado no link e siga o passo-a-passo para criar uma conta gratuita na AWS.

2) Criando e iniciando uma instância EC2 na AWS 

Logado no console da AWS, clique sobre EC2.

Clique em Launch Instance.

Em Name and tags dê um nome ao seu servidor.

Em Application and OS Images (Amazon Machine Image) selecione Ubuntu e em Key pair name – required selecione Proceed without a key pair (Not recommended)

Também é possível criar uma chave ssh para aumentar a segurança e facilitar o acesso remoto. Não abordarei esse assunto neste momento, pois não é o foco do tutorial, mas se desejar pode seguir o passo-a-passo disponível neste link

Deixe todo o restante preenchido como está. 

Basta clicar em Launch Instance e a sua instância EC2 será iniciada.

Navegue até Instances e clique no check box referente ao EC2 criado:

image

Instância selecionada exibindo informações na aba inferior

Clique em Actions e Connect.

Ao clicar, irá abrir numa nova aba do navegador com o bash terminal.

Comece alterando a senha do root:

su passwd root

Logue como root:

su 

image

Terminal do console da AWS sendo executado em uma aba do navegador

Voi-lá! Estamos prontos para seguir ao próximo passo.

3) Instalando o docker (link)

A instalação do Docker é simples.

Primeiro, atualize os repositórios do Ubuntu:

apt-get update
apt-get upgrade

Para instalar o Docker:

 apt install docker.io

 4) Criando os diretórios necessários

Através do terminal, crie uma pasta na raiz do sistema (e outras dentro dela) para guardarmos a imagem dockerfile e os arquivos do site:

mkdir /images
cd /images
mkdir debian-apache
cd /debian-apache
mkdir /site
cd /site

 5) Preparando os arquivos do site

No diretório 'site' criado anteriormente, baixe os arquivos que iremos utilizar de exemplo neste tutorial:

wget http://site1368633667.hospedagemdesites.ws/site1.zip

 Após o download, instale o unzip descompacte o arquivo:

apt install unzip
unzip site1.zip

 Apague o arquivo .zip, pois não será mais necessário:

rm site1.zip

 Nesse passo iremos compactar os arquivos do site em um .tar:

tar -czf site.tar ./

# tar -czf <filename.tar> /<originpath>

Copie o arquivo comprimido para a pasta anterior e na seguida vá para ela:

cp site.tar ../
cd ..

Apague o diretório "site":

rm -Rf site

6) Criando o dockerfile:

Execute o editor de texto:

nano dockerfile

Dentro do arquivo, insira:

FROM debian
 
RUN apt-get update && apt-get install -y apache2 && apt-get clean
 
ENV APACHE_LOCK DIR="var/lock"
ENV APACHE_PID_FILE="var/run/apache2.pid"
ENV APACHE_RUN_USER="www-data"
ENV APACHE_RUN_GROUP="www-data"
ENV APACHE_LOG_DIR="/var/log/apache2"
 
ADD site.tar /var/www/html
 
LABEL description="Apache Webserver 1.0"
 
VOLUME /var/www/html/
 
EXPOSE 80
 
ENTRYPOINT ["/usr/sbin/apachectl"]
 
CMD ["-D", "FOREGROUND"]

 Ctrl + O para salvar e Ctrl + X para sair

7) Buildando a imagem do docker

Execute:

docker image build -t debian-apache:1.0 .

# docker image build -t <imagename>:<versionTAG> <path>

E depois:

docker run -dti -p 80:80 --name myapache debian-apache:1.0

# docker run -dti -p <tcpport>:<tcpport> --name <containername> <image>:<TAG>

Nesse ponto, caso tudo tenha ocorrido bem, o nosso servidor apache já estará rodando no servidor ubuntu (que está hospedado dentro de um EC2 na nuvem AWS), dentro de um docker container, que foi configurado através de um dockerfile e linhas de comando em um linux shell terminal.

8) Publicando o site

Será preciso adicionar uma regra ao security group da instância do EC2 criada anteriormente, para permitir o tráfego HTTP sob o protocolo TCP na porta 80 de qualquer lugar (0.0.0.0/0). Com a instância EC2 selecionada (checkbox) no console da AWS, navegue até a aba Security e clique no link logo abaixo de Security Groups. Em Inbound rules, clique em Edit inbound rules. Clique em Add rule, adicione a nova regra e clique em Save rules. O resultado será como demonstrado na imagem abaixo:

image

Configuração de port fowarding realizada no security group

Teste o funcionamento do servidor copiando o public IPv4 DNS da instância EC2 e colando no navegador após o http://.

Exemplo: http://ec2-54-90-93-250.compute-1.amazonaws.com/

Atenção! Não irá funcionar com https://

image

Public IPv4 DNS

Se tudo ocorreu bem, você terá o seguinte resultado no browser:

image

Website rodando em um docker container na nuvem AWS

Um site html completo e funcional, rodando gratuitamente sob apache na nuvem pública da AWS.

Caso deseje replicar esse container, basta executar um docker run, nomeá-lo com um nome diferente do primeiro e definir uma porta TCP diferente:

docker run -dti -p 8080:80 --name myapache2 debian-apache:1.0  

!IMPORTANTE!: Não se esqueça de apagar a instância EC2 na AWS ao final do laboratório, para que após o primeiro ano gratuito você não se esqueça e não seja gerado cobranças em seu cartão de crédito.

Se tiver dúvidas, escreva nos comentários. Será um prazer colaborar!

Meu Linkedin (link)

Links para estudo aprofundado:

Bash (Bourne Again Shell)

Apache na AWS

Docker

Compartilhe
Comentários (2)
Rodrigo Santana
Rodrigo Santana - 17/12/2022 20:55

Robson, muito obrigado!

ROBSON MARTINS
ROBSON MARTINS - 17/12/2022 19:09

show, muito bom, parabéns.