Você está na página 1de 25

Instalando seu

servidor na nuvem

VERSÃO 1.01 - ABR/2022


1
Olá cliente ProDoctor,

O presente manual assume que a conta AWS já tenha sido criada, e o usuário de acesso
configurado com permissões para manipulação de recursos EC2 (Elastic Cloud Computing).

Se quiser ir direto a um passo específico, basta clicar no item do sumário abaixo.

SUMÁRIO
3 Configuração da Instância na AWS

8 Configuração do servidor Ubuntu

8 Atualização e instalação de pacotes básicos

9 Configurar o volume de disco secundário

11 Instalando o servicor PostgreSQL

13 Restaurando um backup no servidor

13 Instalando a VPN Zerotier

17 Adicionando permissão das máquinas na rede VPN

17 Protegendo o acesso ao servidor

18 Habilitando o compartilhamento de arquivos com o Samba

19 Configuração do local de armazenamento na AWS

22 AWS-CLI

23 Automatização do Backup

2
Configuração da Instância na AWS
No Painel da AWS, selecione a
opção EC2:

Selecionando a Região
No menu de regiões, localizado no canto superior
direito do painel, selecione a região de São Paulo
(sa-east-1):

Criando a instância:
Clique no botão “Executar
instância” para começar o
processo de criação da
instância:

Selecionando a
imagem do sistema
operacional:
Na próxima tela, serão apre-
sentadas imagens pré-confi-
guradas de sistemas opera-
cionais. Faça uma busca por
“Ubuntu server 20.04”:

Selecione a opção 64-bit (x86)


e clique em “Selecionar”.

3
Definindo a família de processamento da instância:
Na tela seguinte, serão apresentadas as famílias de instâncias para execução da VM. O tipo de
instância vai depender do uso do sistema, tendo opções com 1 ou mais núcleos de processamen-
to e quantidades diversas de memória ram. Para nosso exemplo, usamos a instância m5a.large,
que possui 2 núcleos de processamento e 8 gb de ram.

Para uso com bancos de dados maiores e de maior demanda, recomendamos o uso de instân-
cias da família m5 (Intel) ou m5a (AMD), que não possuem créditos de uso de CPU.

Mais informações sobre as famílias de instâncias e seus custos podem ser vistas nos links:

https://aws.amazon.com/pt/ec2/instance-types/
https://aws.amazon.com/pt/ec2/instance-explorer/

Obs.: Algumas famílias de instância possuem crédito de cpu, o que significa que para usos mode-
rados, em que o uso de cpu fique abaixo de 20% a 30%, a máquina acumule créditos que serão
utilizados em casos de uso severo (durante backups por exemplo). Se o uso de cpu ficar acima
do limite definido pela AWS, os créditos são consumidos até se esgotarem e a VM tem capacida-
de de processamento reduzida. Mais informações: https://docs.aws.amazon.com/pt_br/AWSEC2/
latest/UserGuide/burstable-credits-baseline-concepts.html

Atenção: É importante monitorar o uso de recursos do servidor para instâncias com créditos de
CPU. A qualquer momento é possível desligar a instância e trocar a família caso seja necessário
disponibilizar mais recursos.

Selecione o tipo de instância e clique em “Próximo: Configure os detalhes da instância”

Tabela de valores de referência* para instâncias AWS


em São Paulo

4
* Valores mensais, em dólares americanos (USD), na data de 22/09/2021. A configuração inclui 1
volume primário de 20GB e 1 volume secundário de 40GB.

Obs.: Contratações de 1 e 3 anos se refere a contratações de instâncias reservadas da AWS, que


é abordado na documentação à parte. As contratações de 1 e 3 anos estão sendo levadas em
conta na contratação sem pagamento adiantado e do tipo conversível (No UpFront Convertible),
ou seja, durante o período contratado é possível modificar o tipo de instância reservada, alterando
apenas o valor correspondente ao prazo vigente do contrato.

Para mais informações: https://calculator.aws/#/createCalculator/EC2

Configurando
detalhes da instância:
Na tela seguinte, para configu-
ração dos detalhes da instân-
cia, basta deixar as opções pa-
drões como na imagem abai-
xo, e clicar em “Próximo: Adi-
cionar armazenamento”:

Configurando os volumes de armazenamento:


Essa próxima tela contém as configurações para adicionar os volumes de armazenamento. Para
esse manual, vamos utilizar um volume de armazenamento extra para configuração do banco de
dados. No volume principal (Root), vamos deixar um tamanho mínimo de 20 GB e selecionar o ti-
po de volume como gp3. A opção “Excluir no encerramento” informa para a AWS se o volume de-
ve ser excluído ao remover a instância. Podemos deixar essa opção marcada para o disco princi-
pal.
Em seguida, adicionamos um novo volume no botão “Adicionar novo volume”, com tamanho ini-
cial de 40 GB (esse tamanho pode variar de acordo com o banco de dados).

Obs.: É sempre importante lembrar que o volume deve ser provisionado observando o tamanho
do banco de dados no momento da instalação com projeção para crescimento futuro conforme
novos dados são inseridos. Recomendamos que o volume tenha pelo menos 4 vezes o tamanho
do banco em disco, mais o espaço necessário para armazenar 7 backups (um para cada dia da
semana).

Para o volume principal Root, é necessário pelo menos 10Gb para o sistema operacional, mais o
espaço para para um backup do banco de dados. Durante a rotina de backup, sugerimos que o
banco seja enviado primeiramente para o diretório temporário, para só após o término, ser colo-
cado no diretório de backups.

Desta forma, uma eventual falha no backup não irá sobrescrever o backup feito com sucesso an-
teriormente.

5
Para determinar o tamanho do banco de dados, use a seguinte instrução SQL:

SELECT pg_size_pretty( pg_database_size('nome_do_banco_de_dados) );

Ex.: o banco de dados possui 5Gb e o backup possui 2Gb:

Volume principal: 10Gb + 2Gb = 12Gb mínimo


Volume secundário: 5Gb x 4 + 7 x 2Gb = 34Gb mínimo

Clique em “Próximo: Adicionar Tags”.

Configurando as Tags:
As tags são formas de agrupar e classificar as instâncias rodando no datacenter da AWS. Para o
nosso exemplo, não vamos configurar nenhuma tag.

Clique em “Próximo:Configure o security group”

Configurando as Security Groups:


As Security Groups da AWS definem as regras de segurança de acesso das VMs. É um firewall
definido diretamente no painel que vai permitir apenas acesso nas portas especificadas. Para o
nosso exemplo, vamos deixar liberadas as portas 22 (para uso do ssh, vem configurada por pa-
drão) e também para a comunicação da vpn que iremos utilizar, precisamos liberar o acesso ao
protocolo udp.

Adicione as regras e clique em “Verificar e ativar”.

6
Revisando as
configurações da
instância:
Revise as configurações feitas
e clique em Executar:

Par de chaves
de acesso
Após clicar em executar se-
rá apresentado uma tela para
criar um novo par de chaves,
ou utilização de uma já exis-
tente caso você já tenha ca-
dastrado anteriormente.

Para criar um novo par de cha-


ves, deixe selecionado a op-
ção Criar um novo par de
chaves marcada, o tipo RSA e
adicione um nome para identi-
ficação.

Faça o download do par de


chaves e posteriormente clique
em Executar instâncias.

7
Configurações do Servidor Ubuntu
Conectar via SSH ao servidor:
Altere a permissão da chave de acesso baixada para permitir o acesso via ssh

chmod 0600 pd-vm-corplus.pem

ssh -i pd-vm-corplus.pem ubuntu@IP-do-servidor

Atualização e instalação de pacotes


básicos:
Fazer a atualização dos pacotes:

sudo apt update

sudo apt upgrade

Gerar locale para pt_BR:

sudo locale-gen pt_BR.UTF-8

Configurar timezone:
sudo dpkg-
reconfigure tzdata

(Selecionar America > Sao


Paulo)

8
Após a configuração, o sistema
irá exibir a hora local e a hora
padrão.

Instale alguns pacotes necessários:


sudo apt install unzip postfix

Na configuração do postfix,
deixe marcada a opção “Site
da Internet” e pressione
“Enter”.

Na tela seguinte, defina


o hostname do servidor e
pressione “Enter”.

obs.: o unzip é necessário


durante o processo de
instalação das ferramentas de
linha de comando da AWS e o
postfix é utilizado para o envio
de emails (usaremos para
receber informações sobre os
backups do banco e envio para
o armazenamento da AWS).

Reinicie o servidor:
sudo reboot

Configurar o volume de disco secundário:


Criar diretório para o ponto de montagem:

sudo mkdir /mnt/hd

Determine o nome correto do dispositivo:

O nome do dispositivo depende do tipo de instância utilizada. Para instâncias Nitro, os dispositi-
vos são disponibilizados como NVMe. As Instâncias Xen têm o volume principal mapeado como /
dev/xvda. Utilize o comando lsblk para determinar o nome do dispositivo.

9
Exemplo de saída do comando em uma instância Nitro.

[ec2-user ~]$ lsblk


NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme1n1 259:0 0 10G 0 disk
nvme0n1 259:1 0 8G 0 disk
-nvme0n1p1 259:2 0 8G 0 part /
-nvme0n1p128 259:3 0 1M 0 part

Exemplo de saída em uma instância Xen:

[ec2-user ~]$ lsblk


NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
-xvda1 202:1 0 8G 0 part /
xvdb 202:80 0 10G 0 disk

Formatar / criar sistema de arquivos (EXT4)


Crie o sistema de arquivos no volume de acordo com o nome de dispositivo visto no passo
anterior:

sudo mkfs -t ext4 /dev/nvme1n1

ou

sudo mkfs -t ext4 /dev/xvdb

Listar os volumes:

sudo lsblk -o +UUID | grep nvme1n1

ou

sudo lsblk -o +UUID | grep xvdb

Ao listar os volumes, será apresentada uma lista com os volumes do sistema e o UUID (UUID é o
identificador do volume que iremos utilizar na configuração a seguir):

Copie o UUID do volume nvme1n1, no exemplo acima:


ed0521de-4427-4b0a-b1a4-dae92f6d5b8e

Adicionar ao arquivo /etc/fstab:

echo “UUID=ed0521de-4427-4b0a-b1a4-dae92f6d5b8e /mnt/hd ext4


defaults,nofail 0 2” | sudo tee -a /etc/fstab

Montar os sistemas de arquivos:

sudo mount -a

10
Verificar pontos de montagem:

df -h | grep nvme

ou
df -h | grep xvdb

Documentação AWS:

A AWS fornece uma documentação para a montagem do volume, que contém explicações e o
passo a passo.

Referência:
https://docs.aws.amazon.com/pt_br/AWSEC2/latest/UserGuide/ebs-using-volumes.html

Instalando o servidor PostgreSQL:


Atualização de pacotes do postgres
sudo sh -c ‘echo “deb http://apt.postgresql.org/pub/repos/apt $(lsb_
release -cs)-pgdg main” > /etc/apt/sources.list.d/pgdg.list’

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc


| sudo apt-key add -

sudo apt-get update

Documentação: https://www.postgresql.org/download/linux/ubuntu/
Instalação do servidor PostgreSQL 10:

sudo apt install postgresql-10

Confirmar a versão da versão 10 (atualmente 10.18):

sudo -u postgres psql

Digite \q e “Enter” ou aperte Ctrl + D para sair.

11
Recriar o cluster do PostgreSQL para utilizar o pt_BR:

sudo pg_dropcluster --stop 10 main

sudo pg_createcluster --datadir=/mnt/hd/pgsql/10/main --locale pt_


BR.UTF-8 --start 10 main

Trocar a senha do usuario postgres:

sudo -u postgres psql

\password postgres

Nesse momento, digite a nova


senha e em seguida confirme
a senha.

obs: Usar uma senha forte,


pelo menos 16 dígitos, letras
maiusculas, minusculas e nú-
meros:

https://passwordsgenerator.net/

Para validar a senha:


psql -h localhost -U postgres -W

Configurar porta no PostgreSQL:


Vamos configurar o servidor para utilizar essa porta. Vamos adicionar um arquivo de configuração
extra no servidor, para isso:

sudo nano /etc/postgresql/10/main/conf.d/prodoctor.conf

listen_addresses = ‘*’
port = 5432

Configurar o pg_hba:

sudo nano /etc/postgresql/10/main/pg_hba.conf

Adicione a seguinte linha no final do arquivo.

host all postgres 0.0.0.0/0 md5

12
Restaurando um backup no servidor:
Copiar o dump
do banco para o
servidor.
Exemplo usando FileZilla:

Para conectar ao servidor


usando o FileZilla, selecione
o protocolo “SFTP”, insira o IP
do servidor, porta 22 e tipo de
logon por “Arquivo chave”. O
usuário é o “ubuntu”, e a cha-
ve utilizada é o arquivo .pem disponibilizado durante a criação da instância.

Após ter copiado o arquivo de dump do banco para o servidor, vamos criar o banco de dados e
restaurar o backup.

Exemplo usando command line:


scp -i pd-vm-corpplus.pem caminho_do_arquivo_de_backup ubun-
tu@18.231.152.108:/home/ubuntu

Criar o banco de dados novo:


sudo -u postgres createdb prodoctorcorp

Restaurar o dump do banco de dados:


sudo -u postgres pg_restore -d prodoctorcorp -F c -j 2 -O -x caminho_
do_arquivo_de_backup

Instalando a vpn zerotier:


Criação da conta
Para utilização é necessário
criar uma conta, onde serão
realizadas as configurações da
rede.

Acesse o site da zerotier,


https://www.zerotier.com/, e
clique no menu sign up para
criar a conta.

Na tela de cadastro preencha


o formulário com os seus da-
dos e clique no botão Register.

13
obs: Usar uma senha forte, pelo menos 16 dígitos, letras
maiusculas, minusculas e números:

https://passwordsgenerator.net/

Você receberá um email como o apresentado na imagem abai-


xo clique no link apresentado para ativar o registro de sua con-
ta zerotier.

Criação da rede
Com a conta ativada, aces-
se o seu usuário e siga para o
menu Create A Network.

O Zerotier cria rapidamen-


te uma vpn com uma série de
configurações suficientes pa-
ra o uso.

Guarde a informação de ne-


twork id, será utilizado para co-
nectar as máquinas a esta re-
de.

Clique no identificador da rede


para abrir a área de configura-
ções desta.
Renomeie a rede para melhor
visualização. As demais confi-
gurações de faixa de ip podem
ser alteradas de acordo com
a necessidade, mas podem fi-
car de acordo com o padrão já
criado.

A modificação é salva automa-


ticamente.

Documentação:
https://www.zerotier.com/down-
load/

14
Instalação no servidor
Para instalação do zerotier no servidor, execute o comando a seguir no terminal.

curl -s https://install.zerotier.com | sudo bash

15
Acessando a rede
criada
sudo zerotier-cli
join Network-Id-Da-
-Rede-Criada

Instalação cliente
Acesse a página de downloads
do Zerotier https://www.zero-
tier.com/download/

Clique sobre o ícone do siste-


ma operacional windows para
iniciar o download.

Realize o download do arquivo


e execute a instalação. Forne-
ça as permissões requisitadas
durante a instalação e aguarde
o término do procedimento.

Acessando a rede
criada
Finalizada a instalação abra o
laucher da aplicação.

Pesquise por zerotier one e cli-


que em abrir para iniciar a in-
terface gráfica da aplicação.

16
O ícone da aplicação irá ser apresentado na extrema direita da
barra de tarefas.

Localize o ícone e clique com o botão direito para acessar as


opções da aplicação.

Clique na opção Join Networks e preencha o campo com o


identificador da rede criada, posteriormente clique em join.

Adicionando permissão das máquinas na


rede vpn
Para que as máquinas pos-
sam se comunicar é neces-
sário acessar o painel da re-
de no zerotier e marcar a che-
ckbox na coluna “Auth?”. Para
melhor organização, considere
adicionar um nome para a má-
quina autorizada.

Obs:. O Ip é atribuído automaticamente, mas pode ser alterado caso necessário.

Protegendo o acesso ao servidor:


Instalar o fail2ban:
sudo apt install fail2ban

O fail2ban irá inibir automaticamente tentativas de login com falhas sucessivas, adicionando regra
de firewall para bloquear o IP por determinado período antes de uma nova tentativa.

17
Habilitando compartilhamento de arquivos
com o samba
Instalação do Samba
No servidor execute o comando abaixo:
sudo apt install samba

Criação do diretório a ser compartilhado


mkdir /home/ubuntu/prodoctorcorp

Configuração do samba
sudo nano /etc/samba/smb.conf

Substitua o conteúdo do arquivo com as informações abaixo:

# Global parameters
[global]
dns proxy = No
log file = /var/log/samba/log.%m
map to guest = Bad User
max log size = 1000
obey pam restrictions = Yes
pam password change = Yes
panic action = /usr/share/samba/panic-action %d
passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\
s*\spassword:* %n\n *password\supdated\ssuccessfully* .
passwd program = /usr/bin/passwd %u
security = USER
server role = standalone server
server string = %h server (Samba, Ubuntu)
syslog = 0
unix password sync = Yes
usershare allow guests = Yes
idmap config * : backend = tdb

[prodoctorcorp]
comment = Arquivos de Protecao
create mask = 0664
directory mask = 02775
force create mode = 0664
force directory mode = 02775
force user = ubuntu
guest ok = Yes
path = /home/ubuntu/prodoctorcorp
read only = No

Reinicie o serviço do samba


sudo service smbd restart

18
Adicione permissão no firewall
sudo ufw allow samba

Adicione uma senha para o compartilhamento


sudo smbpasswd -a prodoctorcorp

Aumente o limite de acessos simultâneos ao arquivo


sudo nano /etc/security/limits.conf

Adicione no final do arquivo

* - nofile 16384
root - nofile 16384conf

Testando o compartilhamento
\\IP-DO-SERVIDOR\prodoctorcorpconf

Configuração do local de armazenamento


na AWS
Com o objetivo de armazenar os backups gerados, vamos configurar as credenciais de aces-
so(IAM) e o repositório de armazenamento (bucket).

Criação do IAM
No painel de AWS, pesquise e
selecione a opção IAM

Acesse o menu de usuários

19
Clique no botão adicionar usuários

Preencha o nome do usuário e marque como tipo de acesso a opção Acesso programático, de-
pois clique em Próximo: Permissões.

Selecione a opção de Anexar políticas existentes de forma direta e posteriormente marque a


opção AmazonS3FullAccess, depois clique em Próximo : Tags.

Não precisa definir nenhuma Tag na próxima etapa, clique apenas em Próximo: Revisar

Verifique o resultado final, caso esteja tudo certo clique em Criar usuário.

20
Na próxima tela será apresentado o id da chave de acesso e a chave de acesso secreta, copie
as duas informações para usar durante a configuração do amazon-cli.

Criação do bucket
No painel da aws, pesquise e
selecione a opção S3.

Clique em criar bucket para ini-


ciar a criação do novo bucket.

21
Defina um nome e selecione a região sa-east-1, as demais configurações mantenha o padrão já
apresentado, depois clique em Criar bucket.

AWS-CLI
Download e instalação
Acesse o servidor e execute o comando abaixo para instalação do aws-cli

curl “https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip” -o
“awscliv2.zip”

unzip awscliv2.zip

sudo ./aws/install

22
Configuração
Execute o comando abaixo e preencha de acor-
do com o requisitado, utilizando os dados de
acesso criados durante o cadastro do IAM.

aws configure

Validação da configuração
Execute o comando abaixo no terminal. Ele irá listar todos os buckets criados no s3 da amazon.
Deve retornar o bucket que criamos na etapa anterior.

aws s3 Is

Automatização do backup
Agora precisamos criar uma rotina que realize o backup, mova o resultado para o bucket no s3 e
nos avise por email o resultado desta rotina.

Script de backup
Crie diretório para armazenar os backups e scripts.

mkdir backups && mkdir scripts && cd scripts

mkdir /home/ubuntu/scripts

cd /home/ubuntu/scripts

Edite um arquivo de script

nano backup.sh

Insira neste arquivo o conteúdo abaixo do script.

#!/bin/bash

DBNAME=prodoctorcorp
BUCKET=prodoctor-corp-backup
TMPDIR=/tmp

FILENAME="$DBNAME"_LC_TIME=pt_BR.UTF-8 eval date +%a | iconv -f utf8 -t


ascii//TRANSLIT.dump

echo "Gerando arquivo de backup $FILENAME"

sudo -u postgres pg_dump -F c -b $DBNAME -f $TMPDIR/$DBNAME.dump

sudo chown ubuntu:ubuntu $TMPDIR/$DBNAME.dump

sudo mv $TMPDIR/$DBNAME.dump /home/ubuntu/backups/$FILENAME

echo "Enviando arquivo de backup para o S3"

# Envia o backup para o S3


aws s3 cp --no-progress /home/ubuntu/backups/$FILENAME s3://$BUCKET/

23
Atribua permissão de execução ao script.sh

chmod +x backup.sh

Automatizando a rotina com crontab


Execute o comando abaixo para iniciar o editor do crontab.

crontab -e

Adicione no final do arquivo o conteúdo abaixo

# Define os paths para uso nos scripts


PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/
snap/bin

# Configura o endereco de email para receber saidas dos comandos no


cron
MAILTO=email@dominio.com.br

# Gera o backup do banco de segunda a sabado - 20h


0 22 * * mon-sat /home/ubuntu/scripts/backup.sh

Testando a configuração
Para testar se o script está fazendo o esperado, execute o mesmo com o comando abaixo. Ele
deve fazer um novo backup e enviar para o bucket criado na aws.

/home/ubuntu/scripts/backup.sh

24
25

Você também pode gostar