Couchbase Server e Gateway no AWS Lightsail 
Tags: couchbase, flutter, aws, lightsail
Published: 2022-02-26 19:11:29

No primeiro artigo dessa série, fizemos uma POC simples gravando dados em uma instância do Couchbase embutida no aplicativo de exemplo padrão do flutter. Além disso instalamos em nosso ambiente local uma versão de servidor do Couchbase e configuramos um gateway para que nosso aplicativo se comunicasse com o servidor. E por fim finalizamos fazendo uma sincronização dos dados do nosso aplicativo para o servidor.

Nesse artigo vamos fazer a instalação do servidor em um servidor virtual hospedado na Amazon.

## Índice
* [Criando o servidor](#chapter-1)
* [Instalando o Couchbase Server](#chapter-2)
* [Instalando o Couchbase Gateway](#chapter-3)

###Criando o servidor<a name="chapter-1"></a>

No artigo passado citamos dois tipos de serviço na nuvem. O Lightsail e o EC2. De forma resumida, a diferença entre eles é que o Lightsail simplifica as coisas para quem está começando. Se você decidir usar o EC2 você tem o benefício de poder usar gratuidamente por um ano. Em contrapartida terá que se preocupar com as redes VPS, com o funcionamento do LoadBalancer etc. Usando Lightsail você terá apenas três meses gratuitos, mas terá menos coisas para configurar. Mantendo o conceito do artigo anterior, vamos criar o servidor usando o serviço Lightsail e futuramente se você quiser migrar para o EC2 poderá fazer isso sem maiores problemas.

Vamos acessar o [site oficial](https://aws.amazon.com/aws/lightsail) e usar o grande botão laranja bem no meio da tela:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9hxf5qe3qd4tni8f9bsy.png)

 Na tela de autenticação ele irá nos perguntar se queremos logar ou queremos criar uma nova conta. Vamos criar uma nova conta:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bubofde31pbkle289isn.png)

Prencha com seu e-mail e um nome de usuário e prossiga:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oyp056j8xpz2xj401su5.png)

Depois das verificações de e-mail e segurança será preciso escolher uma senha.

Em seguida ele pedirá informações de contato. Não coloque acentos no nome da cidade e do estado. Depois siga para informações de faturamento, e por ultimo confirmação de contato por sms ou ligação de voz.

Depois disso você poderá escolher o nível de suporte. Vou seguir com o suporte gratuito.

Por fim, veremos a tela de conclusão do cadastro. Vamos usar o botão laranja novamente para acessar o Console de Gerenciamento da AWS.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n0ng2h7oqgzzf0o0nfpk.png)

Depois de fazer login denovo, caimos na tela principal do console. Mas não vamos usar esse console. Vamos usar o console do Lightsail, então use esse endereço: `https://lightsail.aws.amazon.com/`

Aqui poderemos escolher a opções para criação da nossa instância. Não irei mudar a região da instancia. Em seguida vamos escolher a plataforma **Linux/Unix** e o _**blueprint**_ vamos escolher **Os Only** e escolher CentOS 7 (o CentOS 8 já perdeu o suporte, enquanto o 7 vai até 2024).

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mfld7f7o33yoxohsqnl9.png)
 
Mais abaixo na página, vamos escolher a opção com 2gb de memória RAM de acordo com os [requisitos mínimos do Couchbase Server](https://docs.couchbase.com/server/current/install/pre-install.html). Em seguida vamos escolher um nome para a instância.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y9to3tuwsfh13arehqn6.png)

Depois disso basta clicar no botão **Create instance**
  
O console irá mostrar a instância como pendente por um tempo, basta aguardar:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0f3j3f6s78f0x91t6o22.png)

Depois que ela estiver rodando, precisamos acessar ela via ssh. Para isso acesse o menu Account no canto superior direito. Na tela seguinte acesse a aba **SSH Keys**. Faça o download da chave pelo link conforme imagem a seguir:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wd1ixohrh7lk7dd0ktgu.png)

Antes de podermos usar essa chave, vamos precisar converter ela para o formato suportado pelo putty. Abra o puttygen e escolha o botão **Load** e escolha o arquivo .PEM que baixamos:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gmyil662f5odarx8kp8r.png)

Agora clique em **Save private key**. Ele vai perguntar se deseja salvar sem definir uma senha. Eu decidi seguir sem senha e depois escohi um lugar para o arquivo.

Agora podemos usar essa chave para acessar o servidor via putty. Insira o arquivo na seguinte configuração:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lorp0099evpsxqs0qvaz.png)

Depois disso vamos voltar na primeira sessão e preencher o IP do servidor para podermos fazer o acesso:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gj3fnm3m9ryfxq5yf8wy.png)

Ao fazer o acesso será solicitado o usuário, que no padrão para essa imagem de sistema que escolher é **_centos_**. E pronto, temos acesso ao shell do nosso servidor:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3308l1sio6pxc8qcopog.png)

Antes de seguirmos, vamos criar um endereço de IP fixo para essa instância, senão toda vez que reiniciarmos o servidor ele vai iniciar com um IP diferente. 

Acesse a aba **Networking** e escolha a opção **Create static IP**.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gd8mohjepgex5xswj8qw.png)

Escolha a instancia que criamos, defina o um nome para o IP stático e clique em **Create**.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xdojvnmm7yh168zm9gra.png)

Depois da criação será exibido o novo IP estático que iremos usar agora no nosso putty de forma permanente. 

Agora que já estamos com nossa instância no ar, vamos partir para a instalação e configuração do servidor Couchbase e do Gateway.

###Instalando o Couchbase Server<a name="chapter-2"></a>

Vamos começar atualizando os pacotes:

```shell
sudo yum update -y
```

Seguindo as [instruções da documentação](https://docs.couchbase.com/server/current/install/rhel-suse-install-intro.html) vamos digitar os comandos abaixo:

```shell
curl -O https://packages.couchbase.com/releases/couchbase-release/couchbase-release-1.0-x86_64.rpm

sudo rpm -i ./couchbase-release-1.0-x86_64.rpm

sudo yum install couchbase-server-community -y
```

Agora vamos abrir as portas necessárias no firewall da AWS:

Use a opção Manage no console para acessar as configurações da instância:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d70hqxuf2s21xpzty0g3.png)

Agora na abra **Networking** e use o botão **Add rule** para incluir as portas conforme imagem abaixo:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ahqjyzazugdu5mq95r3i.png)

Com isso será possível acessar o console do Couchbase Server:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/31x909dx8gacuq5zcitc.png)

A partir daqui o passo a passo já foi abordado no artigo anterior dessa série, então vou passar agora para a instalação do Couchbase Gateway.

###Instalando o Couchbase Gateway<a name="chapter-3"></a>
 
Vamos precisar baixar um pacote, então vamos instalar o wget primeiro:

```bash
sudo yum install wget -y
```

Agora seguindo o passo-a-passo da [documentação](https://docs.couchbase.com/sync-gateway/3.0/get-started-install.html) vamos baixar o pacote com o comando abaixo:

```bash
wget http://packages.couchbase.com/releases/couchbase-sync-gateway/3.0.0-beta02/couchbase-sync-gateway-community_3.0.0-beta02_x86_64.rpm
```

E agora a instalação:

```bash
sudo rpm -i couchbase-sync-gateway-community_3.0.0-beta02_x86_64.rpm
```

O resultado é o gateway já rodando na porta 4984. 

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y8wpyhnv8tvoycren6zp.png)

Vamos adicionar essas portas também ao firewall:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/11chp274ch17zqktcfg3.png)

Assim como no artigo anterior, nesse ponto você precisa conseguir acessar o gateway e obter o retorno da API. Se não conseguir obter esse retorno, pare e revise os passos anteriores:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/51zzct3f5kqf1tcf86rc.png)
 
Agora vamos acessar as configurações do gateway e apontar ele para nosso servidor couchbase:

```bash
sudo nano /home/sync_gateway/sync_gateway.json
```

Vamos alterar da mesma forma que fizemos no artigo anterior:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rwjbpn97nv73v7424rhc.png)

```json
{
  "adminInterface": "127.0.0.1:4985",
  "interface": "0.0.0.0:4984",
  "databases": {
    "my-database": {
      "server": "http://127.0.0.1:8091",
      "bucket": "my-database",
      "username": "sync_gateway",
      "password": "******",
      "enable_shared_bucket_access": true,
      "import_docs": true,
      "num_index_replicas": 0,
      "users": {
        "GUEST": { "disabled": false, "admin_channels": ["*"] }
      }
    }
  },
  "logging": {
    "console": {
      "log_level": "debug",
      "log_keys": ["*"]
    }
  }
}
```

Denovo... você precisa conseguir acessar a API após essa alteração antes de continuar.

Agora vamos executar o mesmo teste que fizemos no artigo anterior via poweshell para confirmar que tudo está funcionando corretamente:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tktcs8gnqnfpkt8f951s.png)

E acessando o Couchbase Server devemos ver o registro que acabamos de inserir:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xr3z0bvtz9qa2e2pzek7.png)

É isso aí! Temos um servidor na nuvem pronto para receber as requisições do nosso aplicativo.

No próximo artigo dessa série, vamos falar um pouco sobre segurança.

Nos vemos lá.