Visão Geral
Este é um projeto para criar uma aplicação financeira que rodará dentro de um servidor local. O servidor local roda Proxmox para oferecer uma estrutura de multiplas aplicações rodando tanto em máquinas virtuais quanto em containers. O aplicativo de finanças rodará em fastHTML dentro de um container Docker. O Docker roda em um servidor Ubuntu que por sua vez roda sob um container do Proxmox (LXC).
Plataforma: Web
Framework: FastHTML
Infraestrutura: Container Docker rodando em Ubuntu Server que, por sua vez, roda em um container de Servidor Promox.
Análise e Desenvolvimento
Levantamento de Requisitos
Controle básico de finanças e orçamento, permitindo lançamentos rápidos e direcionados.
Diagrama de Casos de Uso
Descrição dos Casos de Uso
Gestão de Contas de Finanças
Listar contas
Criar conta
Editar Conta
Excluir Conta
Registro de Transações
Lançar Despesa
Lançar Receita
Fazer Transferência
Pagar Cartão
Registrar Despesa Recorrente
Cadastrar Conta
Estornar lançamento
Excluir lançamento
Diagrama de Classes
Descrição das Classes
Estrutura das Tabelas do Banco de Dados
CREATE TABLE usuarios(
id SERIAL PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL,
senha_hash VARCHAR(255) NOT NULL,
criado_em TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);Preparação do Ambiente
Pré-Requisitos
- Servidor Ubuntu já instalado e rodando no container do Proxmox.
- Docker Instalado no Servidor Ubuntu
Criando o container do Python para rodar o fastHTML
Preparar o seu Projeto FastHTML
Certificar que a aplicação funciona localmente.
O arquivo principal geralmente se chama main.py ou app.py.
Crie um arquivo de dependências requirements.txt:
python-fasthtml
uvicorn
#Adicionar outras dependências se necessário
Criar o Dockerfile
Criar um arquivo chamado Dockerfile (sem extensão) na pasta raiz do projeto e editar conforme abaixo:
#Usa uma imagem oficial Python leve
FROM python:3.15-slim
#Define o diretório de trabalho
WORKDIR /app
#Copia os arquivos de requisitos e instala as dependências
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
#Copia o restante do código do projeto
COPY . .
#Expõe a porta que o FastHTML/Uvicorn vai usar (padrão 5000 ou 8000)
EXPOSE 5000
#Comando para rodar a aplicação usando o Uvicorn
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "5000"]Criando o Banco de Dados
O que é FastHTML
Framework para aplicações web modernas em Python puro construídas sobre bases sólidas da web. Com o FastHTML você pode começar a desenvolver desde painéis simples até aplicações web escaláveis em minutos.
Principais características do projeto do framework:
- Poderoso o suficiente para criar os aplicativos web mais avançados e interativos que você possa imaginar.
- Rápido e leve, para que você possa escrever menos código e fazer mais.
- Fácil de aprender e usar, com uma sintaxe simples e intuitiva que facilita a criação rápida de aplicativos complexos.
Os aplicativos FastHTML são código Python, então você pode usar o FastHTML com todo o poder da linguagem e do ecossistema Python.
Ativando o ambiente virtual do Python
source venv/bin/activateInstalação
Como o fasthtml é uma biblioteca Python, você pode instalá-lo com:
pip install python-fasthtmlUso
Para um aplicativo mínimo, crie um arquivo “app.py” da seguinte forma:
app.py
from fasthtml.common import *
app,rt = fast_app()
@rt('/')
def get():
return Div(P('Olá Mundo!'), hx_get="/change")
serve()Executar o aplicativo com
python3 app.pyIsso exibirá um link para o seu aplicativo em execução: http://localhost:5001. Acesse esse link no seu navegador e você deverá ver uma página com o texto “Olá Mundo!”. Parabéns, você acabou de criar seu primeiro aplicativo FastHTML!
Acessando o Banco de Dados
Para acessar um banco MariaDB local, você não depende do FastHTML em si, mas sim de um driver Python para MariaDB.
Instalar a biblioteca mariadb
sudo apt update
sudo apt install -y libmariadb-dev gcc python3-dev
install mariadbConectar ao banco de dados
app.py
import mariadb
conn = mariadb.connect(
host="localhost",
port= número-da-porta, #padrão mariadb 3406
user="seu_usuario",
password="sua_senha",
database="seu_banco"
)
cursor = conn.cursor()Integrar ao FastHTML
from fasthtml import *
import mariadb
def get_db():
return mariadb.connect(
host="localhost",
port=3405, #padrão mariadb
user="root",
password="senha",
database="meubanco"
)
@route("/")
def get():
conn = get_db()
cur = conn.cursor()
cur.execute("SELECT nome FROM usuarios")
names = [row[0] for row in cur]
return Titled(
"Finanças " + app_version + " - Contas",
app_menu(),
P("Contas"),
Card(
Ul(*[Li(name) for name in names]),
header=Strong("Contas Registradas")
)
cur.close()
conn.close()
)