Serviços, Bancos e Armazenamento

Todo servidor gerenciado pelo PrimeForge pode hospedar um conjunto de serviços bare-metal — PostgreSQL, MySQL, Redis, MinIO (S3) e Reverb — além do proxy reverso Traefik. Esses serviços rodam diretamente no sistema operacional do servidor (via systemd), não dentro de containers de site, o que os torna rápidos e estáveis. Esta página explica quais serviços existem, onde eles rodam na sua frota, e como você os instala, mantém e inspeciona a partir das páginas Serviços, Bancos de dados e Armazenamento de cada servidor.

Nos exemplos usamos a organização de demonstração Empresa XPTO, com o Servidor Principal (tipo All-in-One, que hospeda todos os serviços) e o Servidor de Sites (tipo App Server, que só roda Traefik e containers de sites e consome os serviços do Servidor Principal pela malha WireGuard).

Catálogo de Serviços

O Catálogo de Serviços é a visão geral de quais serviços de infraestrutura o PrimeForge sabe instalar e em quais servidores da sua frota cada um está presente. Ele reúne, num único lugar, a resposta para "onde está meu PostgreSQL?" ou "quais servidores têm Redis?".

Catálogo de serviços com os serviços disponíveis e onde rodam na frota

Cada serviço tem um papel bem definido:

Serviço Para que serve Roda como
PostgreSQL Banco de dados relacional principal (recomendado para Laravel) systemd (bare-metal)
MySQL Banco de dados relacional alternativo systemd (bare-metal)
Redis Cache, filas e sessões systemd (bare-metal)
MinIO (S3) Armazenamento de objetos compatível com S3 (uploads, mídia) systemd (bare-metal)
Reverb Servidor WebSocket para recursos em tempo real (Laravel) Container Docker
Traefik Proxy reverso, roteamento por domínio e TLS automático Container Docker

O catálogo mostra, para cada serviço, em quais servidores ele está instalado e a versão em uso. Isso é essencial em arquiteturas de múltiplos servidores: um site no Servidor de Sites pode usar o PostgreSQL e o Redis do Servidor Principal através da malha WireGuard, e o catálogo deixa essa distribuição visível.

Onde cada serviço roda na frota

A distribuição depende do tipo do servidor escolhido no provisionamento. Os tipos que o PrimeForge oferece instalam conjuntos diferentes de serviços:

  • All-in-One — Traefik + PostgreSQL + MySQL + Redis + MinIO + Reverb. Tudo em uma máquina só; ideal para começar.
  • App Server — apenas Traefik. Dedicado a hospedar sites; consome bancos, Redis e S3 de outros servidores pela malha WireGuard.
  • Banco de dados — PostgreSQL + MySQL + Redis. Infraestrutura de dados dedicada.
  • Armazenamento S3 — apenas MinIO. Object storage dedicado.
  • Serviços — PostgreSQL + MySQL + Redis + MinIO + Reverb, sem hospedar sites. Cluster de serviços para arquiteturas multi-servidor.
  • Reverb — apenas o servidor WebSocket Reverb.
  • Redis — apenas Redis, dedicado a cache e filas.

O tipo escolhido no provisionamento define o conjunto inicial de serviços, mas você pode acrescentar ou remover serviços depois pela página Serviços de cada servidor. Quando o conjunto instalado diverge do perfil original do tipo, o PrimeForge passa a exibir o tipo como Custom (veja abaixo).

Página de Serviços do servidor

Cada servidor (exceto os que não hospedam serviços) tem uma sub-página Serviços com um cartão para cada um dos cinco serviços bare-metal — PostgreSQL, MySQL, Redis, MinIO e Reverb. Cada cartão mostra o estado atual (instalado ou não), a versão e as ações disponíveis.

Página de serviços de um servidor com cartões de instalar, atualizar e desinstalar

Instalar um serviço

Precisa de Redis num App Server sem reprovisionar o servidor inteiro? É aqui que você resolve:

  1. Clique em Instalar no cartão do serviço desejado.
  2. Confirme a ação — a página acompanha o progresso da instalação e atualiza o cartão automaticamente a cada poucos segundos.
  3. O agente sobe o mesmo script usado no provisionamento, executa-o, captura as credenciais em /etc/primeforge/service-credentials e detecta a versão instalada.
  4. O cartão transita de Não instaladoInstalando (pulso âmbar) → Rodando (ponto verde).
  5. Uma vez rodando, o cartão exibe a versão, a data da instalação e um painel expansível de Credenciais com todas as informações de conexão (por exemplo REDIS_PASSWORD, POSTGRES_USER).

O assistente de criação de site percebe a mudança em tempo real: depois de instalar o Redis num App Server, aquele servidor passa a aparecer como "capaz de Redis" no passo de serviços do assistente, e o .env do site resolve automaticamente para host.docker.internal (uso local).

Instalar um serviço num servidor cujo perfil de tipo não o prevê torna o servidor Custom. Por exemplo, adicionar Redis a um App Server (que originalmente só tem Traefik) faz o tipo virar Custom. Desinstalar de volta até casar com o perfil original restaura o tipo automaticamente — o PrimeForge lembra a intenção inicial do servidor.

Reiniciar, atualizar e manter

Os cartões oferecem, além de instalar/desinstalar, ações de manutenção conduzidas por runbooks (roteiros passo a passo):

  • Reiniciar — executa systemctl restart na unidade do serviço (o Reverb, que roda como container Docker, é reiniciado via Docker Compose). Registra o horário do último reinício.
  • Atualização menor (minor/patch) — para PostgreSQL, MySQL e Redis, roda apt-get install --only-upgrade no pacote e reinicia a unidade. O cartão mostra "Atual X / Disponível Y" lendo a versão candidata do apt.
  • Atualizar MinIO — o MinIO não atualiza via apt, então tem uma ação dedicada. O servidor baixa os binários oficiais, verifica os checksums SHA-256, troca-os atomicamente (o binário anterior é preservado como .prev) e reinicia o serviço. Se a verificação de saúde pós-atualização falhar, o binário anterior é restaurado automaticamente. O servidor entra em modo de manutenção durante a operação.
  • Atualizar Reverb — reobtém a imagem reverb:latest do hub e recria o container. Os clientes WebSocket reconectam sozinhos. A atualização só é reportada como bem-sucedida quando o container está de pé e respondendo.
  • Atualização maior / rollback (bancos)nunca roda automaticamente. Quando um banco está atrás da versão maior padrão (por exemplo PostgreSQL 16 → 17), ou você precisa reverter após uma atualização ruim, o painel apresenta um runbook guiado exigindo backup — o PrimeForge não executa por você uma migração de dados em disco que seja irreversível.

Toda instalação, reinício, atualização ou desinstalação gera um registro na auditoria (visível em Security → Logs → Audit Log).

Desinstalar um serviço (proteções de dados)

A desinstalação é deliberadamente difícil de fazer por engano, para proteger seus dados:

  1. Bloqueio por dependência — se algum site ativo depende do serviço, o modal mostra "Bloqueado — N site(s) dependem deste serviço" com os domínios bloqueadores listados, e a desinstalação não prossegue. Isso conta tanto dependentes explícitos (sites que apontam para este servidor para DB/Redis/S3/Reverb) quanto implícitos (sites no próprio servidor usando os serviços locais sem apontar explicitamente). Sites SQLite são isentos.
  2. Confirmação por nome digitado — você precisa digitar o nome do serviço exatamente (por exemplo postgresql) para armar a ação.
  3. Reconhecimento de backup — serviços que guardam dados (PostgreSQL, MySQL, Redis, MinIO) ainda exigem marcar "Fiz backup ou não preciso dos dados".
  4. Manter dados por padrão — o interruptor "Manter dados em disco (remover apenas o serviço)" vem ligado: o serviço, seus pacotes/unidades/binários, regras de UFW e credenciais são removidos, mas os diretórios de dados permanecem no servidor. Desligá-lo é uma limpeza total — o modal mostra exatamente quais diretórios serão apagados permanentemente.

Serviços desinstalados são lembrados, então o monitoramento de saúde para de esperá-los — o PrimeForge não vai tentar "auto-recuperar" (ressuscitar) um serviço que você removeu de propósito. A operação inteira embrulha o servidor em modo de manutenção automaticamente.

Bancos de dados

A sub-página Bancos de dados de um servidor reúne todos os bancos hospedados nele — PostgreSQL, MySQL, SQLite e Redis — com um visualizador integrado, para que você inspecione dados sem abrir um terminal ou instalar um cliente externo.

Página de bancos de dados com abas Por serviço e Por site

Abas "Por serviço" e "Por site"

O visualizador organiza os bancos de duas formas:

  • Por serviço — lista os bancos agrupados pelo motor (PostgreSQL, MySQL, Redis). Útil para uma visão de infraestrutura: quantos bancos existem em cada engine, seus tamanhos, e quais estão órfãos.
  • Por site — lista os bancos agrupados pelo site que os utiliza. Útil para responder "qual banco pertence ao site todo.babytor.com.br?".

Sites com SQLite aparecem também aqui: o banco é um arquivo dentro do diretório compartilhado do site, e o PrimeForge o reconhece como um banco válido.

Visualizador de banco

Ao abrir um banco, o visualizador (em painel lateral) mostra:

  • Lista de tabelas com a contagem de linhas de cada uma
  • Esquema de cada tabela (colunas, tipos, chaves)
  • Informações de conexão — host, porta, nome do banco e usuário, para você reaproveitar em ferramentas externas

Para bancos relacionais (PostgreSQL/MySQL) o visualizador foca em estrutura e contagens; para Redis, mostra as chaves e o uso de memória. Tudo é lido pelo agente através do canal seguro — você não precisa expor o banco à internet nem abrir portas.

Armazenamento

A sub-página Armazenamento aparece nos servidores que rodam MinIO (tipos All-in-One, Serviços e Armazenamento S3) e gerencia os buckets de objetos S3.

Página de armazenamento com buckets MinIO, mapeamento por site e limpeza de órfãos

Cada site com S3 habilitado recebe um bucket isolado (por exemplo {slug}-media), com chaves de acesso dedicadas e uma política de acesso restrita àquele bucket. A página de Armazenamento mostra:

  • Buckets por site — o mapeamento de cada bucket ao site que o utiliza, para você saber a quem cada bucket pertence.
  • Tamanhos — o espaço em disco consumido por cada bucket, para acompanhar crescimento e planejar capacidade.
  • Limpeza de órfãos — buckets que não correspondem mais a nenhum site ativo (por exemplo de um site excluído) são sinalizados como órfãos e podem ser removidos com segurança para recuperar espaço.

O console do MinIO e a API S3 de cada servidor são publicados pelo Traefik em subdomínios dedicados (minio.{domínio} e s3.{domínio}), mas o gerenciamento do dia a dia — criar bucket ao habilitar S3 num site, listar tamanhos, limpar órfãos — acontece direto por esta página do painel.

Próximos passos