Plataforma de gerenciamento de mesh WireGuard com terminal SSH no navegador, monitoramento de saude em tempo real e suporte multi-tenant.
VecGate fornece um unico dashboard para gerenciar redes mesh WireGuard em multiplos servidores. Adicione nodes, monitore seus status, gere configuracoes WireGuard, faca deploy de configuracoes remotamente e abra sessoes SSH diretamente do navegador — tudo atraves de uma interface moderna com tema escuro.
Screenshots em breve.
| Tela | Descricao |
|---|---|
| Dashboard | Visao geral com cards de status dos nodes (online/offline), latencia media e feed de atividades recentes |
| Hosts | Grid de cards de todos os nodes do mesh com busca, adicionar/editar/remover, geracao de chaves WireGuard e visualizador de configuracao |
| Topologia | Mapa interativo da rede (React Flow) com layouts circular/grid, links coloridos do mesh e painel de detalhes |
| Terminal | Terminal xterm.js completo no navegador conectado via WebSocket SSH a qualquer node do mesh |
| Usuarios | Tabela de gerenciamento de usuarios com atribuicao de roles e troca de senhas |
| Log de Auditoria | Log filtravel de todas as acoes (login, conexoes SSH, alteracoes em hosts, deploys) |
| Configuracoes | Configuracao da instancia para padroes de rede e branding do cliente |
- Dashboard — Visao geral em tempo real de todos os nodes com status online/offline e latencia
- Terminal SSH no Navegador — Terminal interativo completo via WebSocket + ssh2 (frontend xterm.js)
- Gerenciamento de Hosts — Adicionar, editar, remover nodes do mesh com IP, provedor, regiao e credenciais SSH
- Geracao de Chaves WireGuard — Gerar pares de chaves e baixar
wg0.confpara qualquer node - Deploy Remoto — Enviar configuracoes WireGuard para nodes via SSH com um clique
- Monitoramento de Saude — Ping automatico a cada 30 segundos para todos os nodes
- Trilha de Auditoria — Toda acao e registrada: logins, sessoes SSH, alteracoes em hosts, deploys
- Gerenciamento de Usuarios — Multiplos usuarios com acesso baseado em roles
- Multi-Tenant — Cada deploy recebe seu proprio branding via
client.config.json(nome da empresa, cores, logo) - Topologia de Rede — Visualizacao interativa do mesh com React Flow (layouts circular e grid)
- Autenticacao JWT — Acesso seguro a API com expiracao de token em 24h
- Deploy com Docker — Um unico
docker-compose upconectando a sua rede mesh
┌─────────────────────────────────────────────────┐
│ Navegador │
│ React 18 + MUI + xterm.js + React Flow │
│ (Build Vite servido como arquivos estaticos) │
└──────────────┬──────────────┬───────────────────┘
│ HTTP/REST │ WebSocket
▼ ▼
┌─────────────────────────────────────────────────┐
│ Node.js + Express │
│ │
│ /api/auth — Login/sessao JWT │
│ /api/hosts — CRUD + keygen + wgconf │
│ /api/ssh — Execucao remota + deploy WG │
│ /api/settings — Config da instancia + auditoria│
│ /api/users — Gerenciamento de usuarios │
│ /api/config — Branding do cliente (publico) │
│ /ws/ssh — Terminal SSH WebSocket │
│ │
│ Loop de health check (ping a cada 30s) │
└──────────────┬──────────────┬───────────────────┘
│ │
▼ ▼
┌──────────────────┐ ┌──────────────────────────┐
│ SQLite (WAL) │ │ Rede Mesh (Docker) │
│ better-sqlite3 │ │ SSH + Ping para nodes │
└──────────────────┘ └──────────────────────────┘
| Camada | Tecnologia |
|---|---|
| Backend | Node.js 20, Express 4, better-sqlite3, jsonwebtoken, bcryptjs |
| SSH | ssh2 (conexoes SSH), ws (servidor WebSocket) |
| Frontend | React 18, Vite 5, Material UI 5, xterm.js, React Flow, Recharts, Framer Motion |
| Banco de Dados | SQLite com modo WAL e foreign keys |
| Container | Docker (Alpine), Docker Compose |
| Rede | WireGuard (wg-quick, wg genkey/pubkey), health checks via ping ICMP |
- Docker e Docker Compose
- Uma rede Docker conectada ao seu mesh (ou crie uma)
- Node.js 20+ (para build do frontend)
git clone https://github.com/Vinicius-Costa14/vecgate.git
cd vecgate
# Editar branding do cliente e credenciais padrao
cp client.config.json client.config.json.bak
nano client.config.json
# Criar .env a partir do exemplo
cp .env.example .env
nano .env # Defina o JWT_SECRETcd frontend
npm install
npm run build # Cria frontend/dist/
cd ..# Substitua pelo nome real da sua rede mesh
docker network create mesh-network# Atualize o nome da rede no docker-compose.yml para corresponder ao seu mesh
docker compose up -d --buildAbra http://localhost:3000 e faca login com as credenciais do client.config.json.
Padrao: admin / changeme (altere imediatamente)
| Metodo | Endpoint | Descricao |
|---|---|---|
POST |
/api/auth/login |
Login com usuario/senha, retorna JWT |
GET |
/api/auth/me |
Obter informacoes do usuario atual |
| Metodo | Endpoint | Descricao |
|---|---|---|
GET |
/api/hosts |
Listar todos os nodes do mesh |
GET |
/api/hosts/:id |
Obter detalhes do node |
POST |
/api/hosts |
Criar novo node |
PUT |
/api/hosts/:id |
Atualizar node |
DELETE |
/api/hosts/:id |
Remover node |
POST |
/api/hosts/:id/keygen |
Gerar par de chaves WireGuard |
GET |
/api/hosts/:id/wgconf |
Baixar wg0.conf do node |
GET |
/api/hosts/:id/health |
Pingar node e atualizar status |
| Metodo | Endpoint | Descricao |
|---|---|---|
POST |
/api/ssh/exec |
Executar comando no node via SSH |
POST |
/api/ssh/deploy |
Fazer deploy da configuracao WireGuard no node |
WS |
/ws/ssh?token=...&host_id=... |
Terminal SSH interativo (WebSocket) |
| Metodo | Endpoint | Descricao |
|---|---|---|
GET |
/api/settings |
Obter todas as configuracoes |
PUT |
/api/settings |
Atualizar configuracoes |
GET |
/api/settings/audit |
Obter log de auditoria |
GET |
/api/users |
Listar usuarios |
POST |
/api/users |
Criar usuario |
PUT |
/api/users/:id |
Atualizar usuario |
DELETE |
/api/users/:id |
Deletar usuario |
| Metodo | Endpoint | Descricao |
|---|---|---|
GET |
/api/config |
Branding do cliente (nome, cores, logo) |
| Variavel | Padrao | Descricao |
|---|---|---|
PORT |
3000 |
Porta do servidor |
DB_PATH |
/data/vecgate.db |
Caminho do arquivo de banco de dados SQLite |
JWT_SECRET |
change-me-in-production |
Secret para assinatura de tokens JWT |
CONFIG_PATH |
./client.config.json |
Caminho para o arquivo de configuracao do cliente |
INIT_SQL_PATH |
./database/init.sql |
Caminho para o arquivo de schema SQL |
FRONTEND_PATH |
./frontend/dist |
Caminho para o frontend buildado |
Cada cliente recebe sua propria instancia VecGate com branding customizado. Edite o client.config.json por deploy:
{
"company": {
"name": "Acme Corp",
"slug": "acme",
"logo_url": "/logo.png",
"primary_color": "#00d4aa",
"dark_color": "#0a0f1c"
},
"network": {
"block": 100,
"domain": "mesh.acme.com",
"default_port_wg": 51820,
"default_port_ssh": 22,
"keepalive": 25
},
"admin": {
"default_user": "admin",
"default_password": "strong-password-here"
}
}VecGate usa SQLite com quatro tabelas:
- users — Usuarios do painel com hashes bcrypt de senhas e roles
- hosts — Nodes do mesh com IPs, chaves WireGuard, credenciais SSH e status
- settings — Configuracao da instancia em formato chave-valor
- audit_log — Log de acoes com usuario, tipo de acao, alvo e timestamp
# Backend (com auto-reload)
cd backend
npm install
npm run dev
# Frontend (com HMR e proxy de API)
cd frontend
npm install
npm run devO servidor de desenvolvimento Vite faz proxy de /api e /ws para http://localhost:3000.
- Gestão centralizada de VPN — Um único painel para gerenciar todos os nodes WireGuard, eliminando acesso SSH individual
- Redução de 90% no tempo de troubleshooting — Terminal SSH via browser permite diagnóstico imediato sem configuração local
- Health check automatizado — Detecção proativa de nodes offline antes que impactem a operação
- Suporte multi-tenant — Permite isolar redes de diferentes clientes ou ambientes em uma única plataforma
- Onboarding acelerado — Novos nodes são adicionados à mesh em minutos, não em horas
MIT