@marcos_feitoza/personal-finance-backend
v1.6.0
Published
``` cd /Users/marcosfeitoza/Documents/projeto/app/personal-finance-backend && helm template personal-finance-backend helm -f helm/prod-values.yaml --debug --show-only templates/ingress.yaml ```
Readme
Helm template:
cd /Users/marcosfeitoza/Documents/projeto/app/personal-finance-backend && helm template personal-finance-backend helm -f helm/prod-values.yaml --debug --show-only templates/ingress.yamlSecret:
Base64-encoded echo -n XXXX | base64s
kubeseal --controller-name=sealed-secrets --controller-namespace=kube-system --format yaml -f secret.yaml > sealed-secret.yaml
k apply -f sealed-secret.yaml
Encription
openssl enc -aes-256-cbc -salt -in secret.yaml -out secret.yaml.enc -pass pass: openssl enc -d -aes-256-cbc -in secret.yaml.enc -out secret.yaml -pass pass:
crie um programa de financas pessoais capaz de ser utilizado na web (locally) e via mobile ( android) nessa promeira faze vamos fazer simples, apenas crie a pagina inicial aonde eu coloco o salario como (credito) e na mesma pagina crie um formulario para inserir as dispesas e tudo deve ser salvo em um posgresql do meu kubernetes cluster. aqui esta o DB, e para se conectar vamos usar o sealedsecrets para salvar os segredos. Abaixo esta a lista de items de despesas. O projeto vai usar essa pasta para o helm e para o app, vamos usar docker para gerar a imagem /Users/marcosfeitoza/Documents/projeto/app/personal-finance
k get all -n postgresql NAME READY STATUS RESTARTS AGE pod/postgres-client-6b9858d594-plz76 1/1 Running 4 (11d ago) 170d pod/postgresql-7dc696d949-gxttl 1/1 Running 4 (11d ago) 170d
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/postgresql NodePort 10.109.84.97 5432:30001/TCP 172d
NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/postgres-client 1/1 1 1 172d deployment.apps/postgresql 1/1 1 1 170d
NAME DESIRED CURRENT READY AGE replicaset.apps/postgres-client-6b9858d594 1 1 1 172d replicaset.apps/postgresql-7dc696d949 1 1 1 170d
Items e subitens HEALTH Doctor Medicine Other Health
TRANSPORT Bus pass cab car gas Car Parking Car rental Car Traffic ticket Other Transport
PERSONAL EXPENSES Assents Clothing Curses Hair Phone bill present Tech Other PE
HOUSE Energy Net Rent Supermarket Utensils Other Home
LEISURE Snack Bar Sports Breakfast Lunch Dinner Activites Other Leisure
TRIPS Tour Ticket Hotel Exchange Transportation Fly ticket All included Trip Bar Trip activites Trip Food Other Other
PENT HAUS Mortgage-P.H. Pent-hous Expenses
Da Vince Mortgage-Da Vinci
Acores Mortgage-Acores Acores-expenses
flet Mortgage-flet
Plano de Ação
Tecnologias:
- Frontend (Web & Mobile): Flutter. É a escolha perfeita, pois com um único código, podemos gerar o aplicativo da web (para rodar localmente) e o aplicativo Android.
- Backend (API): Python com FastAPI. É um framework web moderno, rápido e fácil para criar a API que se comunicará com seu banco de dados PostgreSQL.
- Banco de Dados: Seu PostgreSQL já existente no Kubernetes.
- Containerização: Docker para empacotar o backend (API) e o frontend (Flutter web build).
- Deployment: Helm para orquestrar a implantação de nossos contêineres no Kubernetes.
- Segredos: Sealed Secrets para gerenciar as credenciais do banco de dados de forma segura, como você solicitou.
Estrutura do Projeto: Vou criar a seguinte estrutura de diretórios dentro de /Users/marcosfeitoza/Documents/projeto/app/personal-finance:
1 /Users/marcosfeitoza/Documents/projeto/app/personal-finance/
2 ├── backend/ # Aplicação da API em Python/FastAPI
3 │ ├── app/
4 │ │ ├── __init__.py
5 │ │ ├── main.py # Lógica principal da API (endpoints)
6 │ │ ├── models.py # Modelo de dados do banco
7 │ │ └── crud.py # Funções para interagir com o banco
8 │ ├── Dockerfile # Para construir a imagem da API
9 │ └── requirements.txt # Dependências Python10 │ 11 ├── frontend/ # Aplicação em Flutter 12 │ ├── lib/ 13 │ │ └── main.dart # Ponto de entrada e UI do App 14 │ ├── pubspec.yaml # Dependências do Flutter 15 │ └── Dockerfile # Para construir e servir a versão web 16 │ 17 └── helm/ # Helm Chart para deployment 18 ├── personal-finance/ 19 │ ├── Chart.yaml 20 │ ├── values.yaml 21 │ ├── templates/ 22 │ │ ├── _helpers.tpl 23 │ │ ├── backend-deployment.yaml 24 │ │ ├── frontend-deployment.yaml 25 │ │ ├── service.yaml 26 │ │ ├── ingress.yaml 27 │ │ └── sealed-secret.yaml # Manifesto do segredo criptografado 28 │ 29 └── db-secret.yaml # Segredo original (antes de ser selado)
Backend (API com Python e FastAPI):
- Criarei um endpoint POST /transactions para adicionar despesas e créditos.
- A API se conectará ao PostgreSQL usando as credenciais fornecidas através do Sealed Secret.
- Definirei um modelo de dados para as transações (ex: id, tipo, categoria, subcategoria, valor, data).
Frontend (App com Flutter):
- Desenvolverei a página inicial.
- Ela terá um campo para inserir o salário (crédito).
- Haverá um formulário para adicionar despesas, com menus suspensos (dropdown) para as categorias e subcategorias que você listou.
- O aplicativo fará chamadas HTTP para a API do backend para salvar os dados.
Banco de Dados e Segredos (PostgreSQL e Sealed Secrets):
- Primeiro, criarei um arquivo db-secret.yaml com as credenciais do seu PostgreSQL (host: postgresql.postgresql, port: 5432, user, password, dbname).
- Em seguida, usarei o comando kubeseal para criptografar este arquivo, gerando um sealed-secret.yaml dentro do chart do Helm. Este arquivo criptografado é seguro para ser versionado.
- O backend será configurado para ler essas credenciais como variáveis de ambiente.
Deployment (Docker e Helm):
- Criarei os Dockerfiles para o backend e para o frontend.
- Desenvolverei o Helm Chart para automatizar a implantação. O chart irá:
- Criar um Deployment e Service para a API do backend.
- Criar um Deployment e Service para o frontend web.
- Aplicar o SealedSecret que, por sua vez, criará o segredo com as credenciais do banco no cluster.
- Opcionalmente, criar um Ingress para expor a aplicação web.
Este plano cobre todos os seus requisitos, estabelecendo uma base sólida e organizada para as futuras fases do projeto.
Se você concordar com este plano, começarei criando a estrutura de diretórios e os arquivos iniciais. Vamos começar?
Próximos Passos:
Configure suas Credenciais:
- Abra o arquivo /Users/marcosfeitoza/Documents/projeto/app/personal-finance/helm/db-secret.yaml.
- Substitua YOUR_USER, YOUR_PASSWORD, e YOUR_DATABASE pelas suas credenciais reais do PostgreSQL.
Criptografe o Segredo (Sealed Secrets):
- Para manter suas credenciais seguras, vamos usar o kubeseal. Execute o seguinte comando no seu terminal. Ele irá gerar um arquivo criptografado sealed-secret.yaml no diretório do Helm.
Eu posso executar o comando para selar o segredo para você, mas primeiro confirme que você atualizou o arquivo
db-secret.yamlcom suas credenciais.Construa e Envie as Imagens Docker:
- Você precisará construir as imagens Docker para o backend e o frontend e enviá-las para um registro de contêiner (como Docker Hub, GCR, etc.).
- Lembre-se de atualizar o arquivo values.yaml em /Users/marcosfeitoza/Documents/projeto/app/personal-finance/helm/personal-finance/values.yaml com o nome do seu repositório de imagens.
Instale o Helm Chart:
- Depois que as imagens estiverem no seu registro e o segredo estiver selado, você poderá implantar a aplicação no seu cluster Kubernetes com um simples comando do Helm.
Estou pronto para continuar assim que você confirmar que atualizou o arquivo de segredo.
