Checklist para criação e publicação de aplicativos web

Para criar seu aplicativo web hoje em dia, não é suficiente apenas saber desenvolvê-lo. Um aspecto importante é a configuração das ferramentas de implementação do aplicativo, monitoramento, além da gestão e administração do ambiente onde ele opera. A era da implementação manual está se tornando obsoleta; mesmo para projetos pequenos, ferramentas de automação podem trazer benefícios significativos. Ao fazer a implementação 'manual', muitas vezes podemos esquecer de transferir algo, considerar algum detalhe, lançar um teste esquecido; essa lista pode continuar por um bom tempo.

Este artigo pode ajudar aqueles que estão apenas aprendendo os fundamentos da criação de aplicativos web e querem entender melhor os principais termos e convenções.

Assim, a construção de aplicativos pode ser dividida em duas partes: tudo que se refere ao código do aplicativo e tudo que se refere ao ambiente onde esse código é executado. O código do aplicativo, por sua vez, também é dividido em lado servidor (aquele que é executado no servidor, frequentemente: lógica de negócios, autorização, armazenamento de dados, etc.) e lado cliente (aquele que é executado na máquina do usuário: frequentemente interface e a lógica associada).

Vamos começar, provavelmente, pelo ambiente.

A base para o funcionamento de qualquer código, sistema ou software é o sistema operacional, por isso abaixo vamos analisar os sistemas mais populares apresentados no mercado de hospedagem e fornecer uma breve descrição deles:

Windows Server – o famoso Windows, mas na versão para servidores. Alguns recursos disponíveis na versão de cliente (normal) do Windows não estão presentes aqui, como alguns serviços de coleta de estatísticas e software desse tipo, mas há um conjunto de utilitários para administração de rede, software básico para implementação servidores (web, ftp, ...). De modo geral, o Windows Server se parece como um Windows comum, funciona como um Windows comum, no entanto, custa 2 vezes mais do que seu equivalente normal. No entanto, considerando que a implementação do aplicativo será feita, provavelmente, em um servidor dedicado/virtual, o custo final para você pode aumentar, mas não de forma crítica. Como a plataforma Windows ocupa uma parte substancial do mercado de sistemas operacionais para usuários, sua edição de servidor será mais familiar para a maioria dos usuários.

Unix- semelhante a um sistema. O funcionamento tradicional nesses sistemas não prevê 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 nesse formato pode ser desafiador, como a saída de um editor de texto bastante popular. Vim, questão que, ao longo de 6 anos, já acumulou mais de 1,8 milhões de visualizações. As principais distribuições (edições) dessa família são: Debian — uma distribuição popular, cujas versões de pacotes são principalmente orientadas para LTS (Long Term Support – suporte por um longo período), o que se reflete em uma grande confiabilidade e estabilidade do sistema e dos pacotes; Ubuntu – contém distribuições de todos os pacotes em suas versões mais recentes, o que pode afetar a estabilidade, mas permite usar funcionalidades fornecidas com novas versões; Red Hat Enterprise Linux – um SO, posicionado para uso comercial, é pago, mas inclui suporte dos fornecedores de software, além de alguns pacotes proprietários e pacotes de drivers; CentOS – opensource 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 essa área, minha recomendação seriam sistemas Windows Server, ou Ubuntu. Se considerarmos o Windows, isso se deve principalmente à familiaridade do sistema, Ubuntu – maior tolerância a atualizações e, por outro lado, por exemplo, menos problemas ao iniciar projetos em tecnologias que exigem novas versões.

Assim, após decidir sobre o SO, vamos falar sobre um conjunto de ferramentas que permitem implantar (instalar), atualizar e monitorar o estado do aplicativo ou de suas partes no servidor.

A próxima decisão importante será – hospedar seu aplicativo e o servidor para ele. Atualmente, existem 3 caminhos mais comuns:

  • Hospedar (manter) o servidor em casa, por conta própria — a opção mais econômica, mas será necessário contratar um IP estático do provedor, para que seu recurso não mude de endereço ao longo do tempo.
  • Alugar um Servidor Dedicado (VDS) – e gerenciar a administração e a escalabilidade da carga por conta própria.
  • Pagar (frequentemente permitindo experimentar gratuitamente a funcionalidade da plataforma) uma assinatura em um serviço de hospedagem em nuvem, onde o modelo de pagamento por recursos utilizados é bastante comum. Os principais representantes deste setor incluem: Amazon AWS (oferece um ano de uso gratuito, mas com um limite mensal), Google Cloud (oferece US$ 300 em crédito, que podem ser gastos em um ano em serviços de nuvem hospedagem), Yandex.Облако (oferece 4000 rublos por 2 meses), Microsoft Azure (oferece acesso gratuito a serviços populares por um ano, + 12 500 rublos para qualquer serviço durante um mês). Assim, é possível experimentar qualquer um desses provedores sem gastar um centavo, mas obtendo uma ideia geral sobre a qualidade e o nível dos serviços prestados.

Dependendo do caminho escolhido, a única coisa que mudará é quem, em grande parte, é responsável por determinada área da administração. Se você fizer a hospedagem por conta própria, deve entender que qualquer interrupção de eletricidade, internet, do próprio servidor ou do software instalado nele – tudo isso recairá totalmente sobre seus ombros. No entanto, para aprendizado e testes, isso é mais do que suficiente.

Se você não tem um maquinário extra que possa servir como servidor, então você desejará optar pela segunda ou terceira opções. O segundo caso é semelhante ao primeiro, exceto pelo fato de que você transfere a responsabilidade pela disponibilidade do servidor e seu desempenho para o provedor de hospedagem. A administração do servidor e do software ainda está sob seu controle.

E, finalmente, a opção de alugar recursos de provedores de nuvem. Aqui você pode configurar o gerenciamento automático de quase tudo, sem se aprofundar muito nos detalhes técnicos. Além disso, em vez de uma única máquina, você pode ter várias instâncias executadas em paralelo, que podem, por exemplo, responder por diferentes partes do aplicativo, sem uma grande diferença de custo em comparação à posse de um servidor dedicado. E ainda, aqui existem ferramentas de orquestração, containerização, implantação automática, integração contínua e muito mais! Algumas dessas coisas veremos mais abaixo.

De forma geral, a infraestrutura do servidor se apresenta da seguinte maneira: temos o chamado "orquestrador" ("orquestração" — o processo de gerenciamento de várias instâncias de servidores), que gerencia as mudanças no ambiente da instância do servidor, um contêiner de virtualização (opcional, mas frequentemente utilizado), que permite dividir o aplicativo em camadas lógicas isoladas, e um software de Integração Contínua — que possibilita a atualização do código hospedado por meio de "scripts".

Portanto, a orquestração permite que você veja os status dos servidores, realize "aplicações" ou "reversões" de atualizações do ambiente do servidor, e assim por diante. Nos primeiros momentos, esse aspecto dificilmente o afetará, uma vez que, para orquestrar algo, são necessárias várias servidores (pode até ser um, mas para que isso?), e para ter várias servidores, é necessário haver uma demanda por eles. Entre as ferramentas dessa área, a mais conhecida é o Kubernetes, que foi desenvolvido Google.

O próximo nível é a virtualização em nível de OS. Atualmente, o conceito de "Dockerização" — que se originou da ferramenta, ganhou grande popularidade. Docker, fornecendo a funcionalidade de contêineres isolados, mas executados no contexto de um único sistema operacional. O que isso significa: em cada um desses contêineres, é possível executar um aplicativo, ou até mesmo um conjunto de aplicativos, que acreditarão ser os únicos em todo o SO, sem sequer suspeitar da existência de outros na mesma máquina. Essa função é muito útil tanto para executar versões diferentes dos mesmos aplicativos ou simplesmente aplicativos conflitantes, assim como para dividir partes do aplicativo em camadas. Essa cópia em camadas pode, posteriormente, ser gravada em uma imagem, que pode ser usada, por exemplo, para o deploy do aplicativo. Ou seja, ao instalar essa imagem e iniciar os contêineres que ela contém, você obtém um ambiente pronto para executar seu aplicativo! Nos primeiros passos, você pode usar esta ferramenta tanto para fins informativos como para obter um benefício real, separando a lógica do aplicativo em diferentes camadas. Mas, vale a pena mencionar que a dockerização não é necessária para todos, e nem sempre. A dockerização é justificada em casos em que o aplicativo é 'fragmentado', dividido em partes menores, cada uma responsável por sua tarefa, a chamada 'arquitetura de microsserviços'.

Além disso, além de fornecer o ambiente, também precisamos garantir um deploy adequado do aplicativo, que inclui todas as possíveis transformações de código, instalação de bibliotecas e pacotes relacionados ao aplicativo, execução de testes, notificações sobre essas operações e assim por diante. Aqui, precisamos prestar atenção ao conceito de 'Integração Contínua' (CI – Continuous Integration). Os principais instrumentos nesta área no momento são Jenkins (um software para CI, escrito em Java, que pode parecer um pouco complicado no início), Travis CI (escrito em Ruby, subjetivamente, um pouco mais fácil que o Jenkins,mas ainda assim, requer alguns conhecimentos em configuração de deploy), Gitlab CI (escrito em Ruby e Go).

Então, após falar sobre o ambiente em que seu aplicativo irá trabalhar, é hora finalmente de olhar para quais ferramentas o mundo moderno nos oferece para criar esses aplicativos.

Começaremos pela base: Backend (backend) – parte do servidor. A escolha da linguagem, do conjunto de funções básicas e da estrutura predefinida (framework) aqui é determinada principalmente por preferências pessoais, mas vale a pena mencionar para consideração (a opinião do autor sobre as linguagens é bastante subjetiva, embora pretenda ser uma descrição imparcial):

  • Python – uma linguagem bastante amigável para usuários inexperientes, que perdoa alguns erros, mas também pode ser rigorosa com o desenvolvedor, para que ele não cometa erros. É uma linguagem de programação já madura e significativa, criada em 1991.
  • Go – uma linguagem da Google, também bastante amigável e conveniente, fácil de compilar e gerar um arquivo executável em qualquer plataforma. Pode ser simples e agradável, assim como complexa e séria. É nova e jovem, surgindo relativamente recentemente, em 2009.
  • Rust – um pouco mais velha que sua colega anterior, lançada em 2006, ainda é relativamente jovem em comparação com seus irmãos. É voltada para desenvolvedores mais experientes, embora ainda busque resolver muitas tarefas de baixo nível pelo programador.
  • Java – um veterano do desenvolvimento comercial, surgido em 1995, é uma das linguagens mais utilizadas no desenvolvimento de aplicações corporativas atualmente. Seus conceitos básicos e a configuração pesada do ambiente de execução podem ser bastante desafiadores para iniciantes.
  • ASP.net – uma plataforma para desenvolvimento de aplicações, lançada pela Microsoft. Para a implementação de funcionalidades, utiliza-se principalmente a linguagem C# (pronunciado Cí Sharp), que surgiu em 2000. Sua complexidade é comparável ao nível entre Java e Rust.
  • PHP – originalmente utilizado para pré-processamento de HTML, atualmente mantém uma liderança absoluta no mercado de linguagens, mas há uma tendência de queda no seu uso. É caracterizado por uma baixa barreira de entrada e simplicidade na escrita de código, mas, ao desenvolver aplicações de grande porte, suas funcionalidades podem ser insuficientes.

E a parte final do nosso aplicativo – a mais tangível para o usuário – Frontend (frontend) – é a face do seu aplicativo, é com esta parte que o usuário interage diretamente.

Sem entrar em detalhes, o front-end moderno se baseia em três pilares, frameworks (e não só), para a criação de interfaces de usuário. Assim, os três mais populares são:

  • ReactJS – não é um framework, mas uma biblioteca. De fato, a única diferença em relação ao título orgulhoso de framework é a ausência de algumas funções 'prontas para uso' e a necessidade de instalá-las manualmente. Assim, existem várias variações de 'preparação' dessa biblioteca, formando frameworks distintos. Para novatos, pode ser um pouco complicado devido a alguns princípios básicos e a configuração agressiva do ambiente de build. No entanto, para um início rápido, pode-se usar o pacote 'create-react-app'.
  • VueJS – é um framework para construir interfaces de usuário. Dentre esse trio, merece o título de framework mais amigável ao usuário, pois o nível de entrada para desenvolvimento em Vue é mais baixo do que para os outros mencionados. Além disso, entre eles, é o mais jovem.
  • Angular – é considerado o mais difícil dos frameworks apresentados, sendo o único que exige a presença de TypeScript (uma extensão da linguagem Javascript). Frequentemente é aplicado para construir grandes aplicativos corporativos.

Resumindo o que foi dito, pode-se concluir que atualmente a implementação de aplicativos é radicalmente diferente do que ocorria antes. No entanto, nada impede que o 'deploy' seja feito da forma antiga. Mas vale a pena arriscar, economizando um pouco de tempo no início, para enfrentar um grande número de armadilhas que um desenvolvedor escolheu esse caminho? Eu acredito que a resposta é 'não'. Gastando um pouco mais de tempo para se familiarizar com essas ferramentas (pois mais tempo não é necessário, já que você precisa entender se elas são necessárias no seu projeto atual ou não), você pode recuperar esse tempo, reduzindo significativamente, por exemplo, os casos de erros fantasma, que dependem do ambiente e que só aparecem no servidor de produção, as noites analisando o que causou a queda do servidor e por que ele não está inicializando, e muito mais.

Fonte: habr.com

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster