RESTful com Node.js, Restify e MySQL em Ambiente Dockerizado
Este projeto foi desenvolvido durante o acompanhamento da série de screencasts disponível em https://www.youtube.com/playlist?list=PLFJmwzuHdBRTBbkyH0gATtDhj6ikOIkMy que é pré-requisito para o curso Single Page Application com Vue.js http://www.treinatom.com.br/pt/edukee/detalhes-do-evento/190edc6b7593e3081a858f55652abd92a9d07353.
- Node.js versão 8 ou superior;
- Nodemon -
npm i -g nodemon
; - Docker versão 17.07 ou superior;
- Docker Compose versão 1.16.1 ou superior;
- Ambientum.
Como tenho preferência por trabalhar em ambientes dockerizados, fiz algumas adaptações no projeto, implementando um container docker para rodar a aplicação, fazendo uso do Ambientum.
E qual a vantagem dessas adaptações que fiz? Existem diversas vantagens, mas vou apenas frisar uma delas, que é a não obrigação de instalação e preparação de todo um ambiente de desenvolvimento. Que necessitaria a instalação por exemplo do nodejs, npm, mysql e etc.
O Ambientum é um conjunto de imagens Docker desenvolvidas, mantidas e distribuidas pelo CODECASTS. E ele pode lhe ajudar com algumas coisas incríveis, os 3 cenários mais comuns estão listados a seguir:
- Rodar Laravel e/ou Vue.JS em Desenvolvimento.
- Rodar Laravel e/ou Vue.JS em Produção (Includindo Integração Contínua).
- Substituir dependências locais com comandos que rodam no Docker.
Sem sombra de dúvidas, o Ambientum irá facilitar a sua vida em muito, principalmente no que diz respeito a ambientes de desenvolvimento dockerizados, mas antes de você começar a brincar com o Ambientum, alguns conhecimentos são necessários:
- O básico sobre Docker e Containers.
- Estar confortável usando a linha de comando.
- Saber operar o docker-compose.
- Ler o README do Ambientum.
Mas não se preocupem, o readme está escrito em dois idiomas: Inglês e Português.
- Faça o clone do repositório e no terminal navegue até a pasta criada com os comandos abaixo:
git clone git@github.com:vs0uz4/restful-nodejs-restify.git
cd restful-nodejs-restify
- Faça uma cópia do
.env.example
para um novo arquivo com nome de.env
e preencha os valores das variáveis de acordo com as variáveis de ambiente configuradas no arquivo docker-compose.yml.
cp .env.example .env
Exemplo de configuração das variáveis.
SERVER_PORT=3456
MYSQL_HOST=mysql
MYSQL_USERNAME=restful_ws
MYSQL_PASSWORD=restful_ws
MYSQL_DATABASE=restful_ws
MYSQL_TEST_DATABASE=restful_ws_test
JWT_SECRET=bf21391faaa389b98d62053230feba28a288fd93
As variáveis de ambiente para configuração da
porta
do servidor e as relacionadas ao banco de dadosmysql
, devem obrigatoriamente coincidirem com as mesmas informadas no arquivo docker-compose.yml.
- Instale as dependências globais e de desenvolvimento no container com os comandos abaixo:
docker-compose run web npm i -g npm nodemon
docker-compose run web npm i
- Inicialize os containers.
docker-compose up
- Crie as tabelas da base de dados principal com os comandos abaixo:
docker-compose exec mysql mysql -uroot -prestful_ws
USE `restful_ws`;
CREATE TABLE `categories` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`email` varchar(255) DEFAULT NULL,
`password` varchar(40) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
Sem desconectar e/ou sair do mysql, siga os passos seguintes.
- Adicione a base principal, um usuário padrão para podermos nos conectar posteriormente.
INSERT INTO `users` (email, password) VALUES ('admin@example.com', SHA1('123456'));
- Crie a base de dados de teste, suas respectivas tabelas e aplique as políticas de segurança no MYSQL para o usuário da aplicação.
CREATE DATABASE `restful_ws_test`;
USE `restful_ws_test`;
CREATE TABLE `categories` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=latin1;
CREATE TABLE `users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`email` varchar(255) DEFAULT NULL,
`password` varchar(40) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;
GRANT ALL ON restful_ws.* TO 'restful_ws'@'%';
GRANT ALL ON restful_ws_test.* TO 'restful_ws'@'%';
FLUSH PRIVILEGES;
Após o termino da realização dos procedimentos acima listados, faça a desconexão do MySQL, para isto basta executar no console do banco de dados o comando:
\q
.
Para executarmos os testes apresentados no decorrer da série, em uma nova aba do console, digitarmos o seguinte comando:
docker-compose exec web npm run test
Caso seja necessário executar os testes em modo
watch
, basta acrecentarmos ao comando anterior-- --watch
.
docker-compose exec web npm run test -- --watch
Utilize o Postman para testar suas chamadas. https://www.getpostman.com/.