Pular para o conteúdo principal
A seguir está um guia de arquitetura HA de referência para implantar o AirysChat na AWS. Para uma implantação nativa em nuvem, use nossos helm charts com AWS Elastic Kubernetes Service(EKS).

Introdução

Usaremos o script de instalação do Linux para ter uma instância do AirysChat rodando. Além disso, em vez de depender de Redis, Postgres e Nginx instalados na mesma ec2; nós prosseguiremos usando serviços gerenciados da AWS para o mesmo, viz Elasticache, RDS e ALB.

Pré-requisitos

  1. Conta na AWS
  2. Domínio para usar com o AirysChat

Arquitetura

Este guia seguirá uma arquitetura padrão de 3 camadas na AWS. aws-architecture

Rede

Criar VPC

  1. Faça login no console da AWS e escolha a região onde você fará a implantação.
  2. Navegue até o console VPC e crie uma nova vpc para o airyschat. Na tag name, insira airyschat-vpc e use o bloco CIDR 10.0.0.0/16.
  3. Deixe o restante das opções como padrão e clique em Create VPC.
aws-create-vpc

Sub-redes

Crie duas sub-redes públicas e privadas na vpc que criamos. Certifique-se de tê-las em diferentes AZs e com intervalos CIDR que não se sobreponham.
  1. Navegue até VPC > Subnets.
  2. Clique em Create Subnet. Selecione a airyschat-vpc que criamos antes, nomeie-a como airyschat-public-1, selecione uma zona de disponibilidade (por exemplo, ap-south-1a) e o bloco CIDR como 10.0.0.0/24.
aws-create-subnet
  1. Siga o mesmo procedimento para criar as sub-redes restantes.
NomeTipoZona de DisponibilidadeBloco CIDR
airyschat-public-1publicap-south-1a10.0.0.0/24
airyschat-public-2publicap-south-1b10.0.1.0/24
airyschat-private-1privateap-south-1a10.0.2.0/24
airyschat-private-2privateap-south-1b10.0.3.0/24
  1. Após criar todas as sub-redes, habilite auto assign public ipv4 address para as sub-redes públicas em Actions > Subnet Settings.

Internet Gateway

  1. Selecione Create Internet Gateway, nomeie-o airyschat-igw e clique em create.
  2. Selecione-o na lista de internet gateways, escolha actions e, em seguida, selecione Attach to VPC.
  3. Escolha airyschat-vpc e clique em attach.
aws-create-igw

NAT Gateway

Os servidores de aplicativos do AirysChat precisam ser implantados na sub-rede privada. Para que eles acessem a internet, precisamos adicionar gateways NAT à nossa sub-rede pública e adicionar uma rota a partir das sub-redes privadas.
  1. Navegue no painel VPC e selecione NAT gateways.
  2. Clique em Create NAT Gateway.
    1. Nomeie-o airyschat-nat-1.
    2. Selecione a sub-rede airyschat-public-1.
    3. Clique em Allocate Elastic IP.
    4. Adicione tags adicionais de acordo com sua necessidade.
    5. Clique em Create NAT gateway.
aws-create-nat
  1. Siga o mesmo procedimento para criar um segundo gateway NAT (airyschat-nat-2) e escolha a sub-rede airyschat-public-2.

Tabelas de Roteamento

A tabela de roteamento controla o acesso de entrada e saída para uma sub-rede.

Tabela de Roteamento Pública

Criaremos tabelas de roteamento para que nossas sub-redes públicas possam acessar a internet por meio do Internet gateway. Navegue até o painel VPC e selecione Route Tables.
  1. Clique em Create route table.
  2. Use o nome airyschat-public-rt e escolha airyschat-vpc em VPC.
  3. Clique em Create.
aws-create-rt A seguir, precisamos adicionar uma rota ao internet gateway que criamos anteriormente(airyschat-igw).
  1. Selecione a tabela de roteamento airyschat-public-rt na lista e clique em Edit routes > Add Route.
  2. Defina o destino como 0.0.0.0/0 e escolha o alvo como airyschat-igw. Clique em Save Changes.
Além disso,
  1. Selecione a tabela de roteamento airyschat-public-rt na lista e clique em Subnet Associations > Edit subnet associations.
  2. Selecione ambas as sub-redes públicas(airyschat-public-1,airyschat-public-2) e clique em save.

Tabela de Roteamento Privada

Também criaremos tabelas de roteamento privadas para que nossas sub-redes privadas possam acessar a internet através dos gateways NAT.
  1. Siga o guia acima e crie duas tabelas de roteamento privadas, a saber, airyschat-private-a e airyschat-private-b.
  2. Selecione as tabelas de roteamento e adicione uma rota ao gateway NAT em sua respectiva zona de disponibilidade.
    1. Para airyschat-private-a, adicione uma rota para 0.0.0.0/0 e o alvo como airyschat-nat-1.
    2. Para airyschat-private-b, adicione uma rota para 0.0.0.0/0 e o alvo como airyschat-nat-2.
Além disso,
  1. Associe as tabelas de roteamento privadas com as sub-redes privadas correspondentes.
    1. Para airyschat-private-a, associe a sub-rede airyschat-private-1.
    2. Para airyschat-private-b, associe a sub-rede airyschat-private-2.

Application Load Balancer (ALB)

Crie um application load balancer para receber tráfego nas portas 80 e 443 e distribuí-lo através das instâncias do AirysChat.
  1. Navegue até a seção EC2 e escolha a seção Load Balancer.
  2. Clique em Create Load Balancer.
    1. Escolha Application Load Balancer.
    2. Para o nome do load balancer, use airyschat-loadbalancer.
    3. Selecione o scheme como internet-facing e IP address type como IPv4.
    4. Para a seção de mapeamento de rede,
      1. Selecione airyschat-vpc.
      2. Selecione as sub-redes públicas airyschat-public-1 e airyschat-public-2 na seção de mapeamento.
    5. Para a seção de Security group,
      1. Crie um novo security group, airyschat-loadbalancer-sg.
      2. Adicione regras para permitir o tráfego HTTP e HTTPS de qualquer lugar(0.0.0.0/0, ::/0).
      3. Além disso, adicione uma regra para permitir TCP na porta 3000. Esta regra permite que as verificações de integridade do load balancer passem, já que o AirysChat roda na porta 3000.
      4. Adicione uma regra para permitir tráfego SSH a partir do security group do bastion que criaremos em uma etapa posterior do guia. Revisite esta seção após concluir a etapa do bastion.
    6. Para a seção de Listeners and routing, crie dois listeners para 80 e 443. Defina a regra de encaminhamento no listener 80 para redirecionar http para https.
      1. Além disso, crie um target group, airyschat-tg, que encaminhará as requisições para a porta 3000(o AirysChat ouve nesta porta).
      2. Adicione uma verificação de integridade no endpoint /api. Este endpoint não é autenticado e deve retornar a versão da aplicação.
{
  "version": "1.22.1",
  "timestamp": "2021-12-06 16:07:39"
}
  1. Adicione quaisquer tags necessárias e clique em create.
Além disso, adicione se você tiver seu domínio no Route53 e use o ACM para gerar um certificado para usar com o ALB.

Postgresql usando AWS RDS

O AirysChat usa o Postgres como camada de DB, e usaremos o Amazon RDS com uma opção multi-AZ para confiabilidade.

Security group do RDS

  1. Navegue até EC2 > Security groups e crie um novo sg.
  2. Nomeie-o airyschat-rds-sg.
  3. Selecione a airyschat-vpc e adicione uma regra de entrada para a porta do postgres com origem airyschat-loadbalancer-sg.

Grupo de sub-redes do RDS

  1. Navegue até a seção RDS e selecione subnet groups.
  2. Crie airyschat-rds-group e escolha airyschat-vpc.
  3. Selecione ambas as AZs e as sub-redes privadas.

RDS

  1. Selecione create a database.
  2. Use a criação padrão e escolha a engine do Postgres.
  3. Use o template de produção e crie um usuário master e senha do Postgres.
  4. Habilite a implantação Multi-AZ.
  5. Selecione airyschat-vpc e selecione o security group do rds que criamos anteriormente.
  6. Habilite a autenticação por senha.
  7. Clique em create.
  8. Após concluir a criação, anote o hostname, username e senha. Precisaremos disso para configurar o AirysChat.

Redis usando AWS Elasticache

  1. Siga passos semelhantes como os do rds para criar os grupos de segurança e de sub-rede do Redis.
  2. Crie o cluster Redis com a opção multi-AZ.

Criando servidores Bastion

Crie servidores bastion em ambas as sub-redes públicas. Esses servidores serão usados para fazer ssh nas instâncias do AirysChat nas sub-redes privadas.
  1. Navegue até o painel EC2 e clique em launch instance.
  2. Use uma imagem Ubuntu 20.04 image com o tipo t3.micro.
  3. Escolha airyschat-vpc e a sub-rede airyschat-public-1.
  4. Nomeie-o airyschat-bastion-a.
  5. Adicione um novo sg, airyschat-bastion-sg e habilite o acesso ssh de qualquer lugar.
  6. Deixe o restante como padrões e clique em launch.
  7. Assim que a instância estiver ativa, tente fazer SSH na instância.
Repita e crie outro bastion, airyschat-bastion-b na outra AZ.

Instalar AirysChat

  1. Navegue até a seção EC2 e clique em launch instance.
  2. Use uma imagem Ubuntu 20.04 image com o tipo de instância c5.xlarge.
  3. Escolha a airyschat-vpc e selecione a sub-rede privada airyschat-private-1.
  4. Desative a atribuição automática de IP público e aumente o armazenamento do root volume para 60 GB.
  5. Adicione as tags necessárias. Defina a tag Name para airyschat.
  6. Selecione o security group do load balancer e clique em launch.
  7. Faça SSH no servidor bastion e, a partir de lá, faça ssh na instância do airyschat que criamos.
  8. Mude para o usuário root.
  9. Baixe o script de instalação do airyschat para Linux.
wget https://get.airyschat.app/linux/install.sh
chmod 755 install.sh
  1. Execute o script.
./install.sh --install

Configurar AirysChat

  1. Assim que a instalação for concluída, mude para o usuário airyschat e navegue até a pasta airyschat. Edite o arquivo .env e substitua as credenciais do Postgres e Redis pelos valores do RDS e elasticache.
sudo -i -u airyschat
cd airyschat
vi .env
  1. Execute a migração do db.
RAILS_ENV=production bundle exec rake db:prepare
  1. Modifique também as outras variáveis de ambiente necessárias para a configuração do seu airyschat. Consulte https://www.airyschat.com/docs/self-hosted/deployment/linux-vm#configure-the-required-environment-variables
  2. Reinicie o serviço airyschat.
sudo cwctl --restart

Verificar o login

  1. Adicione esta instância ao target group anexado ao alb.
  2. Navegue até o seu domínio do airyschat para ver se tudo está funcionando.

Criar uma AMI personalizada

  1. Se você estiver recebendo a página de integração, conclua a inscrição e verifique a instalação.
  2. Voila !! Sua instância do airyschat está no ar.
  3. Se tudo estiver correto, prossiga para criar uma ami a partir desta instância e nomeie-a airyschat-base-ami.

Grupos de Auto Scaling (ASG)

  1. Crie uma launch configuration usando a imagem base acima.
  2. Prossiga para criar um auto-scaling group a partir dessa launch config.
  3. Defina a capacidade mínima e desejada para 2 e a máxima para 4. Modifique isso de acordo com sua necessidade.
  4. Crie uma política de escalonamento baseada na utilização da CPU.
  5. Neste ponto, estamos prontos para encerrar a instância que criamos anteriormente.
  6. Verifique o load balancer ou target group para verificar se duas novas instâncias do airyschat surgiram.
  7. É isso.

Monitoramento

  1. Consulte https://www.airyschat.com/docs/self-hosted/monitoring/apm-and-error-monitoring

Atualizando o AirysChat

  1. Faça login em um dos servidores de aplicativo e conclua as instruções de atualização. Execute migrações se necessário. Consulte https://www.airyschat.com/docs/self-hosted/deployment/linux-vm#upgrading-to-a-newer-version-of-airyschat
  2. Crie uma nova ami e atualize a launch config.

Conclusão

Este documento é uma diretriz de referência para uma arquitetura HA do AirysChat na AWS. Modifique ou construa sobre isso para atender às suas necessidades.