https://github.com/lubrum/imersao-full-stack-fullcycle
Imersão Full Cycle 3.0 ocorrida em 10/2023. Foi desenvolvido um projeto que simula o pix, com frontend, backend e k8s.
https://github.com/lubrum/imersao-full-stack-fullcycle
docker docker-compose go grpc java kafka kubernetes nestjs nextjs reactjs
Last synced: 3 months ago
JSON representation
Imersão Full Cycle 3.0 ocorrida em 10/2023. Foi desenvolvido um projeto que simula o pix, com frontend, backend e k8s.
- Host: GitHub
- URL: https://github.com/lubrum/imersao-full-stack-fullcycle
- Owner: Lubrum
- License: apache-2.0
- Created: 2023-10-18T22:45:10.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2025-01-05T14:47:40.000Z (over 1 year ago)
- Last Synced: 2025-01-13T23:26:42.790Z (over 1 year ago)
- Topics: docker, docker-compose, go, grpc, java, kafka, kubernetes, nestjs, nextjs, reactjs
- Language: TypeScript
- Homepage:
- Size: 886 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README

Participe gratuitamente: https://imersao.fullcycle.com.br/
## Sobre o repositório
Esse repositório contém todo código utilizado durante as aulas para referência.
Faça seu fork e também nos dê uma estrelinha para nos ajudar a divulgar o projeto.
install plugins on vs code 'dev container' 'rest client' 'es lint'
plugin dev container allows to use vs code from inside docker container , on install/use need to disable machine ip6, after can enable it again
Passo a passo manual para execução completa da aplicação:
1. executar o kafka;
> cd kafka; docker compose up -d;
2. rodar fixtures para a aplicação go de dentro do container codepix-app
> go run main.go fixtures
3. executar a aplicação go codepix de dentro do container codepix-app
> go run main.go all
3.1. abrir o pgadmin do localhost e conectar no banco:
> usar o IP do localhost + porta 5432:
3. executar a aplicação dos bancos em nestjs;
> cd nestjs; docker compose up -d;
3.1. comandos para execução de dentro do container 'nestjs-app':
> npm install
> BANK_CODE=001 npm run console fixtures
> BANK_CODE=002 npm run console fixtures
> BANK_CODE=001 npm run start:dev
> BANK_CODE=002 npm run start:dev
4. executar o nextjs;
> cd nextjs; docker compose up -d;
4.1. comandos para execução de dentro do container 'nextjs-app':
> npm run 001:dev
> npm run 002:dev
5. Sobre a parte de Kubernetes:
5.0. criar imagem da aplicação codepix e subir no docker hub
> cd codepix; docker build -t lucianobrum/codepix-go:latest -f Dockerfile.prod ./;
> docker login
> docker push lucianobrum/codepix-go:latest
5.1. Instalar o 'kind' ferramenta que simula o Kubernetes em containers docker.
```sh
[ $(uname -m) = x86_64 ] && curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
kind create cluster --name=codepix
Instalar o kubectl:
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256"
echo "$(cat kubectl.sha256) kubectl" | sha256sum --check
sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
kubectl version --client
kubectl cluster-info --context kind-codepix
kubectl get node
docker ps
kubectl apply -f configmap.yaml
kubectl apply -f deploy.yaml
kubectl get pods
kubectl describe pod xyz...
kubectl logs xyz...
```
Instalar Helm para poder usar postgres dentro do Kubernetes (não recomendado, fins didáticos).
```sh
curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null
sudo apt-get install apt-transport-https --yes
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list
sudo apt-get update
sudo apt-get install helm
```
```sh
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install postgres bitnami/postgresql
export POSTGRES_PASSWORD=$(kubectl get secret --namespace default postgres-postgresql -o jsonpath="{.data.postgres-password}" | base64 -d)
echo $POSTGRES_PASSWORD
# JGvJbOQon7
kubectl run postgres-postgresql-client --rm --tty -i --restart='Never' --namespace default --image docker.io/bitnami/postgresql:16.0.0-debian-11-r13 --env="PGPASSWORD=$POSTGRES_PASSWORD" --command -- psql --host postgres-postgresql -U postgres -d postgres -p 5432
```
```sql
create database codepix;
create database bank001;
create database bank002;
```
Pegar a configuração dsn do arquivo .env, adaptar os valores conforme abaixo:
> dsn="dbname=codepix sslmode=disable user=postgres password=JGvJbOQon7 host=postgres-postgresql"
E converter para base 64 e inserir no secret.yaml em data -> dsn do codepix:
```sh
ZHNuPSJkYW5pbmU9Y29kZXBpeCBzc2xtb2RlPWRpc2FibGUgdXNlcj1wb3Jnc3RvZ3JlcyBwYXNzd29yZD1KR3ZKYk9Rb24xNyBob3N0PXBvc3RncmVzLXBvc3RncmVs
kubectl apply -f secret.yaml
kubectl apply -f configmap.yaml
kubectl apply -f deploy.yaml
kubectl get services
kubectl delete pod codepix-xyz... # para deletar pods, kubernetes recria outro
```
Adicionar o kafka no kubernetes (não é muito usado, geralmente tem servidor dedicado e etc, por exigir baixa latência e etc).
Obs: o kafka do curso é 2.7.0 e a atual é 3.6.0, pode estar dando problemas...
no antigo tem kafka0 e kafka-zookeeper e no atual tem kafka-controller-0, kafka-controller-1 e kafka-controller-2...
```sh
helm install kafka bitnami/kafka
kubectl get pods
kubectl apply -f secret.yaml
kubectl apply -f configmap.yaml
kubectl apply -f deploy.yaml
kubectl apply -f service.yaml
kubectl get svc
kubectl get configmaps
```
```sh
> cd nestjs; docker build -t lucianobrum/imersao-bankapi:latest -f Dockerfile.prod ./;
> docker login
> docker push lucianobrum/imersao-bankapi:latest
```
Pegar a senha do postgres (que gerou automático anteriormente) e fazer encode em Base64 e colar no secret.yaml do bankapi.
No diretório do k8s/bankapi:
```sh
kubectl apply -f secret.yaml
kubectl apply -f configmap.yaml
kubectl exec -it bankapi-7d4996dd46-bp72s bash
Rodar no container:
npm run typeorm migration:run
npm run console fixtures
```
```sh
kubectl port-forward svc/bankapi-service 8080:3000
```
Fazer mesmo para o bankapi002:
```sh
kubectl apply -f .
kubectl exec -it bankapi-2 bash
Rodar no container:
npm run typeorm migration:run
npm run console fixtures
```
Agora o nextjs:
Obs: não consegui fazer o build !!
```sh
> cd nextjs; docker build -t lucianobrum/imersao-bankfrontend:latest -f Dockerfile.prod ./;
> docker login
> docker push lucianobrum/imersao-bankfrontend:latest
```
```sh
cd k8s/bankfrontend/;kubectl apply -f .;
kubectl port-forward svc/bankfrontend-service 9090:3000
```
Obs: a requisição do browser para o nestjs não vai funcionar (ex: ao cadastrar pix), por causa do
> NEXT_PUBLIC_NEST_API_URL=http://bankapi-service:3000/api
do configmap do bankfrontend, que no caso do kubernetes, precisaria ter um IP acessível do ambiente externo.
```sh
cd k8s/bankfrontend002/;kubectl apply -f .;
kubectl port-forward svc/bankfrontend-service 9090:3000
```
Pendente subir na cloud :-).