{"id":20225234,"url":"https://github.com/lubrum/imersao-full-stack-fullcycle","last_synced_at":"2026-04-02T02:49:31.474Z","repository":{"id":202146169,"uuid":"706941376","full_name":"Lubrum/imersao-full-stack-fullcycle","owner":"Lubrum","description":"Imersão Full Cycle 3.0 ocorrida em 10/2023. Foi desenvolvido um projeto que simula o pix, com frontend, backend e k8s.","archived":false,"fork":false,"pushed_at":"2025-01-05T14:47:40.000Z","size":907,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-13T23:26:42.790Z","etag":null,"topics":["docker","docker-compose","go","grpc","java","kafka","kubernetes","nestjs","nextjs","reactjs"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Lubrum.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-10-18T22:45:10.000Z","updated_at":"2025-01-05T14:47:37.000Z","dependencies_parsed_at":"2025-01-13T23:24:20.390Z","dependency_job_id":"b53c931c-7d7d-444e-bca4-e1c2a848cd8d","html_url":"https://github.com/Lubrum/imersao-full-stack-fullcycle","commit_stats":null,"previous_names":["lubrum/imersao-full-stack-fullcycle"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lubrum%2Fimersao-full-stack-fullcycle","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lubrum%2Fimersao-full-stack-fullcycle/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lubrum%2Fimersao-full-stack-fullcycle/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lubrum%2Fimersao-full-stack-fullcycle/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Lubrum","download_url":"https://codeload.github.com/Lubrum/imersao-full-stack-fullcycle/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241670090,"owners_count":20000325,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","docker-compose","go","grpc","java","kafka","kubernetes","nestjs","nextjs","reactjs"],"created_at":"2024-11-14T07:11:49.055Z","updated_at":"2025-12-30T19:14:09.111Z","avatar_url":"https://github.com/Lubrum.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Imersão Full Stack \u0026\u0026 Full Cycle](https://events-fullcycle.s3.amazonaws.com/events-fullcycle/static/site/img/grupo_4417.png)\n\nParticipe gratuitamente: https://imersao.fullcycle.com.br/\n\n## Sobre o repositório\nEsse repositório contém todo código utilizado durante as aulas para referência.\n\nFaça seu fork e também nos dê uma estrelinha para nos ajudar a divulgar o projeto.\n\ninstall plugins on vs code 'dev container' 'rest client' 'es lint'\nplugin dev container allows to use vs code from inside docker container , on install/use need to disable machine ip6, after can enable it again\n\nPasso a passo manual para execução completa da aplicação:\n\n1. executar o kafka;\n\u003e cd kafka; docker compose up -d;\n\n2. rodar fixtures para a aplicação go de dentro do container codepix-app\n\u003e go run main.go fixtures\n\n3. executar a aplicação go codepix de dentro do container codepix-app\n\u003e go run main.go all\n\n3.1. abrir o pgadmin do localhost e conectar no banco:\n\n\u003e usar o IP do localhost + porta 5432:\n\n3. executar a aplicação dos bancos em nestjs;\n\n\u003e cd nestjs; docker compose up -d;\n\n3.1. comandos para execução de dentro do container 'nestjs-app':\n\u003e npm install\n\u003e BANK_CODE=001 npm run console fixtures\n\u003e BANK_CODE=002 npm run console fixtures\n\u003e BANK_CODE=001 npm run start:dev\n\u003e BANK_CODE=002 npm run start:dev\n\n4. executar o nextjs;\n\n\u003e cd nextjs; docker compose up -d;\n\n4.1. comandos para execução de dentro do container 'nextjs-app':\n\n\u003e npm run 001:dev\n\u003e npm run 002:dev\n\n5. Sobre a parte de Kubernetes:\n\n5.0. criar imagem da aplicação codepix e subir no docker hub\n\n\u003e cd codepix; docker build -t lucianobrum/codepix-go:latest -f Dockerfile.prod ./;\n\u003e docker login\n\u003e docker push lucianobrum/codepix-go:latest\n\n5.1. Instalar o 'kind' ferramenta que simula o Kubernetes em containers docker.\n\n```sh\n[ $(uname -m) = x86_64 ] \u0026\u0026 curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64\nchmod +x ./kind\nsudo mv ./kind /usr/local/bin/kind\n\n\nkind create cluster --name=codepix\n\nInstalar o kubectl:\ncurl -LO \"https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl\"\ncurl -LO \"https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl.sha256\"\necho \"$(cat kubectl.sha256)  kubectl\" | sha256sum --check\nsudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl\nkubectl version --client\n\nkubectl cluster-info --context kind-codepix\nkubectl get node\ndocker ps\n\nkubectl apply -f configmap.yaml\nkubectl apply -f deploy.yaml\nkubectl get pods\nkubectl describe pod xyz...\nkubectl logs xyz...\n\n```\n\nInstalar Helm para poder usar postgres dentro do Kubernetes (não recomendado, fins didáticos).\n\n```sh\ncurl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg \u003e /dev/null\nsudo apt-get install apt-transport-https --yes\necho \"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\nsudo apt-get update\nsudo apt-get install helm\n```\n\n```sh\nhelm repo add bitnami https://charts.bitnami.com/bitnami\nhelm install postgres bitnami/postgresql\n\nexport POSTGRES_PASSWORD=$(kubectl get secret --namespace default postgres-postgresql -o jsonpath=\"{.data.postgres-password}\" | base64 -d)\necho $POSTGRES_PASSWORD\n# JGvJbOQon7\n\nkubectl 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\n```\n\n```sql\ncreate database codepix;\ncreate database bank001;\ncreate database bank002;\n```\n\nPegar a configuração dsn do arquivo .env, adaptar os valores conforme abaixo:\n\n\u003e dsn=\"dbname=codepix sslmode=disable user=postgres password=JGvJbOQon7 host=postgres-postgresql\"\n\nE converter para base 64 e inserir no secret.yaml em data -\u003e dsn do codepix:\n\n```sh\nZHNuPSJkYW5pbmU9Y29kZXBpeCBzc2xtb2RlPWRpc2FibGUgdXNlcj1wb3Jnc3RvZ3JlcyBwYXNzd29yZD1KR3ZKYk9Rb24xNyBob3N0PXBvc3RncmVzLXBvc3RncmVs\n\nkubectl apply -f secret.yaml\nkubectl apply -f configmap.yaml\nkubectl apply -f deploy.yaml\nkubectl get services\n\nkubectl delete pod codepix-xyz... # para deletar pods, kubernetes recria outro\n\n```\n\nAdicionar o kafka no kubernetes (não é muito usado, geralmente tem servidor dedicado e etc, por exigir baixa latência e etc).\n\nObs: o kafka do curso é 2.7.0 e a atual é 3.6.0, pode estar dando problemas...\nno antigo tem kafka0 e kafka-zookeeper e no atual tem kafka-controller-0, kafka-controller-1 e kafka-controller-2...\n\n```sh\nhelm install kafka bitnami/kafka\n\nkubectl get pods\nkubectl apply -f secret.yaml\nkubectl apply -f configmap.yaml\nkubectl apply -f deploy.yaml\nkubectl apply -f service.yaml\n\nkubectl get svc\nkubectl get configmaps\n```\n\n```sh\n\u003e cd nestjs; docker build -t lucianobrum/imersao-bankapi:latest -f Dockerfile.prod ./;\n\u003e docker login\n\u003e docker push lucianobrum/imersao-bankapi:latest\n```\n\nPegar a senha do postgres (que gerou automático anteriormente) e fazer encode em Base64 e colar no secret.yaml do bankapi.\n\nNo diretório do k8s/bankapi:\n\n```sh\nkubectl apply -f secret.yaml\nkubectl apply -f configmap.yaml\nkubectl exec -it bankapi-7d4996dd46-bp72s bash\n\nRodar no container:\n\nnpm run typeorm migration:run\nnpm run console fixtures\n```\n\n```sh\nkubectl port-forward svc/bankapi-service 8080:3000\n```\n\nFazer mesmo para o bankapi002:\n```sh\nkubectl apply -f .\nkubectl exec -it bankapi-2 bash\n\nRodar no container:\n\nnpm run typeorm migration:run\nnpm run console fixtures\n```\n\nAgora o nextjs:\n\nObs: não consegui fazer o build !! \n\n```sh\n\u003e cd nextjs; docker build -t lucianobrum/imersao-bankfrontend:latest -f Dockerfile.prod ./;\n\u003e docker login\n\u003e docker push lucianobrum/imersao-bankfrontend:latest\n```\n\n```sh\ncd k8s/bankfrontend/;kubectl apply -f .;\nkubectl port-forward svc/bankfrontend-service 9090:3000\n```\n\nObs: a requisição do browser para o nestjs não vai funcionar (ex: ao cadastrar pix), por causa do \n\n\u003e NEXT_PUBLIC_NEST_API_URL=http://bankapi-service:3000/api\n\ndo configmap do bankfrontend, que no caso do kubernetes, precisaria ter um IP acessível do ambiente externo.\n\n```sh\ncd k8s/bankfrontend002/;kubectl apply -f .;\nkubectl port-forward svc/bankfrontend-service 9090:3000\n```\n\nPendente subir na cloud :-).\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flubrum%2Fimersao-full-stack-fullcycle","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flubrum%2Fimersao-full-stack-fullcycle","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flubrum%2Fimersao-full-stack-fullcycle/lists"}