Redis
Redis nativo, um por VPS, com usuário ACL próprio, persistência RDB, TLS e acesso externo limitado por lista de IP.
- Categoria: Servidores e infraestrutura
- Estado: Disponível
- Requisitos: Um VPS ativo com a função
redisdisponível; Se já houver um Redis: versão 6.0 ou superior - Ferramentas MCP (Só leem):
ver_catalogo_apps,ver_preflight_app,ver_app,ver_acceso_app,ver_operacion_app - Ferramentas MCP (Escrevem ou modificam):
instalar_app,revelar_credencial_app,cambiar_lista_ip_app,controlar_app,reintentar_operacion_app - Ferramentas MCP (Destrutivas):
revocar_acceso_app,desinstalar_app
O que permite fazer?
O Redis é um único motor nativo por VPS e o app é o próprio motor. A ArduMaker o instala (ou adota o que já roda), cria um usuário ACL próprio e, se pedido, o publica com TLS para certos IPs.
- Usá-lo como cache ou fila pelos apps do VPS (
127.0.0.1:6379). - Iniciá-lo, pará-lo ou reiniciá-lo.
- Revelar usuário, senha e URI
rediss://. - Pela aba Redis do VPS: estatísticas, memória, chaves, tamanho por banco, último salvamento, persistência, configuração e esvaziamento.
Quando convém usar?
- Cache, sessões ou filas de tarefas de um app publicado no mesmo VPS.
- Um serviço externo que precisa de um Redis com TLS a partir de IPs conhecidos.
Como funciona na ArduMaker?
- Motor: se não existir, é instalado uma vez; se já roda, é adotado sem reinstalar nem mudar versão ou senha. Uma versão anterior à 6.0 falha
redis_no_soportadosem tocar nada. - Credencial
app<id>_<hex>com senha aleatória, guardada criptografada antes de tocar o VPS. ACL SETUSER <usuário> reset on ~* &* +@all -@admin -@dangerouscom a senha, por stdin; a senha administrativa viaja emREDISCLI_AUTH, nunca em-a. O usuáriodefaultnão é tocado.- É persistido com
ACL SAVE(se houveraclfile) ouCONFIG REWRITE. - Saúde como o usuário do app:
PING,SETde uma chave temporária própria comEX 60,GETeDEL. Nunca lista nem lê chaves do cliente.
Em config só se aceita external_access: os bancos numéricos do Redis não isolam e não são oferecidos. Um segundo pedido no mesmo VPS responde app_ya_existe com o id do existente.
config.external_access decide se o banco sai para a internet: {"ips": [...]} abre só para esses IPs; {"local": true} (ou false) o deixa só dentro do VPS. Se não for informado, pelo painel usa-se o IP de quem instala; via MCP o IP do agente não conta, então sem ips o banco fica local em vez de falhar.
O que muda realmente?
| Ajuste do instalador | Valor |
|---|---|
bind | 127.0.0.1 |
port | 6379 |
maxmemory | 256mb |
maxmemory-policy | allkeys-lru |
save | 900 1, 300 10, 60 10000 (RDB) |
appendonly | no |
| TLS (se houver acesso externo) | tls-port 6380, certificado próprio, tls-auth-clients no |
Acesso pela internet e lista de IP
Por padrão o motor escuta só dentro do VPS (6380 em 127.0.0.1). Para usar o banco de fora, a ArduMaker publica um endpoint próprio do motor: db-<id do VPS> dentro da zona da plataforma (registro DNS direto, sem proxy), em uma porta reservada entre 61000 e 64999. No host, um proxy leva essa porta ao 6380 do VPS e o firewall só deixa entrar os IPs da lista.
Para o Redis o proxy aponta para a tls-port 6380 com o certificado próprio do nome db-<id>; a 6379 sem TLS nunca é publicada. Ativar o TLS pela primeira vez reinicia o Redis: é feito sozinho só se o Apps o instalou; em um adotado fica pendente de confirmação.
| Regra da lista | Detalhe |
|---|---|
| Formato | IPv4 ou IPv6, com ou sem prefixo; um IP solto é /32 ou /128. Nada de nomes, loopback, link-local nem multicast |
| Amplitude | Prefixo mínimo /24 em IPv4 e /48 em IPv6 por padrão; 0.0.0.0/0 e ::/0 são recusados na lista |
| Tamanho | Até 20 entradas; vazia = fechado para todos |
| Nomes de host | Até 5 (allowed_hosts), com até 8 IPs públicos cada; são resolvidos de novo a cada 5 minutos e uma falha de DNS mantém o último conhecido |
| Aberto a todos | Só com allow_any e confirm_open juntos; a resposta informa em open_to_any |
A lista é do motor, não de cada banco: alterá-la a partir de qualquer banco Redis muda o acesso de todos os bancos desse motor nesse VPS (a resposta indica com shared_with_engine e affected_apps).
- As regras de firewall que faltam são adicionadas, uma por CIDR (
ufw allow from <cidr> to any port <porta> proto tcp). - Depois as que sobram são removidas e suas conexões abertas são cortadas.
- Só então o listener é criado e verificado: regras iguais à lista, nenhuma regra aberta a qualquer um, listener presente e handshake TLS com o nome correto.
Desinstalar, persistência e cópias
- Sem
delete_data(o normal): o acesso externo próprio é fechado e o app deixa de aparecer como instalado, mas o banco, seu usuário e seus dados ficam no VPS. A próxima reconciliação o mostra como detectado. Nada se perde. - No Redis a desinstalação sempre remove o usuário ACL criado pelo Apps (é um acesso, não um dado). Com
delete_datatambém esvazia todas as chaves (FLUSHALL), salvo se esse Redis salvar a fila de um n8n. O motor continua instalado. - O motor nunca é desinstalado pelo Apps: fica instalado mesmo sem bancos.
- Se o VPS ou o motor não responderem,
desinstalar_appcomforzar=truetenta cada passo uma vez, remove o app e lista emnot_cleanedo que ficou no servidor. - Os dados vivem no disco do VPS e viajam na sua cópia semanal, feita com o VPS ligado. Para uma cópia consistente de um banco específico convém também um dump próprio pelo gerenciador de bancos de dados (exportar) ou com as ferramentas do motor.
Esquema
- App no mesmo VPS:
127.0.0.1:6379 - Cliente externo:
rediss://paradb-<id>:<porta> - Firewall e proxy do host: só IPs da lista → 6380 do VPS
- redis-server: TLS na 6380; a 6379 sem TLS nunca é publicada
Resultado esperado
rediss://app<id>_<hex>@db-<vps>.<zona>:<puerto>/0A URI rediss://<usuário>@<host>:<porta>/0 aparece sem senha quando o acesso está pronto; nomeia o banco 0 (não é atribuído um banco numérico por app).
Erros e resolução
| Erro | Causa | Tentar de novo? |
|---|---|---|
redis_no_soportado | Redis anterior à 6.0 (sem ACL nem tls-port) | Não |
redis_usuario_no_creado / redis_salud_fallida | Falhou o ACL SETUSER, sua persistência ou o teste de saúde | Sim |
redis_usado_por_n8n | Esse Redis guarda a fila de um n8n via npm: não é publicado (o app fica instalado) | Não |
requiere_reinicio | O primeiro TLS reinicia o Redis; em um Redis adotado uma pessoa precisa confirmar | Após confirmar |
redis_control_fallido | start, stop ou restart não terminou bem | Pedir a ação de novo |
app_ya_existe | Já existe um Redis nesse VPS | Não |
Relação com MCP
Todo o ciclo do banco é operado via MCP com as permissões da pessoa que autorizou o agente. Referência em /mcp/docs e /mcp/bases-de-datos.
- Leitura:
ver_catalogo_apps,ver_preflight_app,listar_apps_empresa,ver_app,ver_acceso_app(host, porta, TLS e lista de IP, sem segredos),ver_operacion_app. - Modificam:
instalar_appcomapp_type: redis(exigeidempotency_key),cambiar_lista_ip_app(só se o dono for admin; os IPs são informados explicitamente: o IP do agente não é o da pessoa),reintentar_operacion_app,refrescar_apps. - Sensível:
revelar_credencial_app(só admin, não aceitaidempotency_key; a resposta vem marcadasensible: truee a auditoria registra que foi revelado, nunca o valor). - Destrutivas:
revocar_acceso_app(fecha o acesso externo de todo o motor) edesinstalar_app(comdelete_dataapaga os dados; exigeconfirm_delete_data).
Para ler e escrever dados dentro do banco, o agente usa as ferramentas do gerenciador de bancos de dados. Um agente autorizado como somente leitura não vê as ferramentas que modificam nem pode revelar credenciais.
Além disso, controlar_app aceita start, stop e restart sobre o app Redis. As chaves e a configuração do motor são vistas pela aba Redis do painel: não têm ferramenta MCP.