Checklist para criar e publicar aplicações web

Para criar sua própria aplicação web em nosso tempo, não basta saber desenvolvê-la. Um aspecto importante é a configuração de ferramentas para implantação e monitoramento da aplicação, bem como gerenciamento e administração do ambiente em que atua. À medida que a era da implantação manual cai no esquecimento, mesmo para pequenos projetos, as ferramentas de automação podem trazer benefícios tangíveis. Ao implantar “manualmente”, muitas vezes podemos esquecer de mover algo, levar em conta esta ou aquela nuance, executar um teste esquecido, esta lista pode continuar por muito tempo.

Este artigo pode ajudar aqueles que estão apenas aprendendo o básico da criação de aplicações web e desejam entender um pouco sobre os termos e convenções básicos.

Assim, a construção de aplicações ainda pode ser dividida em 2 partes: tudo que se relaciona ao código da aplicação, e tudo que se relaciona ao ambiente em que esse código é executado. O código da aplicação, por sua vez, também é dividido em código do servidor (aquele que roda no servidor, muitas vezes: lógica de negócio, autorização, armazenamento de dados, etc.), e código do cliente (aquele que roda na máquina do usuário: muitas vezes a interface e a lógica relacionada a ela).

Vamos começar na quarta-feira.

A base para o funcionamento de qualquer código, sistema ou software é o Sistema Operacional, portanto a seguir veremos os sistemas mais populares do mercado de hospedagem e daremos uma breve descrição deles:

Windows Server - o mesmo Windows, mas em uma variação de servidor. Algumas funcionalidades disponíveis na versão cliente (normal) do Windows não estão presentes aqui, por exemplo, alguns serviços de coleta de estatísticas e softwares similares, mas existe um conjunto de utilitários para administração de rede, software básico para implantação de servidores (web, ftp, ...). Em geral, o Windows Server se parece com o Windows normal, mas é como o Windows normal, no entanto, custa 2 vezes mais do que seu equivalente normal. No entanto, dado que você provavelmente implantará o aplicativo em um servidor dedicado/virtual, o custo final para você, embora possa aumentar, não é crítico. Como a plataforma Windows ocupa um lugar esmagador no mercado de sistemas operacionais de consumo, sua edição de servidor será a mais familiar para a maioria dos usuários.

Unix-sistema semelhante. O trabalho tradicional nesses sistemas dispensa a presença de uma interface gráfica familiar, oferecendo ao usuário apenas um console como elemento de controle. Para um usuário inexperiente, trabalhar neste formato pode ser difícil, qual é o custo de sair de um editor de texto bastante popular em dados? Vim, uma pergunta relacionada a isso já recebeu mais de 6 milhão de visualizações em 1.8 anos. As principais distribuições (edições) desta família são: Debian - uma distribuição popular, as versões de pacotes nela são focadas principalmente em LTS (Suporte de longo termo – suporte por muito tempo), que se expressa em confiabilidade e estabilidade bastante altas do sistema e pacotes; Ubuntu – contém distribuições de todos os pacotes em suas versões mais recentes, o que pode afetar a estabilidade, mas permite utilizar a funcionalidade que acompanha as novas versões; Red Hat Enterprise Linux – SO, posicionado para uso comercial, é pago, porém inclui suporte de fornecedores de software, alguns pacotes proprietários e pacotes de drivers; CentOS – código aberto uma variação do Red Hat Enterprise Linux, caracterizada pela ausência de pacotes proprietários e suporte.

Para aqueles que estão apenas começando a dominar esta área, minha recomendação seriam sistemas Windows ServerOu Ubuntu. Se considerarmos o Windows, então esta é principalmente a familiaridade do sistema, Ubuntu – mais tolerância às atualizações e, por sua vez, por exemplo, menos problemas no lançamento de projetos em tecnologias que requerem novas versões.

Assim, decidido o sistema operacional, passemos a um conjunto de ferramentas que permitem implantar (instalar), atualizar e monitorar o estado da aplicação ou de suas partes no servidor.

A próxima decisão importante será o posicionamento do seu aplicativo e do servidor para ele. No momento, as mais comuns são 3 formas:

  • Hospedar (manter) um servidor por conta própria é a opção mais econômica, mas você terá que solicitar um IP estático ao seu provedor para que seu recurso não mude de endereço com o tempo.
  • Alugue um servidor dedicado (VDS) – administre-o e dimensione cargas de forma independente
  • Pague (muitas vezes eles dão a chance de experimentar gratuitamente as funcionalidades da plataforma) por uma assinatura de alguma hospedagem em nuvem, onde o modelo de pagamento pelos recursos utilizados é bastante comum. Os representantes mais destacados dessa direção: Amazon AWS (dê um ano grátis de utilização dos serviços, mas com limite mensal), Google Cloud (dê US$ 300 na conta, que podem ser gastos durante o ano em serviços de hospedagem em nuvem) , Yandex.Cloud (eles dão 4000 rublos por 2 meses), Microsoft Azure (dão acesso gratuito a serviços populares por um ano, + 12 rublos para quaisquer serviços por um mês). Assim, você pode experimentar qualquer um desses provedores sem gastar um centavo, mas obtendo uma opinião aproximada sobre a qualidade e o nível de serviço prestado.

Dependendo do caminho escolhido, a única coisa que vai mudar no futuro é quem é o grande responsável por esta ou aquela área da administração. Se você mesmo hospeda, deve entender que quaisquer interrupções na eletricidade, na Internet, no próprio servidor, no software implantado nele - tudo isso recai inteiramente sobre seus ombros. No entanto, para treinamento e teste, isso é mais que suficiente.

Se você não tiver uma máquina extra que possa desempenhar a função de servidor, você desejará usar a segunda ou terceira via. O segundo caso é idêntico ao primeiro, exceto que você transfere a responsabilidade pela disponibilidade do servidor e seu poder para os ombros do hoster. A administração do servidor e do software ainda está sob seu controle.

E por último, a opção de alugar capacidade de provedores de nuvem. Aqui você pode configurar o controle automatizado de quase tudo sem entrar em muitos detalhes técnicos. Além disso, em vez de uma máquina, você pode ter diversas instâncias em execução paralela, que podem, por exemplo, ser responsáveis ​​por diferentes partes da aplicação, sem diferir muito em custo de possuir um servidor dedicado. E também existem ferramentas para orquestração, conteinerização, implantação automática, integração contínua e muito mais! Veremos algumas dessas coisas abaixo.

Em geral, a infraestrutura do servidor se parece com isto: temos um chamado “orquestrador” (“orquestração” é o processo de gerenciamento de várias instâncias de servidor), que gerencia mudanças ambientais em uma instância de servidor, um contêiner de virtualização (opcional, mas bastante frequentemente usado), que permite dividir o aplicativo em camadas lógicas isoladas, e software de integração contínua – permitindo atualizações no código hospedado por meio de “scripts”.

Portanto, a orquestração permite ver o status dos servidores, implementar ou reverter atualizações no ambiente do servidor e assim por diante. A princípio, é improvável que esse aspecto o afete, pois para orquestrar qualquer coisa você precisa de vários servidores (você pode ter um, mas por que isso é necessário?), e para ter vários servidores você precisa deles. Dentre as ferramentas nesse sentido, a mais popular é o Kubernetes, desenvolvido por Google.

A próxima etapa é a virtualização no nível do sistema operacional. Hoje em dia, generalizou-se o conceito de “dockerização”, que vem da ferramenta Estivador, que fornece a funcionalidade de contêineres isolados uns dos outros, mas executados no contexto de um sistema operacional. O que isso significa: em cada um desses containers você pode rodar uma aplicação, ou mesmo um conjunto de aplicações, que vão acreditar que são as únicas em todo o SO, sem sequer suspeitar da existência de outra pessoa nesta máquina. Esta função é muito útil para lançar aplicações idênticas de versões diferentes, ou simplesmente aplicações conflitantes, bem como para dividir partes de uma aplicação em camadas. Essa conversão de camada pode posteriormente ser gravada em uma imagem, que pode ser usada, por exemplo, para implantar um aplicativo. Ou seja, ao instalar esta imagem e implantar os containers que ela contém, você obtém um ambiente pronto para rodar sua aplicação! Nas primeiras etapas, você pode usar esta ferramenta tanto para fins informativos quanto para obter benefícios muito reais, dividindo a lógica da aplicação em diferentes camadas. Mas vale dizer aqui que nem todo mundo precisa de dockerização, e nem sempre. A dockerização se justifica nos casos em que a aplicação é “fragmentada”, dividida em pequenas partes, cada uma responsável por sua tarefa, a chamada “arquitetura de microsserviços”.

Além de fornecer o ambiente, precisamos garantir uma implantação competente da aplicação, que inclui todos os tipos de transformações de código, instalação de bibliotecas e pacotes relacionados à aplicação, execução de testes, notificações sobre essas operações e assim por diante. Aqui precisamos prestar atenção a um conceito como “Integração Contínua” (CI – Integração Contínua). As principais ferramentas nesta área no momento são Jenkins (software CI escrito em Java pode parecer um pouco complicado no início), Travis C.I. (escrito em Ruby, subjetivo, um pouco mais simples Jenkins, no entanto, ainda é necessário algum conhecimento na área de configuração de implantação), CI do Gitlab (escrito em Ruby e vá).

Então, depois de falar sobre o ambiente em que sua aplicação funcionará, é hora de finalmente ver quais ferramentas o mundo moderno nos oferece para a criação dessas mesmas aplicações.

Vamos começar com o básico: Backend (backend) – parte do servidor. A escolha do idioma, conjunto de funções básicas e estrutura predefinida (framework) aqui é determinada principalmente por preferências pessoais, mas, mesmo assim, vale a pena mencionar para consideração (a opinião do autor sobre idiomas é bastante subjetiva, embora com uma reivindicação para uma descrição imparcial):

  • Python é uma linguagem bastante amigável para um usuário inexperiente, perdoa alguns erros, mas também pode ser bastante rígido com o desenvolvedor para que ele não faça nada de ruim. Já é uma linguagem bastante madura e significativa, que surgiu em 1991.
  • Go - uma linguagem do Google, também bastante amigável e prática, é bastante fácil de compilar e obter um arquivo executável em qualquer plataforma. Pode ser simples e agradável ou complexo e sério. Fresco e jovem, surgiu há relativamente pouco tempo, em 2009.
  • Rust é um pouco mais velho que seu colega anterior, lançado em 2006, mas ainda é bastante jovem em comparação com seus pares. Voltado para desenvolvedores mais experientes, embora ainda tente resolver muitas tarefas de baixo nível do programador.
  • Java é um veterano do desenvolvimento comercial, introduzido em 1995, e é uma das linguagens mais usadas no desenvolvimento de aplicativos corporativos atualmente. Com seus conceitos básicos e configuração pesada, o tempo de execução pode se tornar bastante desafiador para um iniciante.
  • ASP.net é uma plataforma de desenvolvimento de aplicativos lançada pela Microsoft. Para escrever funcionalidades, é usada principalmente a linguagem C# (pronuncia-se C Sharp), que apareceu em 2000. Sua complexidade é comparável ao nível entre Java e Rust.
  • O PHP, originalmente utilizado para pré-processamento de HTML, atualmente, embora detenha liderança absoluta no mercado de linguagens, há tendência de declínio de uso. Possui baixo limite de entrada e facilidade de escrita de código, mas ao mesmo tempo, ao desenvolver aplicativos bastante grandes, a funcionalidade da linguagem pode não ser suficiente.

Bom, a parte final da nossa aplicação - a mais tangível para o usuário - Frontend (frontend) – é a cara da sua aplicação, é com essa parte que o usuário interage diretamente.

Sem entrar em detalhes, o frontend moderno se sustenta em três pilares, frameworks (e nem tanto), para criação de interfaces de usuário. Assim, os três mais populares são:

  • ReactJS não é um framework, mas sim uma biblioteca. Na verdade, o framework difere de seu título orgulhoso apenas pela ausência de algumas funções “prontas para uso” e pela necessidade de instalá-las manualmente. Assim, existem diversas variações da “preparação” desta biblioteca, formando frameworks únicos. Pode ser um pouco difícil para um iniciante, devido a alguns princípios básicos e à configuração bastante agressiva do ambiente de construção. No entanto, para um início rápido, você pode usar o pacote “create-react-app”.
  • VueJS é uma estrutura para construção de interfaces de usuário. Desta trindade, leva justamente o título de framework mais fácil de usar: para o desenvolvimento em Vue, a barreira de entrada é menor do que a dos outros irmãos mencionados. Além disso, ele é o mais jovem entre eles.
  • Angular é considerado o mais complexo desses frameworks, o único que requer TypeScript (complemento para linguagem Javascript). Freqüentemente usado para criar aplicativos corporativos de grande porte.

Resumindo o que foi escrito acima, podemos concluir que agora a implantação de um aplicativo é radicalmente diferente de como esse processo acontecia antes. No entanto, ninguém está impedindo você de fazer a “implantação” à moda antiga. Mas será que o pouco tempo economizado no início compensa a enorme quantidade de erros que um desenvolvedor que escolher esse caminho terá que pisar? Eu acredito que a resposta é não. Ao gastar um pouco mais de tempo se familiarizando com essas ferramentas (e você não precisa de mais do que isso, porque precisa entender se precisa ou não delas em seu projeto atual), você pode jogar fora, reduzindo significativamente, por exemplo , casos de erros fantasmas dependendo do ambiente e que aparecem apenas no servidor de produção, análise noturna do que levou ao travamento do servidor e por que ele não inicia e muito mais.

Fonte: habr.com

Adicionar um comentário