# Appwrite na Oracle Cloud

Assumindo q vc já tenha uma conta na [Oracle Cloud](https://www.oracle.com/br/cloud/), é relativamente simples criar uma VM/VPS

> e eu só vou indicar serviços/itens q sejam [0800 pra sempre](https://docs.oracle.com/pt-br/iaas/Content/FreeTier/freetier_topic-Always_Free_Resources.htm#freetier_topic_Always_Free_Resources_Infrastructure) (segundo a Oracle), blz ?

# Criando a VM

### Chegando onde se cria a VM

abra o `menu sanduíche` no canto superior esquerdo (do lado do nome Oracle Cloud) &gt; `compute` &gt; `instaces` &gt; escolha o `compartment` no menu lateral um pouco pra baixo &gt; `create instance` praticamente no meio da tela em cinza

### Image e Shape

de um nome, agora desça até a parte `image and shape`, em `image` eu gosto de escolher o `Oracle Linux 9` com a build + recente, mas ai é questão de gosto, fique a vontade para escolher outro Linux ou até, caso queira pagar a licença, o Windows, só q caso mude, os comandos provavelmente não serão os mesmo, então se liga nisso em !?... bom, agora no `shape`, temos 2 opções 0800, uma ARM (q é a Ampere) e outra x86 (q é a Specialty and previous generation)

* se for de ARM
    
    * o limite é 4 núcleos/OCPUs | 24 GB RAM
        
    * cada núcleos/OCPUs da 1 Gbps de banda de rede
        
* se for de x86 (pode ser só cmg, mas resolvi deixar esse aviso, as VMs x86 com Oracle Linux 9 na build + recente, ficam bugadas e travadas, então eu pego a build + antiga e só att)
    
    * o limite é 2 VMs separadas de 1 núcleos/OCPU | 1 GB RAM
        
    * cada VM vai ter 0.48 Gbps de banda de rede
        

> caso vc não saiba, no 0800, temos 200GB de `storage` e cada `boot volume` ocupa obrigatoriamente 50GB no mínimo, logo, só podemos ter 4 VMs rodando sendo 0800... mas, vc pode deletar 1 VM e fazer outra quantas vezes quiser, blz ?

### Networking

sugiro escolher `create new virtual cloud network` &gt; dar nome &gt; escolher `create new public subnet` &gt; dar nome (ou deixa padrão msm, só acho q fica feio) &gt; deixa `assign a public IPv4 address`

> prefiro criar uma rede do 0, pra colocar as portas certinhas e deixar cada VM com uma rede separada, pq vai q eu preciso alterar a porta X e isso afetaria uma VM rodando redondinha, ai ia ser mó dor de cabeça pra separar uma delas criando uma rede com a VM já rodando... então, pra evitar isso, já crio agora e pronto

### Add SSH Keys

`generate a key pair for me` &gt; `save private key` (não preciso avisar pra nunca compartilhar essa chave privada né ?! e sugiro q guarde um backup dela em algum lugar seguro e de preferencia criptografado)

### Boot Volume

`Use in-transit encryption` (só marcar e gg)

## Arrumar a chave SSH + esperar uns 5min

a chave SSH q vc baixou vai vir "aberta", então antes de sair usando ela, sugiro vc "ocultar" q no é remover as permissões de leitura de geral, só deixando a sua

* no 
    
    * 2 dedos/botão direito no arquivo &gt; `get info/obter informações` &gt; `sharing & permissions/compartilhamento e permissões` &gt; cadeado no canto inferior direito &gt; senha de adm &gt; seleciona `staff` &gt; clica no `-` no canto inferior esquerdo &gt; seleciona `everyone` &gt; muda o `privilege/privilégio` para `no access/sem acesso` &gt; em `name & extensions/nome e extensão` eu gosto de remover a extensão `.key` &gt; só clicar no `x/fechar` (no meu caso aparece o pop up pra confirmar a remoção da extensão, dou enter e gg) &gt; renomeio para o nome q dei da VM &gt; arrasto para a pasta oculta na Home `.ssh`
        
* no 🪟
    
    * 2 dedos/botão direito no arquivo &gt; `propriedades/alt + enter` &gt; removo o `.key` do nome &gt; marco/check os atributos `somente leitura` e `oculto` &gt; `ok` &gt; apareceu pop up ? só da enter
        

# Acessando a VM

### Instance access

só clicar no `copy` na frente do IP publico e substituir o `ip_address` no comando:

```bash
ssh opc@ip_address -i private_key
```

> ↳ substituir `private_key` com o caminho da sua chave SSH q vc baixou da Oracle

# Instalando o Appwrite

> caso queira pular a `pré-instalação` e `instalação`, basta usar o comando `curl -fsSL https://gitlab.com/mazieri/get_appwrite/-/raw/main/appwrite_installer_br.sh | sudo bash` do script q fiz [q ta nesse repo](https://gitlab.com/mazieri/get_appwrite), dai é só seguir com a `pós-instalação`

### Pré-instalação do Appwrite | Instalando requisitos

```bash
sudo su
```

> ↳ virar `root/adm`

```bash
yum -y update && yum -y upgrade
```

> ↳ atualizar tudo | o `-y` faz a confirmação de tudo "automaticamente"

```bash
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
```

> ↳ add `repo/base` para a instalação do `docker`

```bash
yum -y install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```

> ↳ instalar o `docker`

```bash
systemctl start docker
```

> ↳ iniciar o `docker`

```bash
systemctl enable docker.service
systemctl enable containerd.service
```

> ↳ fazer o `docker` iniciar junto com o sistema (caso vc precise reiniciar a VM)

```bash
docker run hello-world
```

> ↳ só pra testar o `docker` e ter ctz q ta tudo redondinho

### Instalação do Appwrite

```bash
docker run -it --rm \
    --volume /var/run/docker.sock:/var/run/docker.sock \
    --volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \
    --entrypoint="install" \
    appwrite/appwrite:1.3.7
```

> ↳ comando de instalação do appwrite

> essas opções ↓ vão aparecer no terminal na mesma ordem daqui

1. porta do servidor http, padrão é 80 (digita o nº q vc queira e de enter, ou só de enter pra manter o padrão)
    
2. porta do servidor https, padrão é 443 (digita o nº q vc queira e de enter, ou só de enter pra manter o padrão)
    
3. uma senha gigante, crie uma e não a compartilhei (eu sugiro usar geradores de senhas e colocar o 100+ caracteres)
    
4. url/endereço personalizado de site
    
5. url/endereço personalizado de site
    

### Pós-instalação do Appwrite | Configurando rede/acesso

> toda essa configuração de agora é feita na dashboard da sua VM na [Oracle Cloud](http://cloud.oracle.com/)

1. `Instance details` q fica embaixo de `General information` &gt; clica no link em frente a `Virtual cloud network` q ta com o nome da rede q vc colocou ao criar a VM &gt; em `Subnets` clica no link com o nome da sub rede (como vc criou junto com a VM, espero, só vai ter 1 msm, então, não tem erro) &gt; em `Security Lists` clica em `Default Security List for...` &gt; em `Ingress Rules` (já vão ter 3 regras) clica no botão cinza grande q tem `Add Ingress Rules`
    
2. em `Add Ingress Rules` &gt; `Source CIDR` = `0.0.0.0/0` &gt; `Destination Port Range` = `80` &gt; no canto inferior direito `+ Another Ingress Rules` &gt; `Source CIDR` = `0.0.0.0/0` &gt; `Destination Port Range` = `443` &gt; no canto inferior esquerdo `Add Ingress Rules`
    
3. agora vc já consegue acessar a dashboard do appwrite em `https://ENDEREÇO-IP-DO-SEU-SERVIDOR`
    
4. criar usuário admin (nas config padrões do `docker-compose.yml`, só permite a criação de 1 usuário admin, os outros terão q ser convidados via dashboard)
    

### Personalização | Configurações extras

1. em `Add Ingress Rules` &gt; `Source CIDR` = `0.0.0.0/0` &gt; `Destination Port Range` = `X` sendo q quero recomendar essas 3
    
    1. TCP 587 para o serviço de email
        
    2. TCP 3310 para o clamav (pra ativar o clamav, precisa descomentar a "parte dele" no `docker-compose.yml`)
        
        ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686871888440/2d811cbf-ae59-4020-b63f-b12c8d543828.png align="center")
        
    3. TCP 3000 para o grafana (pra ativar o grafada, precisar [add ele](https://dev.to/appwrite/grafana-integration-50p9) no `docker-compose.yml`)
        
        ![](https://cdn.hashnode.com/res/hashnode/image/upload/v1686871989329/330b9467-9970-4d9a-ab0b-845025f385f1.png align="center")
        

# Comandos extras

```bash
docker stats
```

> ↳ vai mostar os containers rodando e os recursos q cada um deles ta usando

```bash
docker kill $(docker ps -q)
```

> ↳ pra matar/finalizar todos os conainers

```bash
docker compose stop
```

> ↳ parar os containers

```bash
docker compose up -d --remove-orphans --build --force-recreate --renew-anon-volumes
```

> ↳ pra resetar todos os containers e forçar a aplicação de todas as alterações feitas, sugiro utilizar esse comando toda vez q fizer alguma alteração no `.env` ou no `docker-compose.yml`

```bash
docker compose down -v
```

> ↳ parar e remover o appwrite ([na dock do appwrite](https://appwrite.io/docs/self-hosting#uninstall), eles chamam esse comando de desinstalação)

---

# `OBS #5`

> caso queira ler a doc oficinal, ela esta [aqui](https://appwrite.io/docs/self-hosting)

# `OBS #4`

> caso vc queira entender os comandos do docker compose, [aqui](https://docs.docker.com/compose/reference/#command-options-overview-and-help) está a documentação com as explicações, mas nada q um `docker compose --help` não "resolva"

# `OBS #3`

> vou tentar manter os script daqui sempre att

# `OBS #2`

> pode ser só cmg, mas resolvi deixar esse aviso, as `VMs x86` com `Oracle Linux 9` na `build + recente`, ficam bugadas e travadas, então eu pego a `build + antiga` e só att

# `OBS #1`

> provavelmente vai aparecer q está cobrando R$ 10 do `boot volume`, mas fica tranquilo q não ta, já fiz o teste várias vezes e nunca fui cobrado, inclusive, deixo sempre 4 VMs rodando e tudo 0800 (isso claro, dentro dos 200GB q são 0800 pra todas as contas)

![mostrando q vai cobrar o preço do , mas nunca cobrou](https://cdn.hashnode.com/res/hashnode/image/upload/v1686871306116/b036c61d-8810-4dd8-a8fe-e19e7ea75433.png align="center")

---

# Bom, acho q é isso, obrigado por ler !

Se eu falei alguma besteira, me corrija pf, e se tiver um tempo, se inscreva na minha newsletter e fique a vontade para se [conectar](https://www.linkedin.com/in/felipemazieri/)

> ***Como a minha classe favorita do Ragnarok, Super Aprendiz, sou um Eterno Aprendiz***

n4 | v0.3
