# Processo de deploy ECOS _Essa documentação pode ser incrementada conforme cada assunto for sendo aprofundado no periodo de estudos das tecnologias._ ## Sumário 1. [Configuração do Container](https://github.com/SOITIC/cloud-docs/blob/master/guias/infra/deploy-ecos.md#a-criando-o-container) 1. [Configuração do DNS](https://github.com/SOITIC/cloud-docs/blob/master/guias/infra/deploy-ecos.md#b-direcionando-o-dns) ## Etapas: ### a) Criando o container #### 1 - Criar task definition: [Task definition](https://docs.aws.amazon.com/pt_br/AmazonECS/latest/userguide/task_definitions.html) é o que define para o serviço [ECS](https://aws.amazon.com/pt/ecs/) da amazon, como um container vai ser formado. É como se fosse uma receita de bolo que você cria, para o ECS ler e criar o bolo: um serviço (container) na instância. O container que vamos criar precisa ter algumas características fundamentais: - Qual [imagem](https://stackoverflow.com/questions/23735149/what-is-the-difference-between-a-docker-image-and-a-container) vai ser sua base - Qual o caminho para o [volume](https://docs.docker.com/storage/volumes/) que vai ter os arquivos do projeto - Quais as regras para informar ao [proxy reverso](https://pt.wikipedia.org/wiki/Proxy_reverso) como acessar o container a partir de um DNS, ou seja, como falar pro proxy reverso usar o container correspondente a um determinado DNS, por exemplo, informar que uma requisição pelo DNS 'dominio.com' deve exibir o container que possua o projeto do 'dominio.com' Para criar uma nova task definition acesse alguma task definition existente, para ser a base, como a do [asstra](https://us-west-2.console.aws.amazon.com/ecs/home?region=us-west-2#/taskDefinitions/ecos-asstra/5) e clique no botão "Create new Revision" Obviamente vamos mudar o nome, que no caso desse exemplo vai estar "ecos-asstra", deixe o prefixo "ecos-" e insira o nome do novo serviço, como "novodeploy" (final ficaria "ecos-novodeploy") ![](https://user-images.githubusercontent.com/40183470/62052600-2acd3300-b1ec-11e9-8bb0-e7ebcf4a1850.png) Depois vamos setar o caminho para o **volume**, contendo os arquivos do projeto. Os volumes dos projetos da Ecos se encontram em um FTP. O responsável pelo projeto sobe os arquivos pra uma pasta no FTP e nós mapeamos essa pasta nessa task definition. Então entre em contato com o responsável para saber qual o nome da pasta no FTP que contém os arquivos correspondentes ao projeto. Vamos supor que essa pasta no FTP chama "novodeploy", basta clicar em "Name" na seção volume (no fim da página): ![](https://user-images.githubusercontent.com/40183470/62053002-150c3d80-b1ed-11e9-8fe5-9c3ec1202e51.png) e então trocar os nomes para "novodeploy": ![](https://user-images.githubusercontent.com/40183470/62053077-3ec56480-b1ed-11e9-865e-3af7f6b50c05.png) Agora, para definir a **imagem** e as **variáveis do proxy reverso**, clique em "Container Name" na seção "Container Definitions": ![](https://user-images.githubusercontent.com/40183470/62053183-79c79800-b1ed-11e9-8c0a-ba2ca14c6d1b.png) Assim que um menu lateral abrir, modifique o nome do container para o mesmo nome da task definition, "ecos-novodeploy". Logo abaixo vemos a **imagem** base do container: `779863683866.dkr.ecr.us-west-2.amazonaws.com/php7-laravel` Essa é a imagem padrão da maioria dos projetos Ecos, então pode deixar como está. Anteriormente mapeamos o volume no FTP, para dizer a task definition que queremos que esse container use aquele **volume**, basta descer até "STORAGE AND LOGGING" e em "Mount points" selecione "var-www-novodeploy", que é a variável que setamos no passo anterior. Por fim, desça até "DOCKER LABELS" e você vai notar alguns pares de valores. `traefik.frontend.rule` - `Host:asstraassessoria.com.br,www.asstraassessoria.com.br` nesse valor, basta mudar os DNS's da asstra, para do novo dominio, exemplo: `Host:novodominio.com.br,www.novodominio.com.br` Em `traefik.backend`, mude o nome do valor de `asstra-backend`, para `novodeploy-backend` Pronto! Clique em update e depois em "Create", sua Task Definition está pronta Os valores do Docker Labels usados, dizem ao proxy reverso como encontrar esse container, caso o domínio seja requisitado pelo usuário. Nosso proxy reverso é o [Traefik](https://docs.traefik.io/basics/). [Aqui](https://docs.traefik.io/configuration/backends/ecs/#labels-overriding-default-behaviour) estão todas as regras possíveis (docker labels) que o Traefik oferece, caso precise adicionar alguma algum dia (o que difícilmente será o caso). #### 2 - Criar serviço baseado na task definition: Esse "[serviço](https://docs.aws.amazon.com/pt_br/AmazonECS/latest/developerguide/ecs_services.html)" é o que cria e gerencia o container, de fato, na maquina do ECS - Artigo bem completo sobre a união e funcionamento de task definition + service [aqui](https://medium.com/boltops/gentle-introduction-to-how-aws-ecs-works-with-example-tutorial-cea3d27ce63d) Depois de criar a Task Definition, uma página parecida com essa vai aparecer: ![](https://user-images.githubusercontent.com/40183470/62054132-57367e80-b1ef-11e9-9017-308483e8b7f2.png) Basta clicar em "Actions" e "Create Service" para criar um serviço. - Na primeira página, modifique os seguintes valores: **Launch Type**: EC2 **Cluster**: Ecos **Service Name**: ecos-novodeploy **Number of tasks**: 1 - Na segunda página deixe o checkbox de "Enable service discovery integration" como false e prossiga - Na terceira página só clique em "Next Step" Revise os dados e crie o serviço. Pronto! Serviço criado. #### 3 - Acessar a maquina do ECS e rodar "composer install" no container Composer é o gerenciador de pacotes do PHP. Podemos entrar nesse [container](https://www.docker.com/resources/what-container) recém criado e executar o composer com os seguintes passos: - Acessar máquina via ssh do [Putty](https://www.putty.org/) (IP: 35.160.74.59; requisitar arquivo .ppk para coordenação; usuário: ec2-user) - ```docker ps``` para listar os containers e copiar o ID do container que queremos - ```docker exec -it IdDoConainer /bin/bash``` para acessar e executar o bash do container em execução - ```cd /var/www/html``` acessar a pasta com os arquivos do projeto - ```composer install``` ### b) Direcionando o DNS #### 4 - Criar zona hospedada do Route 53 Uma zona hospedada (ou "hosted zone"), é um grupo de dados que definem como direcionar requisições a um determinado DNS. Para ter visualizar as zonas hospedadas, acesse o painel do [Route 53](https://console.aws.amazon.com/route53/home?region=us-west-2#hosted-zones:). Para criar uma zona basta clicar em "Criar zona hospedada": ![](https://user-images.githubusercontent.com/40183470/62066945-f451e100-b208-11e9-9275-1143f1d4926b.png) Crie uma zona hospedada com o domínio comprado para a aplicação, como "novodominio.com.br". Após criada, clique no botão "Criar conjunto de registros" e preencha conforme a imagem: ![](https://user-images.githubusercontent.com/40183470/62067895-35e38b80-b20b-11e9-874c-40c73768b911.png) O IP 52.26.145.242 se refere ao nosso proxy reverso. Ou seja, estamos informando o Route 53 pra apontar pra esse IP quando esse domínio for acessado. #### 5 - Acessar RegistroBR e modificar autoridade de roteamento de DNS para Route 53 Acessando o RegistroBR (ou provedor responsável pelo domínio comprado), existe um [local](https://www.hostnet.com.br/info/alterar-dns-na-registro-br/) para informar o responsável pelo roteamento do DNS. Basta inserir DNS's autoritativos do Route 53 (listados na zona hospedada que foi criada) nos respectivos campos: ![](https://user-images.githubusercontent.com/40183470/62067789-ee5cff80-b20a-11e9-9aec-138f6c10ceff.png) **Pronto, seu deploy deve estar funcionando se acessar o DNS da aplicação.** ## Fluxograma do processo de requisição ![](https://user-images.githubusercontent.com/40183470/57531515-19246f80-7310-11e9-9090-4424ea864924.png)