Deploy API Node, Adonis, Mysql AWS Ubuntu
Tags: devops, node, aws, deploy
Published: 2021-07-03 00:44:08

# Deploy de produção completo API Node/Adonis, Mysql, Ubuntu 18/20 no servidor cloud AWS.


- Criar uma máquina no serviço ec2 da Aws. Ubuntu Server 18.04 ou 20

```bash
sudo apt-get update
```

```bash
sudo apt-get upgrade
```

- Instalar o Nodejs na versão 14 TLS

```bash
curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -
```

```bash
sudo apt -y install nodejs
```

- Verifique a instalação e versão.

```bash
node  -v
```

##### A versão deve ser igual ou superior a 14.17

-Versão do Nodejs instalada:
```bash
v14.17.2
```

- Verifique o NPM e sua versão:

```bash
npm -v
```

- Instalar o Adonis Framework Global



# Instalar o Mysql-Server

- Comando de instalação:

```bash
sudo apt install mysql-server
```

- Instalando da forma correta e segura siga esse exemplo:

https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-20-04-pt

#### Verifique se o Mysql foi instalado corretamente e se esta funcionando.

```bash
systemctl status mysql.service
```
- Se tudo estiver certo, o resultado será esse:

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h7s21t7shpvleniqc6m9.png)

## Agora vamos trocar a senha do *usuário padrão do mysql, o root*.

Entre no Mysql, com o comando:

```bash
sudo mysql
```

Agora alterar/adicionar uma senha para o usuário root.

- Altere 'you new password' para sua senha atual.

```bash
ALTER USER 'root'@'localhost' IDENTIFIED BY 'your new password'; 
```
- Altere 'you new password' para sua senha atual.
 
```bash
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your new password';
```

Resposta do Mysql:

```mysql
Query OK, 0 rows affected (0.01 sec)
```

### Criando um novo banco de dados para nossa aplicação:

```bash
sudo mysql -u root -p
```

Digite sua senha cadastrada no processo anterior.

##### Pronto! Dentro do MYSQL!
Crie um novo banco de dados:

```mysql
CREATE DATABASE my_name_database;
```

- Veja o novo banco criado:

```mysql
SHOW DATABASES;
```


#### Agora poderemos incluir o processo em nosso arquivo *.env*, fazendo a migração do banco de dados para o nosso banco recém criado. Se tudo estiver correto poderemos fazer as migrations sem problemas.


- Você pode usar outros Banco de Dados ou ORMs e coisas do tipo, você pode fazer isso usando qualquer outra ferramenta nesse sentido, neste exemplo usaremos o Node-JS com AdonisFramework-JS, por isso algumas particularidades.

##### Download do **projeto API Service Backend**. Projeto usando Nodejs/Adonis Framework e Mysql Database.

O projeto está aberto no Github:
https://github.com/Utwo/adonis-realworld-example-app

### Criar um novo usuário Linux dentro do seu console do Ubuntu 18 ou 20. Toque *novo_usuario* pelo seu usuário.

```bash
sudo adduser novo_usuario
```
#### Cadastre sua senha passa esse usuário.

## Como conceder a um usuário privilégios root

 ```bash
sudo /usr/sbin/visudo
```

### Altere o arquivo, inserindo seu usuário e o total privilégio.

- Adicionando o nome do usuário e as mesmas permissões como root sob a especificação de privilégios do usuário irá conceder-lhes os privilégios sudo.

```javascript
# User privilege specification
root            ALL=(ALL:ALL) ALL 
novo_usuario    ALL=(ALL:ALL) ALL
```
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vpzxq2agw70f8z7eqic4.png)


### Entre na sessão desse novo usuário criado:

```bash
su - novo_usuario
```

Pronto! Verifique de estar logado com seu usuário.

```bash
myuser@ip-122-34-1-200:~$
```

### Instale o Adonis-Cli Framework Globalmente no servidor:

```bash
sudo npm install -g adonis-cli
```

### Instale o PM2 Framework Globalmente para **Hosting** e **Deploy** da nossa aplicação:

```bash
sudo npm install -g pm2
```

- Processo completo de instalação, configuração e migração do banco de dados.


## Faça o download do projeto para o local do seu usuário.

O projeto está aberto no Github:
https://github.com/Utwo/adonis-realworld-example-app

```bash
git clone https://github.com/Utwo/adonis-realworld-example-app
```

### Entre no projeto:

```bash
cd adonis-realworld-example-app
```

### Instale a aplicação e os pacotes:

```bash
sudo npm install
```

### Alterar o arquivo .env.exemple para .env:

```bash
mv .env.exemple .env
```

#### Instale a Adonis dentro da sessão do seu usuário recém criado:

```bash
sudo npm i --global @adonisjs/cli
```

#### Instale o PM2 dentro da sessão do seu usuário recém criado:

```bash
sudo npm install -g pm2
```

#### Gerando a chave única da aplicação:

```bash
adonis key:generate
```

Entre no arquivo .env para configurar sua aplicação:

```bash
nano .env
```

Altere **suas credências de acesso ao banco de dados** no arquivo **.env**

![Alt Text](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oof259dnjrle9bv8mx3b.png)




## EM CONSTRUÇÃO...

Referências: 

https://wime.com.br/2013/06/06/como-adicionar-e-excluir-usuarios-no-ubuntu-12-04-e-centos-6/

https://www.howtoforge.com/tutorial/how-to-deploy-nodejs-applications-with-pm2-and-nginx-on-ubuntu/

https://dev.to/romainlanz/deploy-your-adonis-website-17ec

https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-20-04-pt

https://stackoverflow.com/questions/51008807/nodejs-mysql-client-does-not-support-authentication-protocol

https://scotch.io/tutorials/deploying-adonisjs-5-to-digitalocean

https://computingforgeeks.com/install-node-js-14-on-ubuntu-debian-linux/