Introdução

Plataformas como serviço (PaaS) são serviços baseados em nuvem que ajudam a eliminar o custo e a complexidade do desenvolvimento de aplicativos. Serviços como Heroku , Google App Engine ou AWS Elastic Beanstalk permite que os desenvolvedores criem, executem e operem aplicativos inteiramente na nuvem com componentes de software pré-construídos que ajudam crie e dimensione aplicativos rapidamente.

O problema com esses serviços é que, com usabilidade conveniente, vem um preço mais alto. Depois que você sai do nível gratuito (por exemplo, no Heroku), começa a ficar caro. Se você deseja adicionar um banco de dados ao seu serviço como um complemento, precisa cavar ainda mais fundo no seu bolso.

E se houvesse a opção de implementar sua própria PaaS em qualquer infraestrutura de sua preferência, com os benefícios de um serviço PaaS típico e custos drasticamente reduzidos? Deixe-me apresentá-lo ao CapRover-um PaaS DIY de código aberto.

O que é CapRover?

CapRover é uma implantação de aplicativo/banco de dados e gerenciador de servidor web fácil de usar que funciona para uma variedade de aplicativos, como Node.js , Ruby, PHP, Postgres e MongoDB. Ele é executado rapidamente e é muito robusto, pois usa Docker, Nginx, LetsEncrypt e NetData por trás de sua interface amigável.

CapRover ajuda você a aumentar sua produtividade, concentrando-se em seus aplicativos em vez da infraestrutura subjacente. Além disso, com os One Click Apps da CapRover, você pode configurar aplicativos como Postgres, MongoDB, Plausible Analytics ou PGAdmin apenas clicando em um único botão.

CapRover vs Heroku

CapRover é uma excelente alternativa ao Heroku. Heroku é uma plataforma como serviço (PaaS) que permite aos desenvolvedores construir, executar e operar aplicativos inteiramente na nuvem. Desde o seu lançamento, o Heroku tem ajudado muitos desenvolvedores a melhorar sua produtividade e implantar aplicativos com mais facilidade.

No entanto, também há desvantagens no Heroku. A grande usabilidade tem um custo. Embora o Heroku ofereça uma camada gratuita, se você quiser executar um aplicativo pronto para produção, precisará usar uma das camadas pagas. O preço dessas camadas é bastante caro e é definitivamente baseado no fator de usabilidade, especialmente em comparação com as mesmas especificações que você obteria ao comprar um Servidor Privado Virtual (VPS). Além disso, todos os aplicativos no nível gratuito do Heroku entram em suspensão após uma inatividade de cerca de 30 minutos.

E se houvesse uma maneira de implementar sua própria versão do Heroku em seu próprio VPS? Vamos falar sobre CapRover, nosso próprio PaaS privado, de código aberto e gratuito.

Estes são alguns dos excelentes recursos do CapRover:

  • CLI para automação e script
  • Web GUI para acessibilidade e conveniência
  • Sem bloqueio. Você pode remover CapRover e seus aplicativos continuarão funcionando
  • Docker Swarm sob o capô para conteinerização e agrupamento
  • Nginx (modelo totalmente personalizável) sob o capô para balanceamento de carga
  • Vamos criptografar nos bastidores para SSL (HTTPS) grátis

Instalando CapRover e implantando seu primeiro aplicativo

Neste tutorial, o objetivo é ensiná-lo a instalar CapRover em seu próprio VPS e, em seguida, demonstrar como implantar um aplicativo Node.js e Postgres com um fluxo de CI/CD suave, para que, quando empurrarmos para nosso branch mestre , nosso aplicativo é reconstruído automaticamente.

Pré-requisitos

  • Você adquiriu um servidor privado virtual (VPS)
  • Você adquiriu um domínio
  • Node.js e npm instalados em sua máquina local
  • Noções básicas de Docker
  • Noções básicas de Node.js
  • Conhecimento básico dos comandos do Linux
  • Noções básicas de como gerar chaves SSH

Adquirindo um VPS e selecionando um sistema operacional

O site oficial da CapRover sugere que seu VPS tenha no mínimo 1 GB de RAM para evitar problemas no processo de construção. Existem muitos provedores de serviços em nuvem, como Digital Ocean, Vultr, Hetzner ou Linode, onde você pode comprar um VPS a partir de apenas três dólares por mês.

CapRover é testado no Ubuntu 18.04. O site oficial da CapRover sugere o Ubuntu 18.04 em vez do Ubuntu 20 para minimizar os problemas de produção. O Ubuntu 18.04 continuará a receber atualizações pelo menos até 2023.

Para este tutorial, usarei o CX11 VPS da Hetzner que vem com 1 vCPU, 2 GB de RAM, 20 GB de espaço em disco, 20 TB de tráfego e custa apenas três dólares por mês.

Configurando seu VPS

Seu VPS recém-saído da caixa não contém nada nele, a não ser o seu sistema operacional. Antes de instalar o CapRover, primeiro temos que nos certificar de que temos todas as ferramentas necessárias instaladas que nos permitem fazer isso. Felizmente, a única coisa de que realmente precisamos é o Docker.

Docker é um mecanismo de contêiner que usa recursos do kernel do Linux, como namespaces e grupos de controle para criar contêineres no topo de um sistema operacional (saiba mais sobre ele aqui ).

Se você nunca ouviu falar do Docker, recomendo vivamente que aprenda o básico antes de instalar e trabalhar com o CapRover. Isso também aumentará drasticamente sua produtividade de desenvolvimento.

Instalando o Docker

Tudo bem, vamos instalar o Docker Community Edition (Docker CE).

O código a seguir atualizará o índice do pacote apt e instalará os pacotes que permitem ao apt usar um repositório sobre HTTPS:

 sudo apt-get update sudo apt-get install \\ apt-transport-https \\ certificados ca \\ ondulação \\ gnupg-agent \\ software-propriedades-comuns

Adicione a chave GPG oficial do Docker ( GNU Privacy Guard ):

 curl-fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg--dearmor-o/usr/share/keyrings/docker-archive-keyring.gpg

Atualize o índice do pacote apt novamente e instale a versão mais recente do Docker Engine e Containerd para o seu Ubuntu 18.04:

 sudo add-apt-repository"deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

Execute docker-v para ver sua versão do Docker e verifique se a instalação foi bem-sucedida.

Finalmente, podemos instalar o CapRover magicamente com este comando simples:

 docker run-p 80:80-p 443: 443-p 3000: 3000-v/var/run/docker.sock:/var/run/docker.sock-v/captain:/captain caprover/caprover

Se você estiver usando o Digital Ocean, também pode usar o droplet One-Click que instala automaticamente o CapRover para você.

Configurando o domínio

Em seguida, queremos apontar nosso domínio para nosso VPS.

Primeiro, temos que encontrar o endereço IP público (ou externo) do nosso VPS. Você encontrará esse endereço IP facilmente em sua interface de usuário VPS:

Captura de tela do endereço IP em CapRover

Em seguida, vá para o site do registrador de seu domínio. Faça login e navegue até as configurações de DNS do seu domínio. Usaremos um subdomínio que apontaremos para nosso VPS por meio de um registro A:

Captura de tela de um registro com o mesmo endereço IP

Estamos usando um subdomínio curinga aqui, o que permite que nossos aplicativos sejam acessíveis através de yourApplicationName.server.yourDomainName.com (observe que você não precisa usar .server aqui, você pode usar qualquer nome que você quiser).

Configurando o firewall

Um firewall é um dispositivo de segurança de rede que monitora o tráfego de entrada e saída da rede e decide se permite ou bloqueia o tráfego específico com base em um conjunto definido de regras de segurança. Para que o CapRover funcione corretamente e se comunique com o mundo externo, precisamos ter certeza de abrir as portas adequadas. De acordo com o site oficial da CapRover, ele usa:

  • 80 TCP para conexões HTTP regulares
  • 443 TCP para conexões HTTPS seguras
  • 3000 TCP para instalação inicial do Captain (pode ser bloqueado assim que o Captain for anexado a um domínio)
  • 996 TCP para conexões HTTPS seguras específicas para Docker Registry
  • 7946 TCP/UDP para descoberta de rede de contêiner
  • 4789 TCP/UDP para rede de sobreposição de contêiner
  • 2377 TCP/UDP para Docker Swarm API

Usaremos a ferramenta de configuração de firewall padrão para Ubuntu UFW (Uncomplicated Firewall) para configurar nosso firewall.

Primeiro, ative o firewall:

 sudo ufw enable 

Então, permita as portas mencionadas anteriormente:

 sudo ufw allow 80.443.3000.996.7946.4789.2377/tcp
sudo ufw allow 7946,4789,2377/udp

Você pode executar o ufw status para verificar o status atual do seu firewall.

Você deve ter notado que provedores como Digital Ocean ou Hetzner fornecem ao seu VPS uma seção de firewall dedicada em seus sites. Eles são chamados de firewalls de nuvem. Os firewalls de nuvem filtram o tráfego antes mesmo de ele chegar ao servidor. Isso pode ser muito benéfico no caso de um ataque DDoS, porque o tráfego malicioso nem mesmo alcançará seu VPS. Se você configurar um firewall de nuvem, não é necessário ter um firewall de software como o UFW habilitado. Como a configuração de um firewall na nuvem depende principalmente da interface do usuário do provedor, estamos usando o UFW para este tutorial.

Inicializando CapRover

Estamos quase prontos! Em sua máquina local (no meu caso, é um Macbook Pro), vamos instalar o CapRover CLI via npm e, em seguida, configurar o servidor.

Instale o CapRover CLI:

 npm i-g caprover 

Agora podemos executar o comando setup. Com base em alguma entrada, CapRover nos permitirá configurar uma nova senha segura (o padrão é captain42 ), bem como um certificado SSL para que possamos habilitar HTTPS:

 configuração de servidores caprover 

Aqui está um exemplo de saída:

 Configure a máquina CapRover em seu servidor... ? você já iniciou o contêiner CapRover em seu servidor? sim
? Endereço IP do seu servidor: [yourIPAddress]
? Domínio raiz do servidor CapRover: server. [YourDomainName].com
? nova senha CapRover (mínimo de 8 caracteres): [oculto]
? insira a nova senha do CapRover novamente: [oculto]
? endereço de e-mail"válido"para obter o certificado e habilitar HTTPS: [[email protected]]
? Nome da máquina CapRover, com quem as credenciais de login são armazenadas localmente: [yourCustomCapRoverMachineName] Configuração do servidor CapRover concluída: está disponível como [yourCustomCapRoverMachineName] em https://captain.server. [YourDomainName].com Para obter mais detalhes e documentos, consulte CapRover.com

Agora podemos navegar para https://captain.server. [yourDomainName].com :

Captura de tela da tela de login do CapRover

Vamos fazer login com nossa nova e segura senha:

CapRover

Parabéns! Seu CapRover PaaS agora está instalado e funcionando.

Hospedagem de aplicativos no CapRover

Agora que você configurou seu próprio PaaS, podemos hospedar seu primeiro aplicativo Node.js nele.

O objetivo desta seção é hospedar um aplicativo Node.js básico conectado a um banco de dados Postgres. Além disso, queremos configurá-lo de forma que reconstrua e implante automaticamente nosso aplicativo sempre que enviarmos para nosso branch mestre.

Estaremos usando um projeto de exemplo do Github. Se você quiser saber mais sobre como criar uma API CRUD Rest com esta pilha de tecnologia, verifique este tutorial .

Primeiro, clonei este projeto do Github e empurrei-o para um novo repositório privado no meu própria conta do Github.

Este projeto de exemplo cria o scaffold de um aplicativo Express.js básico que está conectado a um banco de dados Postgres. Como você pode ver na pasta raiz, temos um Dockerfile , bem como docker-compose.yml .

Embora normalmente apenas executemos o arquivo Docker Compose e encerremos o dia, há algumas coisas que precisamos mudar para que funcione com o CapRover. CapRover é apenas uma camada fina em torno do Docker. Ele usa Docker para construir e executar seus aplicativos, o que é realizado por meio da API Docker.

Embora o Docker Compose seja um recurso do Docker CLI, ele NÃO está disponível na Docker API. Isso significa que o CapRover não pode lidar com arquivos Docker Compose. Existem algumas maneiras de contornar isso, mas podemos trabalhar dentro dessa restrição.

Aqui está o que faremos:

  1. Configure um banco de dados Postgres com os aplicativos One-Click da CapRover
  2. Crie um arquivo de definição de capitão
  3. Crie um novo aplicativo personalizado dentro da interface CapRover
  4. Ajuste nossa configuração do Postgres
  5. Conecte nosso repositório Github e implante

1. Configure um banco de dados Postgres com Aplicativos One-Click da CapRover

Selecione Aplicativos com um clique e escolha o aplicativo PostgreSQL :

Tela CapRover One Click Apps com PostgresSQL selecionado

Em seguida, insira os detalhes do seu banco de dados (como o nome do banco de dados, nome de usuário e senha):

Tela CapRover PostgreSQL com detalhes do aplicativo preenchidos em

Após a instalação, o banco de dados estará disponível como srv-captain-YOUR_CONTAINER_NAME na porta 5432 para outros aplicativos CapRover. Em nosso caso, é srv-captain-tutorial-postgres-db .

2. Crie um arquivo de definição de capitão

Um dos principais componentes do CapRover é a definição de capitão arquivo que fica na raiz do seu projeto. Este arquivo diz ao CapRover o que realmente fazer.

No nosso caso, queremos dizer a ele para executar o Dockerfile que também está na raiz do nosso projeto. Crie o arquivo e adicione:

 { "schemaVersion": 2, "dockerfilePath":"./Dockerfile" }

De acordo com o site oficial da CapRover, o "schemaVersion" é sempre 2.

3. Crie um novo aplicativo personalizado dentro da interface CapRover

Em seguida, temos que criar um aplicativo personalizado com a interface do CapRover. Basta dar um nome a seu aplicativo e clicar no botão Criar novo aplicativo . Em nosso caso, nosso aplicativo Node não tem estado porque se comunica com um banco de dados Postgres. Portanto, não precisamos marcar a caixa de seleção Possui dados persistentes .

CapRover Criar uma nova tela de aplicativo

Na guia Configurações HTTP , vamos Ativar HTTPS e Forçar HTTPS redirecionando todo o tráfego HTTP para HTTPS para garantir a segurança máxima. Por último, mas não menos importante, temos que adicionar a porta em que nosso aplicativo está sendo executado. No nosso caso, é a porta 3000.

Guia de configurações HTTP na interface CapRover

4. Ajuste nossa configuração do Postgres

Dentro do index.ts vamos adicionar:

 const client=new Client ({ usuário:"admin", senha:"test123", host:"srv-captain-tutorial-postgres-db", banco de dados:"my-db"
});

5. Conecte nosso repositório Github e implante

Agora, vamos conectar o CapRover ao nosso repositório Github para que, sempre que enviarmos para o branch master, uma nova versão seja construída automaticamente. A conexão com o Github é um processo de duas etapas.

A primeira coisa que precisamos é uma chave de implantação de nosso repositório Github. Em seu VPS ou máquina local, gere um novo par de chaves públicas/privadas com ssh-keygen .

Em seguida, em seu repositório Github, navegue até Configurações/Chaves de implantação . Aqui você deve inserir sua chave pública:

Captura de tela do representante do Github na guia de chaves de implantação

De volta à nossa interface CapRover na guia Implementação , iremos primeiro inserir a localização do nosso repositório no formato de github.com/user/repository . Além disso, você pode especificar o nome do seu ramo. Se você deseja que seu aplicativo seja compilado sempre que você enviar para o branch dev , por exemplo, basta inserir dev .

Por último, mas não menos importante, temos que adicionar nossa chave privada em vez do nome de usuário e senha. Eu recomendo fortemente que você faça isso porque é muito mais seguro:

Implantar a partir da tela do Github em CapRover com a chave SSH preenchida com

Para ainda mais segurança, o site oficial da CapRover sugere que você use contas de serviço. Você pode ler mais sobre as práticas recomendadas do CapRover aqui .

Clique em Salvar e atualizar e aguarde até que o URL do webhook seja gerado:

Ótimo! Agora, a etapa final é copiar este URL e navegar de volta para a página de Configurações de nosso repositório no Github. Em Webhooks , basta adicionar um novo webhook com o URL que CapRover gerou para você. Você pode deixar o resto dos campos como estão:

Assim que você salvar seu webhook, seu aplicativo será construído automaticamente no CapRover:

Finalmente, podemos verificar https://example-node-postgres-api.server.sevendegrees.io/ping e veja se tudo está funcionando perfeitamente.

Parabéns, configuramos com sucesso um projeto Node.js conectado a um banco de dados Postgres que é reconstruído automaticamente sempre que enviamos para nosso branch master. Tudo isso em menos de uma hora e pelo preço de apenas três dólares por mês!

Dicas gerais de segurança

Ao contrário do Heroku, você é responsável por tudo o que acontece no seu servidor. Portanto, você deve ver a segurança do seu VPS como sua maior prioridade.

Aqui estão algumas coisas que eu recomendo que você faça:

  • Mantenha seu servidor atualizado
  • Use chaves SSH para logins
  • Use uma senha forte
  • Altere a porta SSH padrão
  • Configure um firewall
  • Faça backup do seu servidor
  • Configure o monitoramento

Lembre-se de que a chave para a segurança de seus servidores é construir camadas de segurança que tornem mais difícil a invasão de hackers em seu sistema. Quanto mais camadas tivermos, mais difícil será. Nenhum sistema será cem por cento seguro, mas você precisa se certificar de que você se esforça ao máximo.

Resumo

Neste tutorial, aprendemos sobre o que é CapRover, como você pode configurar sua própria plataforma como um serviço em menos de uma hora e como você pode implantar aplicativos prontos para produção implantando um aplicativo Node.js e Postgres simples.

Isso apenas arranha a superfície do que você pode fazer com CapRover. Recomendo enfaticamente que você verifique a documentação oficial para saber mais.

If you have any questions, let me know in the comments below.

The post How to set up your own PaaS with CapRover appeared first on LogRocket Blog.