Setup Local
Como rodar o Ouroboros em desenvolvimento ou em um evento real.
Pré-requisitos
- Node.js 20+ (backend Node.js e frontend)
- Python 3.11+ (apenas se usar o backend Python)
- Git
Nenhum banco de dados externo, nenhum Docker obrigatório.
1. Clone o repositório
2. Backend
Escolha a opção que preferir — ambas expõem exatamente a mesma API REST e WebSocket e usam o mesmo banco SQLite.
Opção A — Node.js (backend-node/)
cd backend-node
# Instala dependências
npm install
# Cria o arquivo de configuração
cp .env.example .env
Edite o .env com os valores do seu ambiente:
# Segurança
ADMIN_TOKEN=seu_token_admin_aqui
SECRET_KEY=chave_secreta_aleatoria
# Banco de dados (padrão é o diretório do backend-node/)
DATABASE_URL=./ouroboros.db
# Configuração do evento
EVENT_NAME=Feira da Troca 2025
MAX_COMANDAS=1000
PORT=8000
Gerando tokens seguros
3. Inicializa o banco (Node.js)
4. Sobe o servidor (Node.js)
O servidor estará acessível em http://localhost:8000.
Com 0.0.0.0 como host padrão, outros dispositivos na mesma rede WiFi podem acessar via IP da máquina (ex: http://192.168.1.10:8000).
Opção B — Python / FastAPI (backend-python/)
cd backend-python
# Cria e ativa o ambiente virtual
python -m venv .venv
source .venv/bin/activate # Linux/Mac
# .venv\Scripts\activate # Windows
# Instala dependências
pip install -r requirements.txt
# Cria o arquivo de configuração
cp .env.example .env
Edite o .env com os valores do seu ambiente:
# Segurança
ADMIN_TOKEN=seu_token_admin_aqui
SECRET_KEY=chave_secreta_aleatoria
# Banco de dados (padrão é o diretório do backend)
DATABASE_URL=sqlite:///./ouroboros.db
# Firebase (opcional — sync desabilitada se não configurado)
# FIREBASE_PROJECT_ID=
# FIREBASE_PRIVATE_KEY=
# FIREBASE_CLIENT_EMAIL=
# Configuração do evento
EVENT_NAME=Feira da Troca 2025
MAX_COMANDAS=1000
3. Inicializa o banco (Python)
4. Sobe o servidor (Python)
O servidor estará acessível em:
- API:
http://localhost:8000 - Docs interativas:
http://localhost:8000/docs - ReDoc:
http://localhost:8000/redoc
Com --host 0.0.0.0, outros dispositivos na mesma rede WiFi podem acessar via IP da máquina (ex: http://192.168.1.10:8000).
5. Frontend (demonstração)
Frontend de demonstração
O frontend incluído é um protótipo funcional de demonstração. Ele implementa todos os fluxos do sistema (login, emissão de comandas, carrinho, debitar) mas foi construído com foco em funcionalidade, não em design final. A interface pode ser livremente customizada, redesenhada ou substituída — o backend e a API WebSocket são a camada estável do projeto.
O painel estará em http://localhost:5173.
Para produção (servido pelo próprio backend):
6. Criando lojas
Após o servidor rodar, acesse o painel admin (frontend em http://localhost:5173, selecione "Banco" e use o ADMIN_TOKEN como chave de acesso).
No Dashboard do Banco, clique em "Gerenciar Lojas" para criar lojas e obter os tokens dos terminais.
Ou via API REST:
curl -X POST http://localhost:8000/api/stores \
-H "token: SEU_ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Cantina Italiana"}'
A resposta incluirá o terminal_token gerado automaticamente para a loja.
7. Fluxo de login e operação
- Banco (Admin): Na tela de login, selecione "Banco" e insira o
ADMIN_TOKENdefinido no.env. - Loja: Na tela de login, selecione "Loja" e insira o
terminal_tokenda loja (obtido via painel admin ou API).
Setup para evento real
Rede local
O servidor roda na máquina do organizador. Os terminais das lojas se conectam via WiFi da escola.
Notebook do organizador
├── IP: 192.168.1.10 (exemplo)
├── Node.js: cd backend-node && npm start
└── Python: uvicorn app.main:app --host 0.0.0.0 --port 8000
Terminais das lojas
└── abrem: http://192.168.1.10:5173 (frontend dev)
ou http://192.168.1.10:8000 (se build de produção)
Anote o IP antes do evento
Descubra o IP da máquina servidora antes de começar:
Backup durante o evento
O banco inteiro é um único arquivo. Um pendrive com cópias periódicas é suficiente.