- Node.js versão 18 ou superior (Download)
- npm (vem com Node.js)
- Git (opcional, para clonar o repositório)
- ✅ Windows 10/11
- ✅ Linux (Ubuntu, Debian, etc.)
- ✅ macOS
Opção A: Via Git
git clone <url-do-repositorio>
cd Lab-LIMSOpção B: Download Manual
- Baixe e extraia o ZIP do projeto
- Abra o terminal na pasta
Lab-LIMS
cd backend
npm installDependências instaladas:
- express
- cors
- better-sqlite3
- bcrypt
- jsonwebtoken
cd ../frontend
npm installDependências instaladas:
- react
- react-router-dom
- lucide-react
- qrcode.react
Crie um arquivo .env na pasta backend:
PORT=3001
JWT_SECRET=sua-chave-secreta-super-segura-aqui
⚠️ Importante: Em produção, use uma chave JWT forte e única!
cd backend
node app.jsVocê verá:
✅ Migração de banco concluída
🔑 ======================================
PRIMEIRO ACESSO - Usuário Admin Criado
🔑 ======================================
Email: admin@lab.com
Senha: admin123
⚠️ TROQUE A SENHA APÓS PRIMEIRO LOGIN
========================================
✅ Backend (Híbrido) rodando em http://localhost:3001
Em outro terminal:
cd frontend
npm run devVocê verá:
VITE ready in XXX ms
➜ Local: http://localhost:5173/
- Abra o navegador em: http://localhost:5173
- Faça login com:
- Email:
admin@lab.com - Senha:
admin123
- Email:
- Troque a senha imediatamente! (Clique no ícone de chave 🔑)
Usando NSSM (Non-Sucking Service Manager):
# 1. Download NSSM
# https://nssm.cc/download
# 2. Instalar serviço
nssm install LabLIMS-Backend "C:\Program Files\nodejs\node.exe"
nssm set LabLIMS-Backend AppDirectory "C:\caminho\Lab-LIMS\backend"
nssm set LabLIMS-Backend AppParameters "app.js"
nssm start LabLIMS-BackendCrie /etc/systemd/system/lablims-backend.service:
[Unit]
Description=Lab-LIMS Backend
After=network.target
[Service]
Type=simple
User=seu-usuario
WorkingDirectory=/caminho/Lab-LIMS/backend
ExecStart=/usr/bin/node app.js
Restart=always
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.targetsudo systemctl enable lablims-backend
sudo systemctl start lablims-backendcd frontend
npm run buildServir a pasta dist/ com nginx ou Apache.
Nginx - exemplo de configuração:
server {
listen 80;
server_name seu-dominio.com;
# Frontend
location / {
root /caminho/Lab-LIMS/frontend/dist;
try_files $uri $uri/ /index.html;
}
# Backend API
location /api/ {
proxy_pass http://localhost:3001/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}Crie Dockerfile na raiz:
# Backend
FROM node:18-alpine AS backend
WORKDIR /app/backend
COPY backend/package*.json ./
RUN npm ci --production
COPY backend/ ./
# Frontend
FROM node:18-alpine AS frontend-build
WORKDIR /app/frontend
COPY frontend/package*.json ./
RUN npm ci
COPY frontend/ ./
RUN npm run build
# Final
FROM node:18-alpine
WORKDIR /app
COPY --from=backend /app/backend ./backend
COPY --from=frontend-build /app/frontend/dist ./frontend/dist
WORKDIR /app/backend
EXPOSE 3001
CMD ["node", "app.js"]Crie docker-compose.yml:
version: '3.8'
services:
lablims:
build: .
ports:
- "3001:3001"
volumes:
- ./data:/app/backend/lims.db
environment:
- NODE_ENV=production
- JWT_SECRET=${JWT_SECRET}
restart: unless-stoppedExecutar:
docker-compose up -dJWT_SECRET=gere-uma-chave-forte-com-openssl-rand-base64-32
NODE_ENV=productionUse Let's Encrypt com Certbot:
sudo certbot --nginx -d seu-dominio.com# Linux (UFW)
sudo ufw allow 22 # SSH
sudo ufw allow 80 # HTTP
sudo ufw allow 443 # HTTPS
sudo ufw enableScript de backup do banco de dados:
#!/bin/bash
BACKUP_DIR="/backups/lablims"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
cp /caminho/Lab-LIMS/backend/lims.db "$BACKUP_DIR/lims_$DATE.db"
# Manter apenas últimos 30 dias
find $BACKUP_DIR -name "lims_*.db" -mtime +30 -deleteAdicionar ao crontab (diariamente às 2h):
0 2 * * * /caminho/backup-script.shLab-LIMS/
├── backend/
│ ├── app.js # Servidor principal
│ ├── lims.db # Banco de dados SQLite
│ ├── package.json
│ ├── middleware/ # Autenticação
│ ├── routes/ # Rotas API
│ └── utils/ # Utilitários
├── frontend/
│ ├── src/
│ │ ├── pages/ # Páginas
│ │ ├── components/ # Componentes
│ │ ├── contexts/ # Contextos React
│ │ └── config/ # Configurações
│ ├── package.json
│ └── vite.config.ts
└── README.md
# Verificar porta em uso
netstat -ano | findstr :3001 # Windows
lsof -i :3001 # Linux/Mac
# Matar processo
taskkill /PID <PID> /F # Windows
kill -9 <PID> # Linux/MacVerifique frontend/src/services/api.ts:
export const endpoints = {
amostras: 'http://localhost:3001/amostras',
// ...
};Em produção, altere para o domínio real.
# Backup
cp lims.db lims.db.backup
# Verificar integridade
sqlite3 lims.db "PRAGMA integrity_check;"
# Se necessário, reconstruir
rm lims.db
node app.js # Recria automaticamente- Logs do Backend: Terminal onde
node app.jsestá rodando - Logs do Frontend: Console do navegador (F12)
- Banco de Dados:
backend/lims.db(pode ser aberto com DB Browser for SQLite)
- ✅ Login como admin
- ✅ Trocar senha padrão
- ✅ Criar usuários Professor e Técnico
- ✅ Configurar matrizes analíticas em
frontend/src/config/labConfig.ts - ✅ Criar primeira amostra de teste
- ✅ Imprimir etiqueta de teste
- Backend: Node.js + Express + SQLite
- Frontend: React + TypeScript + Vite
- Autenticação: JWT + bcrypt
- Banco: SQLite (arquivo único, fácil backup)
- Portas: 3001 (backend), 5173 (dev frontend)
Versão: 1.1.0
Última atualização: 2026-03-02