O conceito do projeto é ser um site que possibilite desenvolvedores front-end, mobile e profissionais de UX/UI criem APIs com recursos dinâmicos, operações de CRUD de forma fácil, rápida e sem precisar escrever uma linha de código ou ter que se preocupar em conexão com banco de dados, configurações de CORS e outras coisas.
- Docker
- Docker Compose
- Go versão 1.23.0
O projeto requer um arquivo .env com as seguintes variáveis de ambiente. Use o arquivo .env.template como referência para criar o seu .env.
SERVER_PORT=:8080
POSTGRE_HOST=localhost
POSTGRE_PORT=PORTA_DOCKER
POSTGRE_USER_NAME=USERNAME_DOCKER
POSTGRE_PASSWORD=PASSWORD_DOCKER
POSTGRE_DB_NAME=SUA_ESCOLHA
POSTGRE_SSL_MODE=disable
JWT_SECRET=CHAVE_JWT
REDIS_HOST=localhost:PORTA_DOCKER
REDIS_PASSWORD=PASSWORD_DOCKER
REDIS_DB=0
Para a chave JWT utilizei o site JWTSecret.com
Importante: Certifique-se de preencher todos os campos necessários no seu arquivo .env antes de iniciar o projeto.
Crie um arquivo mongo-init.js na raiz do projeto com o seguinte conteúdo:
db.createUser(
{
user: "root",
pwd: "SuaSenha",
roles: [
{
role: "readWrite",
db: "my_db"
}
]
}
);
db.createCollection("collection");Esse arquivo é utilizado para configurar o usuário e a coleção padrão no MongoDB.
Para facilitar a configuração das dependências (PostgreSQL, Redis e MongoDB), use o arquivo docker-compose.yml. Este arquivo cria os serviços necessários para o projeto.
version: "3.7"
services:
postgres:
container_name: postgres
image: postgres:15.3-alpine
shm_size: 128mb
environment:
POSTGRES_PASSWORD: SuaSenha
POSTGRES_USER: postgres
ports:
- "5432:5432"
redis:
image: redis:7.4.1
container_name: redis
ports:
- '6379:6379'
command: redis-server --loglevel warning --requirepass SuaSenha
volumes:
- cache:/data
mongo:
image: mongo:latest
container_name: mongo
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: SuaSenha
ports:
- "27017:27017"
volumes:
- mongodbdata:/data/db
- ./init-mongo.js:/docker-entrypoint-initdb.d/mongo-init.js:ro
volumes:
mongodbdata:
driver: local
cache:
driver: local
Para rodar todos os serviços necessários, use o comando abaixo:
docker-compose up -dEste comando irá subir o PostgreSQL, pgAdmin, Redis e MongoDB conforme configurado no docker-compose.yml.
Para verificar se os contêineres estão funcionando corretamente, use:
docker-compose psInstale as dependências do Go, e então rode o projeto:
go mod tidy
go run main.goO servidor estará disponível na porta definida em SERVER_PORT.
Abaixo estão as dependências do projeto, com uma breve descrição de cada uma:
| Lib | Versão | Descrição |
|---|---|---|
| GIN | v1.10.0 | Framework web em Go, usado para criar rotas e gerenciar requisições HTTP |
| JWT | v5.2.1 | Biblioteca para geração e validação de tokens JWT, essencial para autenticação |
| gotoenv | v1.5.1 | Utilizada para carregar variáveis de ambiente a partir de arquivos .env |
| crypto | v0.26.0 | Pacote com implementações de criptografia e hashing para maior segurança |
| uuid | v1.6.0 | Pacote com implementação de geração de IDs unicos padrão uuid |
| POSTGRE | v5.7.1 | Driver PostgreSQL, usado para comunicação com o banco PostgreSQL |
| Redis | v9.6.2 | Client Regis, usado para comunicação com o banco Redis |
| MONGODB | v1.17.1 | Driver MongoDB, usado para comunicação com o banco MongoDb |
Para utilizar ele é preciso instalar o pacote make através do chocolatey. Para rodar o projeto possui dois comandos
make run-devEsse comando irá apenas rodar o GO utilizando o comando go run ./main.go
make runEsse comando irá realizar o build do executável do projeto para a pasta bin e logo em seguida irá rodar o projeto.
PostgreSQL: Acesso disponível na porta 5432.
Redis: Acesso disponível na porta 6379.
MongoDB: Acesso disponível na porta 27017.
Certifique-se de substituir "SuaSenha" nos arquivos de configuração pelas senhas de sua escolha.