Centro de operações para monitoramento geoespacial e inteligência de fontes abertas. O Argus reúne dezenas de fontes públicas — tráfego aéreo e marítimo, satélites, sensores ambientais, infraestrutura, SIGINT e notícias — sobre um único mapa interativo, executado inteiramente na infraestrutura do operador.
Mantido por Olwtelet.
O Argus é um sistema auto-hospedado. Não há serviço central: o backend coleta os dados diretamente das fontes públicas, o frontend consome apenas o backend local, e nada é enviado a terceiros além das requisições necessárias a cada fonte configurada.
O sistema é composto por quatro partes:
| Componente | Tecnologia | Função |
|---|---|---|
backend/ |
Python 3.10+, FastAPI, Uvicorn | Coleta, normalização e exposição dos dados |
frontend/ |
Next.js 16, React 19, MapLibre GL | Painel operacional e mapa |
desktop-shell/ |
Tauri 2 (Rust) | Empacotamento desktop e ponte nativa |
backend/services/mesh/ |
Python | Rede Infonet, gates e mensageria privada |
- Mapa operacional com camadas independentes: aeronaves (comercial, privada, militar), embarcações, satélites, imagens orbitais, terremotos, incêndios, vulcões, qualidade do ar, alertas meteorológicos, CFTV, datacenters, usinas, bases militares, cabos submarinos e quedas de internet.
- SIGINT: KiwiSDR, PSK Reporter, SatNOGS, TinyGS, escutas, Meshtastic e APRS.
- OSINT: agregação de notícias por região via GDELT, canais públicos do Telegram e dossiês regionais.
- Risco estratégico (experimental, desativado por padrão): pontuação derivada por região a partir dos sinais coletados, com backtest histórico.
- SAR: detecção de mudanças no solo a partir de imagens de radar.
- Infonet: rede par-a-par para sincronização de eventos, gates com criptografia fim-a-fim e mensagens diretas, transportada por onion/RNS.
- Terminal integrado para operação da malha e consultas.
| Item | Versão | Observação |
|---|---|---|
| Docker | 24+ | Caminho recomendado. Inclui Docker Compose v2. |
| Python | 3.10 – 3.12 | Somente para execução a partir do código-fonte. |
| Node.js | 20+ | Somente para execução a partir do código-fonte. |
| Rust | estável | Somente para compilar o aplicativo desktop. |
O uv é usado para gerenciar o ambiente Python do backend. Instale-o em
https://docs.astral.sh/uv/ ou use pip/venv diretamente.
git clone https://github.com/Olwtelet/Argus.gitcd Argus && cp .env.example .envEdite o .env com suas chaves de API (todas opcionais — veja
Configuração) e suba os serviços:
docker compose up -dO painel fica disponível em http://127.0.0.1:3000 e a API em http://127.0.0.1:8000.
As imagens são publicadas em ghcr.io/olwtelet/argus-backend e
ghcr.io/olwtelet/argus-frontend.
uv sync --all-packages --group devcd frontend && npm ciPara subir backend e frontend juntos em modo de desenvolvimento:
cd frontend && npm run devOs scripts start.sh (macOS/Linux) e start.bat (Windows) na raiz executam a
mesma preparação de forma guiada, criando o ambiente virtual e instalando as
dependências quando necessário.
Toda a configuração é feita por variáveis de ambiente, lidas de um arquivo
.env na raiz do repositório. O arquivo .env.example documenta cada opção.
Nenhuma chave é obrigatória para iniciar o sistema: as camadas sem credencial simplesmente permanecem vazias.
| Variável | Efeito |
|---|---|
OPENSKY_CLIENT_ID / OPENSKY_CLIENT_SECRET |
Telemetria de aeronaves. Sem elas, a camada de voos usa apenas ADS-B, com lacunas significativas. |
AIS_API_KEY |
Posições de embarcações. |
GFW_API_TOKEN |
Eventos de atividade pesqueira. |
WINDY_API_KEY |
Câmeras públicas (CFTV). |
ADMIN_KEY |
Protege endpoints sensíveis (configurações, atualizações). Sem valor, apenas requisições de loopback são aceitas. |
CORS_ORIGINS |
Origens permitidas. Detecta IPs da rede local quando vazio. |
BIND |
Interface de escuta. 127.0.0.1 por padrão. |
As variáveis próprias do produto usam o prefixo ARGUS_:
| Variável | Efeito |
|---|---|
ARGUS_BACKEND_URL |
Endereço do backend usado pelo frontend e pelo shell desktop. |
ARGUS_TRUSTED_FRONTEND_HOSTS |
Hostnames tratados como operador local na ponte do Docker. Por padrão frontend,argus-frontend. |
ARGUS_TRUST_DOCKER_BRIDGE_LOCAL_OPERATOR |
Trata a bridge do Docker como acesso local do operador. |
ARGUS_ADMIN_KEY |
Chave administrativa para ferramentas e scripts. |
ARGUS_HMAC_SECRET |
Segredo HMAC para integrações autenticadas. |
ARGUS_STRICT_CSP |
Aplica a política de conteúdo restrita no frontend. |
ARGUS_MESH_NODE_RUNTIME |
Executa o backend em modo nó de malha, sem as coletas globais. |
Coletas de terceiros sensíveis vêm desativadas por padrão
(PREDICTION_MARKETS_ENABLED, FINANCIAL_ENABLED, CROWDTHREAT_ENABLED,
FIMI_ENABLED, NUFORC_ENABLED, GT_ANALYTICS_ENABLED). Cada uma expõe o IP
do nó ao respectivo serviço quando habilitada.
docker compose up -dAtalhos disponíveis no Makefile:
make up-localmake up-lanmake logsmake downO script compose.sh é um invólucro que detecta o motor de contêiner
disponível (Docker ou Podman) e valida o arquivo de composição antes de subir.
Arquivos de composição adicionais cobrem cenários específicos:
| Arquivo | Uso |
|---|---|
docker-compose.override.yml |
Ajustes locais de desenvolvimento |
docker-compose.build.yml |
Compila as imagens a partir do código-fonte |
docker-compose.participant.yml |
Nó participante da Infonet |
docker-compose.relay.yml |
Nó de retransmissão |
docker-compose.e2e.yml |
Ambiente de testes ponta a ponta |
Para participar da Infonet sem painel, mapa ou coletas globais:
./meshnode.shNo Windows, use meshnode.bat.
O shell desktop é construído com Tauri. A partir de
desktop-shell/tauri-skeleton/:
./build.shNo Windows, use build.ps1. O aplicativo é publicado como Argus, com
identificador com.olwtelet.argus, e verifica atualizações assinadas
contra as releases do repositório.
- Os endpoints administrativos exigem
ADMIN_KEYfora de loopback. - A confiança na bridge do Docker é vinculada a hostnames específicos
(
ARGUS_TRUSTED_FRONTEND_HOSTS) e resolve para o modo fail-closed quando o DNS interno não responde. - O armazenamento local sensível é selado com AES-GCM, com chave derivada por domínio.
- As atualizações do desktop são verificadas por assinatura; o instalador é
conferido contra
SHA256SUMS.txtda release e contra a lista de digests embarcada embackend/data/release_digests.json. - O tráfego da Infonet usa transportes onion/RNS por padrão. A sincronização
por clearnet é opt-in (
MESH_INFONET_ALLOW_CLEARNET_SYNC). - As requisições de saída são identificadas por um handle de operador gerado localmente, não pelo nome do produto.
Nunca versione arquivos .env, chaves privadas de atualização ou segredos de
CI.
cd frontend && npm run devEstrutura relevante:
backend/
routers/ endpoints HTTP
services/ coletores, normalização e integrações
services/mesh/ protocolo Infonet, gates e mensageria
tests/ suíte pytest
frontend/
src/app/ rotas e layout do Next.js
src/components/ painéis, mapa e terminal
src/i18n/ catálogo de textos da interface
desktop-shell/ empacotamento Tauri e ponte nativa
docs/ documentação técnica
Todo texto exibido ao operador passa pelo catálogo em frontend/src/i18n/.
Componentes não devem conter texto solto.
Frontend:
cd frontend && npm run lintcd frontend && npm run format:checkcd frontend && npm run test:cicd frontend && npm run buildBackend:
cd backend && pytestComposição Docker:
docker compose configShell desktop (a partir de desktop-shell/tauri-skeleton/src-tauri/):
cargo fmt --checkcargo testO Argus consome dados de terceiros sob licenças que exigem atribuição, entre elas a Open Database License. As atribuições exigidas são exibidas no controle de atribuição do mapa e detalhadas em DATA-ATTRIBUTION.md. Esses avisos não devem ser removidos nem ocultados.
O Argus opera exclusivamente sobre dados públicos e de fontes abertas. Não utiliza informação classificada ou de acesso restrito. Posições estimadas — em especial as de embarcações militares — são inferências a partir de relatos públicos e não devem ser tratadas como confirmadas.
O código do Argus é licenciado sob a GNU Affero General Public License v3.0 — veja LICENSE. Em resumo, a AGPL exige que quem disponibiliza o sistema a terceiros pela rede também disponibilize o código correspondente.
As licenças dos dados de terceiros são independentes da licença do código e estão em DATA-ATTRIBUTION.md.