Prévia do material em texto
Instalação de aplicações Web Apresentação Das fases de desenvolvimento de uma aplicação Web, a de implantação ou instalação é uma das que mais requer cuidados. Afinal, é a etapa em que o sistema passa a estar disponível ao usuário final, o chamado ambiente de produção. A grande vantagem é que nos dias atuais existem diversas tecnologias empregadas no trabalho de implantar e instalar aplicações em ambiente de servidor Web. Como esse processo está presente desde o desenvolvimento da primeira aplicação, existem diferentes formas de implantação de aplicações Web, desde as mais tradicionais, com a submissão de arquivos via protocolo FTP, até opções mais modernas, que incluem o uso de técnicas de integração contínua e entrega contínua. Nesta Unidade de Aprendizagem, você verá as abordagens de instalação de aplicações Web via protocolo FTP integração contínua e entrega contínua, a cultura DevOps e a evolução dos processos de instalação de aplicações Web. Bons estudos. Ao final desta Unidade de Aprendizagem, você deve apresentar os seguintes aprendizados: Descrever o processo de instalação de aplicações Web: do FTP à integração contínua (CI/CD). • Explicar a instalação de aplicações Web via FTP e comparar com o processo de integração contínua. • Analisar a cultura DevOps e a evolução dos processos de instalação de aplicações Web. • Desafio Para controle de implantação e de manutenção de aplicações Web, o uso de técnicas de integração contínua e entrega contínua (CI/CD) tem-se tornado cada dia mais importante. Essa tem sido uma forma de acompanhar todos os processos envolvidos em times de desenvolvimento, na qual todos os envolvidos podem ter controle do que está sendo produzido e gerado ao fim de cada ciclo. Suponha que você seja gerente de projetos de uma grande empresa de tecnologia. Como um bom gerente, descreva quais ferramentas e/ou técnicas podem ser utilizadas em tal processo. Infográfico Manter uma aplicação Web moderna requer o uso de técnicas e ferramentas que não apenas auxiliem no processo em si, mas que tragam mais agilidade, otimização do tempo e do uso dos membros de uma equipe de desenvolvimento. O versionamento de código é uma técnica que auxilia muito na criação de aplicações sobre dinâmicas e de implantação em fluxo contínuo. A principal técnica de versionamento é chamada de GIT. Com ela é possível, por meio do uso de ferramentas guiadas por comandos particulares, a submissão, a atualização e a manutenção de projetos e código-fonte de uma aplicação. Veja, no Infográfico, os principais comandos GIT e sua aplicação prática. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://statics-marketplace.plataforma.grupoa.education/sagah/634006c4-f4ac-483b-a6d0-62a40343de03/7ebf72f5-bcd8-430a-a8a4-9bfd122e1545.jpg Conteúdo do Livro A implantação de um sistema em servidor Web necessita do uso de protocolos de Internet. O uso de ferramentas próprias para isso também auxilia o processo, uma vez que diferentes técnicas, como a transferência via cliente FTP ou o método de integração contínua e entrega contínua, são formas de se utilizar a tecnologia da informação na implantação e na atualização de aplicações em servidores. No capítulo Instalação de aplicações Web, do livro Ferramentas de desenvolvimento Web, você verá um detalhamento do uso dessas técnicas e ferramentas no processo de instalação de aplicações Web em servidores. Boa leitura. FERRAMENTAS DE DESENVOLVIMENTO WEB Daniel dos Santos Brandão Instalação de aplicações web Objetivos de aprendizagem Ao final deste texto, você deve apresentar os seguintes aprendizados: � Descrever o processo de instalação de aplicações web: do FTP à in- tegração contínua. � Explicar a instalação de aplicações web via FTP e comparar com o processo de integração contínua. � Analisar a cultura DevOps e a evolução dos processos de instalação de aplicações web. Introdução As aplicações web evoluíram muito desde o surgimento da web como a conhecemos. Dos primórdios da troca de informação por browsers como Netscape, AOL Explorer e Internet Explorer até o uso de interfaces por meio de smartphones e tablets, com telas sensíveis ao toque e sistemas operacionais mobile, houve um enorme salto tanto de qualidade de conteúdo quanto de quantidade de tecnologias empregadas por trás de tudo isso. Com o avanço das tecnologias envolvidas na troca de mensagens da web, as aplicações e softwares para esse ambiente precisaram avançar e, com isso, o modo como as equipes de desenvolvimento e os programa- dores full stack criam e disponibilizam essas aplicações na grande rede também precisou evoluir. As linguagens de programação deixaram de ser puro código e passaram a ter uma grande base por trás, com frameworks e servidores próprios para executar aquele código. Com essa estrutura, a forma como se enviam os arquivos para um servidor web precisou acompanhar tudo isso, evoluindo do uso simples do protocolo FTP (file transfer protocol, ou “protocolo de transferência de arquivo”) para o CD (continuous delivery, ou “entrega contínua”) e CI (continuous integration, ou “integração contínua”). Neste capítulo, você vai estudar as convenções e formas de instalação de aplicações em servidores web. Também vai ver a cultura DevOps, com exemplos de aplicações e modelos aplicados para ambiente de desenvolvimento de software para web. 1 Aplicações web Um projeto web requer diferentes olhares, desde sua fase de ideação, na pro- totipação inicial, passando por levantamento de requisitos, refinamento desses requisitos, construção de modelos de banco de dados até o desenvolvimento em si, testes e mais testes. Uma das fases finais é a entrega do projeto, conhecida como deploy (do inglês, “implantar”). É nessa última fase que o sistema passa a estar em um servidor web e a estar habilitado para testes e, posteriormente, para ser colocado no chamado ambiente de produção. Esse ambiente é como chamamos o estado de uso do sistema por seus usuários. É o ambiente onde o sistema está em execução de fato. Com o sistema em produção, o que pode ocorrer após isso são as eventuais manutenções ou melhorias, lançamento de novas versões e trabalhos do gênero. Para Lopes et al. (2019, documento on-line): Cada etapa do processo não envolve somente o desenvolvedor e a linguagem, mas também o ambiente aonde os processos estão ocorrendo, de forma que um mesmo produto de software assume comportamentos diferentes de acordo com seu ambiente de desenvolvimento. Isso porque durante seu desenvolvimento um sistema precisa passar por uma série de testes, mudanças e adequações […]. Com base nessa afirmação, perceba que a etapa de entrega é precedida de outras que também são de total importância. A entrega ou implantação de uma aplicação também necessita de cuidados especiais e deve contar com especialistas no processo, de acordo com o grau de complexidade da estrutura de servidor empregada, das tecnologias utilizadas no desenvolvimento e da quantidade de entregas necessárias ao longo do processo de deploy. Instalação de aplicações web2 Diferentes formas de implantação Assim como um sistema não é criado apenas de uma forma, com uma só linguagem de programação e um mesmo banco de dados sempre, o modo de criar projetos também tem diferentes vertentes. “Os Métodos Ágeis de desenvolvimento de software surgiram no final da década de 1990 propondo uma nova abordagem para organizar tais atividades” (SATO, 2013, p. 2). Esse método não trabalha apenas com a ideia da programação em si, mas de todos os aspectos de um projeto, incluindo as entregas. Até então, as tarefas de desenvolvimento e a parte operacional do sistema eram bem divididas em times ou funções distintas. Enquanto um tinha o interesse apenas de pensar no desenvolvimento em si, visando ao código-limpo e aos requisitos satisfeitos, o outro prezava pela estabilidade do serviço e pela persistência da aplicação,sempre disponível ao usuário final. Na tentativa de agilizar o processo e de não ter um abismo entre a equipe ou pessoa responsável pela programação em si e quem irá testar e, posterior- mente, implantar a aplicação em servidor de produção, foram surgindo novas visões e técnicas de trabalho entre os processos. Dessa necessidade surgiu o conceito de CI/CD. A técnica de CI/CD diminui o tempo entre cada deploy e passa a ter mais entregáveis ao longo do processo. Sato (2013, p. 5) afirma que “[...] o aumento da frequência de deploys faz com que a quantidade de mudanças em cada deploy diminua, reduzindo também o risco associado a ele.” Logo, com mais entregas, menos trabalho de correção poderá ser apresentado, fazendo com que a equipe consiga entregar um produto de mais qualidade e com riscos bem baixo de grandes manutenções futuras. A Figura 1 demostra o chamado ciclo vicioso entre desenvolvimento e operações, segundo Sato (2013). 3Instalação de aplicações web Figura 1. Ciclo vicioso entre desenvolvimento e operações. Fonte: Adaptada de Sato (2013). Frequência de deploy Processo Quantidade de mudanças Risco – + ++ Nesse ciclo, quanto menor a frequência de deploys, mais retrabalhos e maior quantidade de mudanças poderão surgir, com o risco de não conclusão ou não cumprimento de prazos do projeto iminentes. Conceito de entrega contínua CD é o processo de entrega constante de uma aplicação, feita assim que peque- nos artefatos são desenvolvidos. No desenvolvimento de sistemas modulares, por exemplo, cada módulo é uma parte do sistema. A aplicação é constituída de partes menores, e cada uma delas representa um módulo, que pode ser dividido em cadastro de clientes, catálogo de produtos, controle financeiro, recursos humanos e assim por diante. Na técnica de entrega contínua, em vez de ser submetida apenas parte da aplicação ou a aplicação inteira de uma vez, ao final do processo, as entregas ou submissões da aplicação são feitas em pequenas etapas, que podem ser diárias, semanais ou em outra periodicidade. A AWS (Amazon Web Services) define CD como “[…] uma prática de desenvolvimento de software na qual as alterações de código são automati- camente preparadas para uma liberação para produção” (AWS, 2019a, docu- mento on-line). A empresa apresenta a prática como uma solução moderna de desenvolvimento de sistemas, visto que, com o desenvolvimento orientado a entregas, ao final de cada entrega o programador tem mais segurança de que o que ele está criando passa por testes de execução tanto em ambiente de desenvolvimento quanto no ambiente de produção. “Com a entrega contínua, Instalação de aplicações web4 cada alteração de código é criada, testada e enviada para um ambiente de teste ou preparação, que não pertence à produção” (AWS, 2019a, documento on-line). Esse processo é compreendido quando se utiliza o versionamento de código. Ao se utilizar técnicas e ferramentas de controle de versão, há uma segurança de que, caso algum erro ocorra durante o processo de deploy ou se alguma das entregas feitas apresente defeito, a aplicação pode retornar a um estágio anterior ao da entrega defeituosa, fazendo com que o erro seja reparado de maneira mais rápida e prática. Muitas vezes isso é detectado tão de pressa que o usuário do sistema em si nem percebe que houve um downgrade da aplicação (voltar a um estado anterior). Segundo a AWS (2019), alguns dos benefícios da CD são os seguintes: � automatização do processo de deploy de uma aplicação; � melhora na produtividade do time de desenvolvimento; � encontro e correções de bugs mais rapidamente; � distribuição de atualizações também mais rapidamente. Podemos dizer que essas são as principais características do uso de CI/CD no desenvolvimento e na instalação de uma aplicação em servidor web. Uma tarefa geralmente ligada à CD é o provisionamento de servidor. Segundo Sato (2013, p. 63): O termo provisionamento é comumente usado por empresas de telecomunica- ções e por equipes de operações para se referir às etapas de preparação iniciais de configuração de um novo recurso. Por exemplo: provisionar um aparelho celular, provisionar acesso à internet, provisionar um servidor, provisionar uma nova conta de usuário, e assim por diante. Em outras palavras, provisionar é prover previamente um ambiente ou configuração inicial de algum serviço para que o usuário possa utilizar sem ter mais esse trabalho a cada novo aparelho. No caso de aplicações web, já é comum utilizar servidores em nuvem ou servidores dedicados em empresas terceirizadas. Nesse caso, o nível de provisionamento vai variar, podendo ser utilizado o conceito de virtualização, com máquinas virtuais atuando em um mesmo servidor, no qual toda a estrutura necessária em nível de software pode ser feita ainda em ambiente de desenvolvimento e, posteriormente, ser submetida completamente, já pronta e configurada, para o ambiente de produção em servidor web. 5Instalação de aplicações web Conceito de instalação via FTP Por mais que o conceito de entrega contínua esteja bastante difundido, ainda existem as formas de implantação e instalação de aplicações web de modo tradicional. A instalação via serviço FTP é utilizada para envio de arquivos fonte de aplicações, do ambiente de desenvolvimento ao ambiente de produção. O FTP é utilizado para transferência de arquivos de um ambiente ou máquina local para outra máquina. Quando falamos de aplicações web, a transferência será entre uma máquina ou servidor local e o servidor web, o servidor de produção onde a aplicação será realmente executada e utilizada. A transferência por FTP é a forma mais tradicional e, por assim dizer, simples de submeter uma aplicação a um servidor. É uma forma de copiar, de maneira mais manual, arquivos locais para um outro local remoto. Para realizar essa cópia ou submissão de arquivos é necessário o uso de ferramentas chamadas de clientes FTP. Essas aplicações são softwares que podem ser instalados na máquina local do desenvolvedor e configurados para se conectar com o servidor ou máquina de destino, a URL (uniform resource locator), o usuário, a senha e a porta de comunicação, requisitos do protocolo FTP. Com o uso do protocolo FTP, a árvore de diretórios pode ser manipulada manualmente, com o próprio usuário desenvolvedor podendo escolher as pastas onde ficarão os arquivos. O protocolo FTP permite a transferência de arquivos tanto como download (baixar um arquivo) como upload (subir um arquivo). De acordo com Comer (2016), o FTP pode ser caracterizado a partir de aspectos como os seguintes: � Conteúdos arbitrários de arquivo: o FTP pode transferir qualquer tipo de dados, incluindo documentos, imagens, músicas ou vídeos armazenados. � Transferência bidirecional: o FTP pode ser usado para baixar (do- wnload) arquivos (transferir do servidor para o cliente) ou carregar (upload) arquivos (transferir do cliente para o servidor). � Suporte para autenticação e propriedade: o FTP permite que cada arquivo tenha propriedade e restrições de acesso. � Habilidade para navegar em pastas: o FTP permite que um cliente navegue nos conteúdos de um diretório (ou seja, uma pasta). � Mensagens de controle textual: como muitos outros serviços aplica- tivos da internet, as mensagens de controle trocadas entre um cliente e um servidor FTP são enviadas como texto ASCII. Instalação de aplicações web6 � Acomodação de heterogeneidade: o FTP esconde os detalhes dos sistemas operacionais dos computadores individuais e pode transferir uma cópia de um arquivo entre dois computadores quaisquer. Com o uso do FTP, a transferência de arquivos pode ser feita indepen- dentemente de os computadores utilizarem diferentes sistemas operacionais, embora alguns arquivos possam apresentar problemas de leitura, dependendo do modo de escrita e leitura que esteja salvo. Sistemas como Windows e Linux, por exemplo, têm diferentes modos de sistema de arquivos, mas,de modo geral, a transferência entre máquina local e servidor é semelhante para todos. 2 Implantação de aplicações web Existem diferentes formas de instalar uma aplicação em um servidor. Utili- zando diferentes protocolos e modos de operação, é possível ter diferentes resultados, e cada equipe de desenvolvimento ou profissional desenvolvedor pode optar pelo modo que melhor se encaixe em sua metodologia de trabalho. Como exemplo simples, para manter uma aplicação web modular, cada mó- dulo sendo desenvolvido é testado em ambiente de desenvolvimento e, assim que estiver homologado localmente, é submetido ao servidor web. Esse é um processo natural de implantação de uma aplicação web. Nesse procedimento, testes precisarão ser feitos e então teremos a aplicação propriamente dita em ambiente de produção. Como vimos anteriormente, o ambiente de produção é como chamamos o ambiente de servidor web em que a aplicação está em execução e, em consequência, é utilizada pelo usuário final. Após a submissão e as devidas parametrizações do servidor, a aplicação deverá estar pronta para uso. Mas, como submeter os arquivos da aplicação ao servidor? É isso que veremos a seguir, com duas formas distintas de fazer a tarefa: com entregas contínuas ou um deploy único. Implantação de uma aplicação web com entregas contínuas Segundo a AWS (2019b, documento on-line), “[...] a integração contínua é uma prática de desenvolvimento de software de DevOps em que os desenvolvedores, com frequência, juntam suas alterações de código em um repositório central.” Geralmente ligada a um processo automatizado, as entregas e integrações 7Instalação de aplicações web contínuas permitem que a equipe de desenvolvimento se preocupe menos com as entregas em si e mais com sua tarefa principal, a de criar as aplicações e seus testes. Essa metodologia permite ter equipes mais focadas em programar propriamente, deixando algumas tarefas mais autônomas e menos burocráticas, dando mais liberdade aos desenvolvedores. Essa integração e entregas contínuas estão diretamente ligadas ao versiona- mento e controle de código. O método mais comum de criar versões de código é o uso do Git. Serviços como GitHub e GitLab são os mais conhecidos que utilizam a metodologia da criação de versões de arquivos em ambiente web. Essa prática significa que, para cada arquivo criado e submetido a um servidor, é armazenada uma cópia de seu estado atual, permitindo assim que um arquivo criado e alterado tenha a possibilidade de ser revertido a um estado anterior. O controle de versões ou de código-fonte é uma forma de gerenciamento na alteração de códigos em arquivos de uma aplicação. É como você ter um site na web já funcionando e sendo utilizado pelos usuários, mas precisar adicionar mais uma opção ao menu. Você pode alterar o arquivo com o menu localmente e, após a alteração, submetê-lo ao servidor web. Com isso, o site será atualizado e a nova opção de menu estará disponível. Em um processo de transferência de arquivo comum via FTP, por exemplo, o arquivo que contém o menu originalmente será substituído pela nova versão. Com uso do versionamento de código, tanto a nova versão do arquivo como a anterior estão disponíveis, daí vem a ideia de versão de código. Git Git é “um sistema de gerenciamento de código-fonte distribuído de código aberto” (AWS, 2019c). Esse sistema foi criado por Linus Torvalds, o mesmo criador do núcleo do sistema operacional Linux. A ideia do Git é ter diferen- tes versões de um mesmo arquivo, de maneira independente um do outro, podendo reverter o arquivo a um estado anterior sempre que necessário. Cada atualização de arquivo é chamada de confirmação. “É possível extrair confirmações de outros colaboradores para o repositório, enviar confirmações para outras pessoas e mesclar confirmações de volta para a versão principal do repositório” (AWS, 2019c). É geralmente utilizado como uma aplicação por shell script ou prompt de comando, com comandos básicos como pull, commit, split e merge. Os maiores benefícios apresentados pelo uso do versionamento via Git são estes (AWS, 2019d): Instalação de aplicações web8 � Acompanhamento histórico de alterações: é possível revisar como as confirmações foram alteradas ao longo do tempo, ver quando e por quem as alterações foram feitas e reverter para uma confirmação anterior, se necessário. Esse histórico facilita a identificação e a correção de bugs. � Trabalho em equipe: você pode compartilhar seu código com colegas de equipe para revisão antes de confirmar ou fazer mescla de arquivo. Além disso, os recursos de ramificação e revisão permitem o desen- volvimento simultâneo. Várias pessoas podem trabalhar no mesmo arquivo e resolver as diferenças nele posteriormente. � Melhora na velocidade e produtividade da equipe: o Git facilita o rastreamento de alterações no código. O desenvolvedor pode se concen- trar em escrever código, em vez de gastar tempo rastreando e mesclando versões diferentes de sua equipe. Além disso, o Git executa cálculos e armazena seu repositório principal localmente, tornando-o mais rápido na maioria das operações. � Disponibilidade e redundância: o Git trabalha de maneira distribuída, o que significa que não existe um local central e único onde tudo esteja armazenado. Em um sistema distribuído, existem vários backups no caso de você precisar de um. Essa abordagem também significa que você pode trabalhar off-line e confirmar suas alterações quando estiver tudo pronto. � Git é o padrão do setor: devido à sua popularidade, o Git se trans- formou no padrão de muitos ambientes de desenvolvimento integrado (IDEs, integrated development environment) e por muitas ferramentas populares de desenvolvedor, incluindo AWS CodeCommit, Jenkins e Travis. Existem muitos recursos gratuitos do Git disponíveis. Durante a criação do sistema operacional do pinguim, Linus permitiu que diversos cola- boradores ajudassem no código-fonte do sistema, realizando um trabalho colaborativo. Para isso, era preciso que várias pessoas pudessem trabalhar nos arquivos ao mesmo tempo. Para não haver problemas nos arquivos, foi utilizada a ideia de versionamento. Como a ferramenta usada à época era proprietária e não possuía o código-fonte aberto (open source), Linus decidiu criar sua própria aplicação de versionamento, nascendo assim a ferramenta Git. Após isso, foram criadas outras dezenas delas, como GitHub, GitLab, entre outras. 9Instalação de aplicações web Existem diferentes formas de utilizar o versionamento de código com Git. Serviços como GitHub são bastante utilizados; com eles é possível criar repositórios para diferentes projetos, convidando usuários para compartilhar de seu código. Uma equipe pode ter vários projetos, que podem ser públicos ou privados. Em repositórios privados, apenas convidados podem alterar ou submeter novos arquivos; já os públicos são de livre acesso, tanto para download de arquivos quanto para submissão e criação de novas versões de arquivos. Implantação de uma aplicação web com entrega única Além da metodologia de entregas contínuas, também é possível realizar a cha- mada “entrega única”. Este tipo de deploy é realizado, em geral, para aplicações mais simples, com grau menor de tecnologias e com baixo acoplamento em relação ao próprio servidor — ou seja, uma aplicação criada em uma única linguagem, ou criada por uma só pessoa, de maneira simples, com páginas web estáticas ou até dinâmicas, mas sem maiores complexidades. Esse tipo de implantação pode ser considerado mais simples, porém, se não for feito da maneira correta, poderá apresentar falhas que comprometem a execução de maneira correta. Mesmo sendo um método mais fácil de im- plantação, requer alguns cuidados e também que a aplicação seja submetida a testes após seu deploy. Quer dizer, independentemente de ser considerado mais simples, requer cuidados semelhantes ao da entrega contínua, porém sem a necessidade de maisde um profissional envolvido no processo. Para realizar uma implantação de sistema nesse método, é necessária uma ferramenta chamada cliente FTP no processo. Esse método nada mais é do que transferir arquivos de um servidor ou máquina local para outra máquina ou servidor. No caso de uma aplicação web, o envio é para um servidor web. Existem vários softwares que auxiliam na transferência de arquivos nesse processo, podendo ser utilizadas tanto IDEs quanto programas específicos de cliente FTP, como FileZilla, SmartFTP, Transmit, Free FTP, entre outros. Há opções para sistemas operacionais Windows, Linux, MAC OS, entre outros. A Figura 2, a seguir, apresenta um exemplo de cliente FTP, o FileZilla. Instalação de aplicações web10 Figura 2. Cliente FTP FileZilla. Na Figura 2 você pode ver o FileZilla aberto e suas opções básicas. De modo geral, o protocolo FTP requer alguns argumentos para conectar uma máquina local até um servidor ou outra máquina, que são os seguintes: � Host: é a URL ou o domínio do servidor, que pode ser representado pelo IP no formato http://0.0.0.0, por exemplo, ou http://dominio.com.br. � Nome do usuário: é o nome de usuário criado no servidor que dá acesso a um diretório ou ao diretório raiz de um servidor web. � Senha: a senha do usuário cadastrado no servidor. � Porta: é a liberação de acesso ou conexão. Para cada tipo de conexão pode ser usada uma porta. A porta padrão da web é a 21, mas ela pode ser parametrizada de maneira personalizada. A Figura 3 apresenta o detalhe da parte superior do aplicativo FileZilla, contendo os campos a serem preenchidos com host, nome de usuário, senha e porta. 11Instalação de aplicações web Figura 3. Detalhe do cliente FTP FileZilla. Uma vez preenchidos os campos com os dados corretos, basta clicar no botão Conexão rápida ou na setinha ao lado dele para escolher outra opção, com alguma outra conta já utilizada. Estando conectado, basta utilizar a árvore de diretórios ao lado para acessar os arquivos locais e arrastar os arquivos para a aba ao lado, definindo onde ficarão os arquivos no servidor. Com o FileZilla o processo é realmente simples. Você escolhe um arquivo ou pasta, arrasta para o lado servidor e, assim que o upload for concluído, o arquivo estará acessível no endereço o qual foi submetido — por exemplo, http:// 0.0.0.0/arquivos. Ao término do envio, ficarão listados os diretórios (pastas) e os arquivos enviados, à direita. O FileZilla mostra detalhes de log como tamanho do arquivo, tipo do arquivo, data de modificação, entre outros detalhes. Com a aplicação devidamente configurada com banco de dados e outros detalhes necessários, ela estará disponível para ser acessada via browser, por exemplo, ou por outro meio. Após isso, caso necessite submeter alguma alteração da aplicação, basta conectar novamente e submeter o arquivo alterado ou o novo arquivo de código-fonte criado. O cliente FTP irá perguntar se você quer substituir o arquivo que já existe no servidor e seu arquivo ou aplicação estarão atualizados e/ou carregados no servidor ou máquina remota. Sim, o processo é realmente simples assim. 3 Cultura DevOps Entregas contínuas e de qualidade com tempo de ciclo curto precisam de um alto grau de automação. Da necessidade de diminuir a distância entre equipe de desenvolvimento e equipe operacional surgiu a cultura DevOps. A escolha das ferramentas certas para o ambiente ou projeto é importante quando você muda para a cultura DevOps. Instalação de aplicações web12 Baseado em práticas enxutas e ágeis, o DevOps busca automação de pro- cessos no desenvolvimento e fornecimento de software. É quase impossível descrever essa abordagem no estilo “receita de bolo”, mas, de modo geral, podemos dizer que essa metodologia acaba por beneficiar a maioria dos de- senvolvedores com melhoria na conexão entre desenvolvedores e a parte operacional, antes mantidos isolados. Existem muitas ferramentas de DevOps que podem auxiliar no processo de implantação dessa cultura. O termo DevOps vem da junção de Development (desenvolvimento) e Operations (operações). É uma derivação da engenharia de software moderna cuja função é realmente juntar essas duas atividades (FRUHLINGER, 2019). Um engenheiro DevOps é um profissional que entende todo o processo de desenvolvimento e seu ciclo de vida, aliado à experiência de operar e administrar o sistema. Na verdade, se você parar para analisar o início da prática de desenvolvimento web, os primeiros profissionais considerados “analistas” ou “desenvolvedores web” tinham essa prática atual, de dominar tanto a parte de codificação (de programação em si) quanto a de configuração e manutenção de uma aplicação em servidor web. Segundo a AWS (2019e), há várias vantagens no uso da cultura DevOps no processo de implantação e deploy de aplicações web. Entre eles estão os seguintes: � Velocidade: operação em alta velocidade na inovação e entrega de novas funcionalidades de sistemas. � Entrega rápida: aumento da frequência e ritmo de novos lançamen- tos, tanto para novas aplicações quanto para correções de problemas apresentados na execução da aplicação. � Confiabilidade: garante entregas mais rápidas e contínuas, gerando confiança e passando segurança ao usuário final. � Escalabilidade: a aplicação pode crescer sem que o serviço tenha que ficar indisponível, utilizando também a arquitetura por microsserviços. � Colaboração melhorada: equipes de desenvolvimento e operação trabalham mais próximas e de maneira colaborativa, compartilhando responsabilidades e combinando fluxos de trabalho. 13Instalação de aplicações web � Segurança: operando rapidamente e utilizando controles de versões, a cultura DevOps ajuda a manter uma aplicação sempre atualizada com o uso de técnicas que garantam o acesso contínuo por profissionais capacitados. Ferramentas DevOps Para uma boa prática DevOps, é altamente indicado o uso de ferramentas que auxiliem na produtividade da função. Existem algumas delas no mercado, que têm por objetivo eliminar algumas práticas mais trabalhosas, como a de configurações extensas de servidores, indo desde o cuidado com o sistema operacional, as variáveis de ambientes e os sistemas de arquivos até a confi- guração de servidor web e de aplicação, banco de dados, entre outros. Docker Uma ferramenta bastante comum é o Docker. Ela é uma tecnologia que permite a criação de containers, em que o objetivo é você criar um container local, configurado com todas as variantes citadas anteriormente, que preparem um ambiente propício para a execução da aplicação criada (LOPES et al., 2019). Esse container pode ser criado em uma máquina ou servidor local e, após a criação da aplicação, ele pode ser submetido ao servidor web e ali será execu- tado como um nó de um servidor, sem precisar de praticamente nenhuma outra configuração. Isso faz com que a aplicação web dentro do container funcione independentemente do sistema operacional do servidor web. Jenkins Segundo seu site oficial, o Jenkins é o principal servidor de automação de código aberto, que fornece centenas de plug-ins para dar suporte à constru- ção, implantação e automação de qualquer projeto. (JENKINS, 2020). Com grande apelo de uso em projetos e utilizada por equipes que adotam a prática de entregas e integrações contínuas, esta ferramenta é capaz de automatizar processos repetitivos, sendo um apoio ao processo contínuo de atualizar e manter aplicações em ambiente web. Instalação de aplicações web14 A documentação do Jenkins explica bem como integrar a ferramenta a uma aplicação de acordo com cada linguagem de programação. Na verdade, você pode utilizar ferramentas de cada linguagem para integrar o processo de entrega contínua do Jenkins. Com a ferramenta, o fluxo de entrega contínua mais básico terá, no mínimo, três estágios, que devem ser definidos em um arquivo Jenkins: compilar, testar e implantar. O último estágio, também cha- mado de deploy,precisa ser devidamente precedido pelos estágios de compilar e testar, para garantir que a versão estável está sendo utilizada na atividade de implantação de uma aplicação. Para utilizar o Jenkins como serviço não há maiores complicações. Basta baixar o instalador a partir do site oficial e ter como requisito básico pelo menos 512 MB de memória RAM e um espaço em disco de 10 GB (requisitos mínimos para a versão 1.4). O site oficial do Jenkins disponibiliza as opções de download e também uma documenta- ção repleta de exemplos de uso. No link a seguir você encontra um tutorial passo a passo guiado que vai desde o download do Jenkins até as primeiras configurações de uso. https://jenkins.io Diversas empresas, de todos os portes, utilizam o Jenkins como forma oficial de automatizar seu fluxo de entregas contínuas — desde gigantes como Microsoft, Red Hat, GitHub, Rackspace, até empresas locais de desenvolvi- mento de sistemas e aplicações, principalmente sistemas para web. Controle de logs Uma tarefa importante no fluxo de trabalho DevOps é o controle de logs. Com um fluxo contínuo de atualizações e novas submissões de arquivos, vários logs são gerados e precisam ser mantidos para um controle inteiro do processo. Afinal, um log diz muito sobre o uso de um servidor, pois discrimina detalhes de trabalhos em um ambiente. Para o trabalho DevOps, algumas ferramentas são indicadas para esse controle, como as listadas a seguir: 15Instalação de aplicações web � Flume: ferramenta sob a licença da Fundação Apache. � ELK: stack que inclui o uso das ferramentas Elasticsearch, Logstash e Kibana, todas pertencentes à empresa Elastic. � Fluentd: projeto de software criado pela empresa Treasure Data que, além de manipular logs, serve como um coletor de dados de modo geral, podendo ser utilizado para diversos fins. AWS. O que significa distribuição contínua? [S. l.], 2019a. Disponível em: https://aws. amazon.com/pt/devops/continuous-delivery/. Acesso em: 28 jan. 2020. AWS. O que significa integração contínua? [S. l.], 2019b. Disponível em: https://aws.amazon. com/pt/devops/continuous-integration/. Acesso em: 28 jan. 2020. AWS. O que é o controle do código-fonte? [S. l.], 2019c. Disponível em: https://aws.amazon. com/pt/devops/source-control/. Acesso em: 28 jan. 2020. AWS. O que é o DevOps? [S. l.], 2019e. Disponível em: https://aws.amazon.com/pt/devops/ what-is-devops/. Acesso em: 28 jan. 2020. AWS. What is Git? [S. l.], 2019d. Disponível em: https://aws.amazon.com/pt/devops/ source-control/git/. Acesso em: 28 jan. 2020. COMER, D. E. Redes de computadores e internet. 6. ed. Porto Alegre: Bookman, 2016. FRUHLINGER, J. O que é um engenheiro DevOps e como você pode se tornar um? [S. l.], 2019. Disponível em: https://cio.com.br/o-que-e-um-engenheiro-devops-e-como- -voce-pode-se-tornar-um/. Acesso em: 28 jan. 2020. JENKINS. [S. l.], 2020. Disponível em: https://jenkins.io/. Acesso em: 28 jan. 2020. LOPES, K. E. et al. O processo de deploy automático em ambientes de computação na nuvem: exemplo de utilização da plataforma Jenkins. Interface Tecnológica, v. 16, n. 1, p. 43–55, 2019. Disponível em: https://revista.fatectq.edu.br/index.php/interfacetec- nologica/article/view/545/361. Acesso em: 28 jan. 2020. SATO, D. DevOps na prática: entrega de software confiável e automatizada. São Paulo: Casa do Código, 2013. Instalação de aplicações web16 Os links para sites da web fornecidos neste capítulo foram todos testados, e seu fun- cionamento foi comprovado no momento da publicação do material. No entanto, a rede é extremamente dinâmica; suas páginas estão constantemente mudando de local e conteúdo. Assim, os editores declaram não ter qualquer responsabilidade sobre qualidade, precisão ou integralidade das informações referidas em tais links. 17Instalação de aplicações web Dica do Professor A transferência de arquivos entre computadores é o que move a Web desde seu início. Foi exatamente para poder compartilhar arquivos e conhecimento que a World Wide Web surgiu e ganhou tanta força. Protocolos como HTTP e FTP são os precursores de tudo isso, pois por meio deles é possível enviar dados, mídias digitais e arquivos de um dispositivo conectado a outro. Nesse processo, o protocolo FTP surgiu como um padrão para o envio de arquivos de computador a computador e também para servidores Web. Nesta Dica do Professor, veja o processo de transferência de arquivos via FTP. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://fast.player.liquidplatform.com/pApiv2/embed/cee29914fad5b594d8f5918df1e801fd/61e3a928d42069fb2af329e62a3672b5 Exercícios 1) As aplicações Web já não são mais tão simples como no início. Com os recursos avançados a começar da evolução das próprias linguagens de programação, os requisitos de servidor de hospedagem aumentaram consideravelmente. A respeito das técnicas modernas para hospedagem de sites da Web, é correto afirmar: A) DevOps é um sistema de arquivos distribuídos. B) Entrega contínua é o envio de aplicações por FTP. C) HTTP é o protocolo utilizado em aplicações para transferência padrão de arquivos. D) Integração contínua e entrega contínua são técnias que trabalham em conjunto. E) Um desenvolvedor Full Stack é um programador que também atua como DevOps. 2) Um projeto Web passa por diferentes fases, em que cada uma delas é o complemento da outra: da ideia inicial, passando por levantamento de requisitos, desenvolvimento, testes e a implantação do sistema em si no servidor Web. A fase final de instalação e implantação do sistema é conhecida por: A) análise. B) development. C) DevOps. D) branch. E) deploy. 3) Entrega contínua é uma prática comum no desenvolvimento de sistemas Web e reconhecida como boa prática por acompanhar alterações de código automaticamente e verificar se estão prontos a serem submetidos ao ambiente de produção. Sobre os benefícios do uso dessa prática, está correto o que se afirma em: A) Automatização do processo de bugs de uma aplicação. B) Aumento da produtividade do usuário final. C) Encontro e correções de deploys mais rapidamente. D) Entrega de atualizações mais rapidamente. E) Versionamento de código via FTP. 4) O versionamento de código via GIT é uma forma de gerenciar código-fonte ou arquivos de maneira a criar instâncias deles. Com esse sistema, é possível compartilhar arquivos entre vários autores e colaboradores sob a segurança de estar criando cópias de cada versão de arquivo. Sobre os benefícios de se utilizar o versionamento via GIT, analise as afirmações a seguir: I. Acompanhamento do histórico de alterações do arquivo II. Redundância e backup dos arquivos III. Aumento na velocidade e na produtividade no desenvolvimento IV. Menor acoplamento entre equipes de desenvolvimento e produção Estão corretas as afirmativas: A) I e II. B) I e III. C) I, II e III. D) II, III e IV. E) I, II e IV. DevOps é uma cultura implementada em equipes de criação de aplicações cujo objetivo principal é trazer uma aproximação entre os times de desenvolvimento (programação) e produção (infra e manutenção de servidor e serviços). Com DevOps, o uso de algumas ferramentas traz mais agilidade ao processo de desenvolvimento, do projeto ao deploy. Sobre as ferramentas mais utilizadas, analise as afirmações a seguir: I. Docker é uma plataforma para criação de containers. II. Jenkins realiza a automatização de entregas e integrações contínuas. 5) III. Flume realiza um controle de repositórios GIT. IV. ELK é uma ferramenta Apache para controle de versionamento de código. Está correto o que se afirma em: A) I e II. B) II e III. C) III e IV. D) I, II e III. E) II, III e IV. Na prática Uma empresa pode se tornar mais ágil com a adoção da cultura DevOps. Com as ferramentas e o uso correto de técnicas consagradas no mercado, além da formação e participação de colaboradores experientes, o processo de desenvolvimento e implantaçãode aplicações pode ser ainda mais aprimorado. Conheça a história de Gabriel, um diretor de TI que teve o desafio de diminuir a distância entre suas equipes de desenvolvimento e operações em servidores. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://statics-marketplace.plataforma.grupoa.education/sagah/dafa1847-876e-45a4-a30d-8d825f92d64d/5e3e50e3-5255-4a6f-8f3a-335c09e3c48d.jpg Saiba mais Para ampliar o seu conhecimento a respeito desse assunto, veja abaixo as sugestões do professor: Processo de conformidade arquitetural em integração contínua Neste artigo, o autor apresenta as formas de acoplamento dentro de uma arquitetura Web com uso de testes, controle de versão e integração contínua de processos. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. Sistema Gerenciador de Projetos Ágeis (SGPA) Esta publicação trata do desenvolvimento de um sistema para uma empresa pública com o uso de técnicas de metodologias ágeis. O trabalho apresenta a implementação de um sistema utilizando SCRUM como metodologia de trabalho e desenvolvimento, partindo de aspectos técnicos como o levantamento de requisitos até a configuração e a instalação dos softwares. Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. O processo de deploy automático em ambientes de computação na nuvem: exemplo de utilização da plataforma Jenkins Este artigo relata as qualidades de se trabalhar com deploy (entregas) automáticas utilizando técnicas de DevOps e ferramentas para isso, como Docker e Jenkins. http://professores.dcc.ufla.br/~terra/publications_files/students/2015_ufla_pinto.pdf https://repositorio.uniceub.br/jspui/handle/235/6425 Aponte a câmera para o código e acesse o link do conteúdo ou clique no código para acessar. https://revista.fatectq.edu.br/index.php/interfacetecnologica/article/view/545/361