Para criar seu próprio aplicativo da web hoje em dia, não é suficiente ser capaz de desenvolvê-lo. Um aspecto importante é a configuração de ferramentas para implantação, monitoramento e gerenciamento e administração do ambiente em que opera. A era da implantação manual está caindo no esquecimento, mesmo para pequenos projetos, as ferramentas de automação podem trazer benefícios tangíveis. Quando implantados “nas mãos”, muitas vezes podemos esquecer de transferir alguma coisa, levar em conta uma ou outra nuance, executar um teste esquecido, essa lista pode continuar por algum tempo.
Este artigo pode ajudar aqueles que entendem apenas o básico da criação de aplicativos da Web e desejam entender um pouco sobre os termos e convenções básicas.
Portanto, a construção de aplicativos ainda pode ser dividida em duas partes, isso é tudo o que se refere ao código do aplicativo e tudo o que se refere ao ambiente em que esse código é executado. O código do aplicativo, por sua vez, também é dividido em servidor (um que é executado no servidor, geralmente: lógica de negócios, autorização, armazenamento de dados etc.) e cliente (um que é executado na máquina do usuário: geralmente na interface e relacionado). com isso lógica).
Vamos começar na quarta-feira.
A base para a operação de qualquer código, sistema e software é o sistema operacional; portanto, examinaremos os sistemas mais populares no mercado de hospedagem e forneceremos uma breve descrição:
O Windows Server é o mesmo Windows, mas na variação do servidor. Algumas funcionalidades disponíveis na versão cliente (regular) do Windows não estão presentes aqui, por exemplo, alguns serviços de coleta de estatísticas e software semelhante, mas há um conjunto de utilitários para administração de rede, software básico para implantação de servidor (web, ftp, ...). Em geral, o Windows Server se parece com um Windows comum, com um charlatão como um Windows comum, no entanto, custa 2 vezes mais que o equivalente normal. No entanto, como 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 SOs para usuários, sua edição de servidor será a mais familiar para a maioria dos usuários.
Sistema tipo
Unix . O trabalho tradicional nesses sistemas não implica uma interface gráfica familiar, oferecendo ao usuário apenas um console como elemento de controle. Para um usuário inexperiente, trabalhar em um formato desse tipo pode ser difícil, o que
deixa apenas
o editor de texto
Vim , que é bastante popular nos dados, a questão relacionada a isso há 6 anos já ganhou mais de 1,8 milhão 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 focadas principalmente no LTS (
Suporte a Longo Prazo - suporte por um longo tempo), o que se reflete na 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 que você use a funcionalidade que acompanha as novas versões;
Red Hat Enterprise Linux - um sistema operacional comercializado para uso comercial é pago, no entanto, inclui suporte de fornecedores de software, alguns pacotes proprietários e de drivers;
CentOS - variação de
código aberto do Red Hat Enterprise Linux, caracterizada pela falta de pacotes e suporte proprietários.
Para aqueles que apenas compreendem o desenvolvimento dessa área, minha recomendação seria o
Windows Server ou o
Ubuntu . Se considerarmos o Windows, esse é principalmente um hábito do sistema, o
Ubuntu - mais tolerância a atualizações e, por exemplo, menos problemas ao iniciar projetos em tecnologias que requerem novas versões.
Assim, tendo decidido o sistema operacional, vamos para 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 servidor. No momento, as mais comuns são três maneiras:
- Hospedar (manter) um servidor por si mesmo é a opção mais econômica, mas você precisará solicitar um IP estático ao seu provedor para que seu recurso não mude seu endereço ao longo do tempo.
- Alugue um servidor dedicado (VDS) - e gerencie de forma independente sua administração e dimensionamento de carga
- Pague (geralmente ao mesmo tempo em que eles oferecem a funcionalidade da plataforma gratuitamente) uma assinatura em alguns servidores de nuvem, onde o modelo de pagamento pelos recursos usados é bastante comum. Os representantes mais destacados dessa direção: Amazon AWS (dê um ano de uso gratuito dos serviços, mas com um limite mensal), Google Cloud (dê US $ 300 a uma conta que pode ser gasta durante o ano em serviços de hospedagem em nuvem), Yandex. Cloud (dê 4000 rublos) por 2 meses), Microsoft Azure (conceda acesso gratuito a serviços populares por um ano, + 12 500 rublos por qualquer serviço por um mês). Assim, você pode tentar qualquer um desses provedores sem gastar um centavo, mas obtendo uma opinião aproximada sobre a qualidade e o nível de serviço.
Dependendo do caminho escolhido, no futuro apenas o fato mudará, sobre quem, na maioria das vezes, é de responsabilidade de uma área específica da administração. Se você se hospeda, deve entender que qualquer interrupção na eletricidade, na Internet, no próprio servidor e no software implantado nele - tudo isso está completamente em seus ombros. No entanto, para treinamento e teste, isso é mais do que suficiente.
Se você não possui uma máquina extra que possa desempenhar o papel de servidor, use a segunda ou terceira via. O segundo caso é idêntico ao primeiro, com a exceção de que você transfere a responsabilidade pela disponibilidade do servidor e seu poder para os ombros do host. A administração de servidores e software ainda está sob seu controle.
E, finalmente, a opção de alugar a capacidade dos provedores de nuvem. Aqui você pode configurar o controle automatizado de quase tudo, sem muito esforço em nuances técnicas. Além disso, em vez de uma máquina, é possível ter várias instâncias (instâncias) em execução em paralelo, as quais, por exemplo, podem ser responsáveis por diferentes partes do aplicativo, sem diferir muito em custo da propriedade de um servidor dedicado. Além disso, existem instrumentos de orquestração, conteinerização, implantação automática, integração contínua e muito mais! Algumas dessas coisas que consideraremos abaixo.
Em geral, a infraestrutura do servidor é a seguinte: temos o chamado "orquestrador" ("orquestração" - o processo de gerenciar várias instâncias do servidor) que gerencia alterações ambientais na instância do servidor, um contêiner de virtualização (opcional, mas frequentemente usado) que permite dividir o aplicativo em camadas lógicas isoladas e software para integração contínua - que permite atualizar o código hospedado por meio de "scripts".
Portanto, a orquestração permite ver o status do servidor, reverter ou reverter as atualizações do ambiente do servidor e assim por diante. A princípio, é improvável que esse aspecto o preocupe, porque para orquestrar algo, você precisa de vários servidores (pode um, mas por que é necessário?), E para que haja vários servidores, você precisa deles. Das ferramentas nesta área, é principalmente o Kubernetes, desenvolvido pelo
Google , que é ouvido.
O próximo passo é a virtualização no nível do SO. Agora, o conceito de "dockerização" é generalizado, proveniente da ferramenta
Docker , que fornece a funcionalidade de contêineres isolados um do outro, mas lançados no contexto do mesmo sistema operacional. O que isso significa: em cada um desses contêineres, você pode executar um aplicativo ou até um conjunto de aplicativos que assumirá que eles são os únicos em todo o sistema operacional, sem nem mesmo saber sobre a existência de outra pessoa nesta máquina. Esta função é muito útil para iniciar os mesmos aplicativos de versões diferentes ou apenas aplicativos conflitantes, bem como para dividir partes do aplicativo em camadas. Esse elenco de camadas pode ser gravado posteriormente em uma imagem que pode ser usada, por exemplo, para implantar um aplicativo. Ou seja, instalando esta imagem e expandindo os contêineres que ela contém, você obtém um ambiente pronto para iniciar seu aplicativo! Nas primeiras etapas, você pode usar essa ferramenta para fins educacionais e para obter um benefício muito real, espalhando a lógica do aplicativo em diferentes camadas. Mas vale a pena dizer aqui que nem todo mundo precisa de dockerização, e nem sempre. O encaixe é justificado nos casos em que o aplicativo é "fragmentado", dividido em pequenas partes, cada uma responsável por sua própria tarefa, a chamada "arquitetura de microsserviço".
Além de fornecer o ambiente, também precisamos fornecer uma implantação competente do aplicativo, que inclua todos os tipos de transformação de código, instalação de bibliotecas e pacotes associados ao aplicativo, 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 - Continuous Integration ). As principais ferramentas nessa área no momento são o Jenkins (o software para CI escrito em Java pode parecer um pouco complicado no início), o
Travis CI (escrito em Ruby, subjetivamente, é um pouco mais simples que o
Jenkins , no entanto, algum conhecimento em áreas de configuração de implantação),
Gitlab CI (escrito em
Ruby and Go ).
Então, depois de falar sobre o ambiente em que seu aplicativo funcionará, é hora de finalmente ver quais ferramentas o mundo moderno nos oferece para criar esses mesmos aplicativos.
Vamos começar com o básico:
Backend (backend) - o lado do servidor. A escolha da linguagem, um conjunto de funções básicas e uma estrutura predefinida (estrutura) aqui é determinada principalmente por preferências pessoais, mas, no entanto, vale a pena mencionar para consideração (a opinião do autor sobre línguas é bastante subjetiva, embora com uma reivindicação de uma descrição imparcial):
- O Python é uma linguagem amigável o suficiente para um usuário inexperiente, perdoa alguns erros, mas também pode ser bastante rigoroso com o desenvolvedor para que ele não faça nada de ruim. Já bastante maduro e significativo PL, que apareceu em 1991.
- Go é um idioma do Google, também é bastante amigável e conveniente, é fácil o suficiente para compilar e obter um arquivo executável em qualquer plataforma. Pode ser simples e agradável, ou pode ser difícil e sério. Fresco e jovem, apareceu relativamente recentemente, em 2009.
- Rust - um pouco mais velho que o colega anterior, lançado em 2006, ainda é muito jovem em relação a seus irmãos. Ele é destinado a desenvolvedores mais experientes, embora ainda tente resolver muitas tarefas de baixo nível para o programador.
- Java é um veterano de desenvolvimento comercial que surgiu em 1995, uma das linguagens mais usadas no desenvolvimento de aplicativos corporativos no momento. Com seus conceitos básicos e ajuste pesado do ambiente de tempo de execução, pode se tornar bastante complicado para iniciantes.
- O ASP.net é uma plataforma de desenvolvimento de aplicativos lançada pela Microsoft. Para escrever a funcionalidade, o idioma C # (pronunciado C Sharp) é usado principalmente, que apareceu em 2000. Sua complexidade é comparável ao nível entre Java e Rust.
- PHP - originalmente usado para pré-processamento de HTML, no momento, embora mantenha a liderança absoluta no mercado de idiomas, há uma tendência a declinar no uso. Possui um limite baixo de entrada, facilidade de escrita de código, mas ao mesmo tempo, ao desenvolver aplicativos grandes o suficiente, a funcionalidade do idioma pode não ser suficiente.
Bem, a parte final do nosso aplicativo - a mais tangível para o usuário -
Frontend (frontend) - é a face do seu aplicativo, é nessa parte que o usuário interage diretamente.
Sem entrar em detalhes, o frontend moderno se baseia em três pilares, estruturas (e não tanto), para criar interfaces de usuário. Assim, os três mais populares são:
- O ReactJS não é uma estrutura, mas uma biblioteca. Na verdade, a estrutura difere do título orgulhoso apenas na ausência de algumas funções "prontas para uso" e na necessidade de instalá-las manualmente. Assim, existem várias variações da "preparação" desta biblioteca, formando um tipo de estrutura. Para um iniciante, isso pode ser complicado, devido a alguns princípios básicos e uma configuração bastante agressiva do ambiente de montagem. No entanto, para um início rápido, você pode usar o pacote "create-react-app".
- O VueJS é uma estrutura para criar interfaces personalizadas. Dessa trindade, ele legitimamente assume o título de estrutura mais fácil de usar, pois no desenvolvimento do Vue o limiar de entrada é menor que o dos outros irmãos citados. Além disso, entre eles, ele é o mais novo.
- Angular - considerada a mais complexa das estruturas fornecidas, a única requer o TypeScript (um complemento para a linguagem Javascript). Geralmente usado para criar grandes aplicativos corporativos.
Resumindo o exposto, podemos concluir que agora a implantação do aplicativo é fundamentalmente diferente da maneira como esse processo prosseguiu. No entanto, ninguém se preocupa em realizar a "implantação" à moda antiga. Mas vale a pena o pouco tempo economizado no início - um grande número de rakes que o desenvolvedor que escolheu esse caminho precisa pisar? Eu acredito que a resposta é não. Depois de passar um pouco mais de tempo se familiarizando com essas ferramentas (e você não precisa de mais, porque precisa entender se precisa ou não delas no projeto atual), é possível executá-la, reduzindo significativamente, por exemplo, casos de erros fantasmagóricos que dependem do ambiente e manifestando apenas no servidor de produção, análise noturna, o que levou ao travamento do servidor e por que ele não inicia e muito mais.