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:
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
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:
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://
Public IPv4 DNS
Se tudo ocorreu bem, você terá o seguinte resultado no browser:
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: