====== Guia de arquitetura ====== Nesta página serão listadas sugestões para arquitetura de sistemas, incluindo ferramentas de desenvolvimento, frameworks, bibliotecas, serviços e ferramentas de deploy, e qualquer outra coisa pertinente ao tópico. Também serão listadas páginas com documentação interna sobre estes serviços. ===== Sistema operacional e ferramentas ===== Para desenvolver os sistemas da TCS é recomendável utilizar Linux, seja com uma instalação nativa ou através do Windows Subsystem for Linux (WSL) dentro do Windows. Para instruções de instalação do WSL, acesse [[https://docs.microsoft.com/pt-br/windows/wsl/install|esta página de ajuda da Microsoft]]. A distribuição Linux recomendada é a Ubuntu 20.04 ou a versão LTS mais recente, pela sua estabilidade e compatibilidade. As seguintes ferramentas também são necessárias ou recomendadas: * Git (obrigatório) ([[https://git-scm.com|Site]]) - Software de controle de versão * Visual Studio Code (recomendado) ([[https://code.visualstudio.com|Site]]) - Editor de texto poderoso e extensível. * Docker (recomendado) ([[https://docs.docker.com/engine/install/ubuntu|Manual de instalação no Ubuntu]]) - Containers multi-propósito para auxiliar na padronização de ambientes de trabalho dentro do time de desenvolvimento. * Docker Compose (recomendado) ([[https://docs.docker.com/compose/install|Manual de instalação no Ubuntu]]) - Facilita a utilização do docker. Dentro do Visual Studio Code é recomendado instalar as seguintes extensões: * Vue.js Extension Pack * ESLint * Prettier - Code formatter * EditorConfig for VS Code * GitLens — Git supercharged ===== Front-end ===== * Vue.js 3 ([[https://vuejs.org|Site]]) - Framework para interfaces web extremamente poderoso e simples de usar. * NuxtJS 3 ([[https://v3.nuxtjs.org|Site]]) - Framework para Vue 3 que garante melhor qualidade de vida para o desenvolvedor, simplificando muito operações simples do dia a dia. * Vuetify (opcional) ([[https://vuetifyjs.com|Site]]) - Biblioteca de componentes para Vue, que segue o material design e deixa o processo de desenvolvimento de sistemas bem mais rápido. Em 11/05/2022 a versão com suporte para o Vue 3 ainda está em beta. ===== Back-end ===== * NodeJS LTS mais recente ([[https://nodejs.org|Site]]) - Runtime JavaScript para o backend. Para instalá-lo no Linux (ou WSL) é recomendável usar o [[https://github.com/nvm-sh/nvm|nvm]]. Existem alternativas para Windows, que estão listadas na página do projeto do nvm. {{ ::arquivo:node_logo.png?150 |Logo do Node.js}} ==== Projetos em JavaScript ==== * [[npm>express]] - Framework simples para criação de aplicações web. * [[npm>sequelize]] - ORM com suporte para diversos bancos de dados. Também é possível usar o [[npm>typeorm]] ([[https://typeorm.io/?path=usage-with-javascript|Manual]]) como ORM, pois ele agora oferece suporte a JavaScript. Pode ser uma boa alternativa para projetos novos com tempo o suficiente disponível. ==== Projetos em TypeScript ==== * [[https://nestjs.com|NestJS]] - Um framework extremamente poderoso e abrangente. * [[npm>sequelize-typescript]] (opção mais conservadora) - Adaptação do Sequelize para TypeScript. * [[npm>typeorm]] ([[https://typeorm.io|Site]]) (opção mais arrojada) - ORM muito poderoso escrito em TypeScript, com suporte a diversos bancos de dados, porém ainda não utilizado pela TCS em nenhum projeto. ===== Banco de dados ===== O banco de dados recomendado para uso na maioria dos projetos é o [[https://www.postgresql.org|PostgreSQL]] ou suas variações, como o [[https://www.timescale.com|TimeScaleDB]]. O PostgreSQL é um banco de dados relacional open-source, completo e muito sólido, sendo uma ótima opção para uso geral. ===== Infraestrutura de nuvem ===== Para hospedar projetos na nuvem é necessário escolher um provedor de hospedagem. Esta escolha deve ser feita ponderando o orçamento e o tempo disponível para o projeto, pois quanto menor a quantidade de intervenção manual necessária na configuração e manutenção da nuvem, maior o seu custo. Isto é, um serviço gerenciado é bem mais caro do que uma máquina de uso geral, porém evita o trabalho de gerenciamento do serviço. As seguintes plataformas em nuvem são recomendadas: * [[https://aws.amazon.com|AWS]] (mais caro), para serviços gerenciados, ou caso o restante da infraestrutura do projeto já esteja lá. * [[https://www.vultr.com|Vultr]] (mais barato), para máquinas de uso geral, armazenamento de blocos e demais serviços não gerenciados. Para registrar os domínios, qualquer provedor é suficiente, porém é extremamente recomendado utilizar o Cloudflare ([[https://cloudflare.com|Site]]) para gerenciar o DNS destes domínios. O Cloudflare é um serviço gratuito, com ferramentas muito poderosas e rápidas, como [[wp>DNS]], [[wp>Rede de fornecimento de conteúdo|CDN]], serviço de redirecionamento de e-mails, entre outros. ===== Lista de projetos ===== Um bom jeito de começar é checar alguns projetos de referência disponíveis nos repositórios da empresa. Como por exemplo, o [[projeto:bamin|SGS da BAMIN]] ou o [[projeto:utilities|Utilities da Usiminas]]. A lista de todos os projetos documentados nesta wiki pode ser visto na página de [[projetos]].