pgAdmin com Docker: interface web para PostgreSQL

pgAdmin é o cliente gráfico mais completo para PostgreSQL, permite executar queries, visualizar schemas, monitorar conexões e gerenciar roles pelo browser. Com Docker, a instalação leva menos de 5 minutos e pode ser protegida com HTTPS e autenticação.

Instalar pgAdmin com Docker Compose

Adicione o pgAdmin ao docker-compose.yml do PostgreSQL ou em um stack separado:

yaml
services:
  pgadmin:
    image: dpage/pgadmin4:latest
    restart: always
    environment:
      PGADMIN_DEFAULT_EMAIL: ${PGADMIN_EMAIL}
      PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_PASSWORD}
      PGADMIN_LISTEN_PORT: 80
    volumes:
      - pgadmin_data:/var/lib/pgadmin
    ports:
      - "5050:80"    # acesso em http://IP_DA_VPS:5050
    networks:
      - db_network   # mesma rede do PostgreSQL

volumes:
  pgadmin_data:

Conectar ao servidor PostgreSQL

Após o login no painel, adicione o servidor PostgreSQL. O hostname é o nome do serviço Docker, não localhost:

bash
# No painel pgAdmin:
# Add New Server → General:
#   Name: Produção
#
# Connection:
#   Host name/address: postgres   (nome do serviço no docker-compose)
#   Port: 5432
#   Maintenance database: postgres
#   Username: postgres
#   Password: sua_senha_postgres
#   Save password: Yes

# Se o pgAdmin estiver em docker-compose separado,
# conecte o pgAdmin na rede do PostgreSQL:
# docker network connect nome_da_rede_do_postgres nome_do_container_pgadmin

# Testar conexão via linha de comando antes de configurar no painel:
docker run --rm --network nome_da_rede \
  postgres:16-alpine psql -h postgres -U postgres -c "SELECT version();"

Proteger com Nginx e HTTPS

A porta 5050 não deve ficar exposta na internet sem autenticação HTTPS. Configure o Nginx como proxy reverso:

nginx
# nginx.conf para pgAdmin
server {
    listen 443 ssl;
    http2 on;
    server_name pgadmin.seudominio.com.br;

    ssl_certificate     /etc/letsencrypt/live/pgadmin.seudominio.com.br/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/pgadmin.seudominio.com.br/privkey.pem;

    # Restringir acesso por IP (recomendado para pgAdmin)
    allow 201.X.X.X;    # seu IP fixo
    deny all;

    location / {
        proxy_pass http://pgadmin:80;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Alternativa: DBeaver via SSH tunnel

Para acesso eventual sem manter o pgAdmin rodando, use DBeaver ou psql local via SSH tunnel:

bash
# Criar SSH tunnel (no seu computador local)
ssh -L 5432:localhost:5432 root@IP_DA_VPS -N

# A porta 5432 local agora aponta para o PostgreSQL da VPS
# Conecte o DBeaver ou qualquer cliente em:
#   Host: localhost
#   Port: 5432
#   User: seu_usuario
#   Password: sua_senha

# DBeaver: New Connection → PostgreSQL
#   Host: localhost, Port: 5432
#   (com o tunnel ativo)

# psql local:
psql -h localhost -p 5432 -U postgres -d meu_banco

Backup via pgAdmin (interface gráfica)

O pgAdmin tem interface para backup e restore sem precisar usar o terminal:

bash
# Via pgAdmin:
# 1. Expandir servidor → Databases → meu_banco
# 2. Clique direito → Backup...
# 3. Configurar:
#    Filename: /tmp/backup-20260607.dump
#    Format: Custom
#    Encoding: UTF8
#    Blobs: Yes
# 4. Backup → Process watching
# 5. Copiar o arquivo do container:
docker cp nome_container_pgadmin:/tmp/backup-20260607.dump ./

# Restore:
# 1. Clique direito no banco → Restore...
# 2. Selecionar o arquivo .dump
# 3. Restore

Não quer configurar manualmente?

Implante o PostgreSQL em menos de 5 minutos com a Runstack. Infraestrutura da OPEN Datacenter, com servidores em São Paulo.

Perguntas frequentes

pgAdmin: melhor para PostgreSQL exclusivamente, roda no browser (sem instalar no computador), ótimo para equipes. DBeaver: desktop gratuito, suporta 80+ bancos (PostgreSQL, MySQL, SQLite, Redis, etc.), melhor para devs que trabalham com múltiplos bancos. TablePlus: desktop pago (com trial), interface mais polida, só Mac/Windows/Linux. Para VPS self-hosted acessível pelo time: pgAdmin.

Sim. O pgAdmin se conecta a qualquer PostgreSQL acessível via TCP, não precisa estar na mesma VPS. Adicione vários servidores no painel (cada um com host/port/credenciais distintos). Útil para gerenciar múltiplas VPS a partir de um único painel.

pgAdmin 4 consome 200–400 MB de RAM (é uma aplicação Python/Flask). Se RAM é crítica, considere o pgAdmin desktop (instala no seu computador e conecta via SSH tunnel) em vez de rodar na VPS. Outra opção leve: adminer (imagem Docker < 10 MB, interface web simples para PostgreSQL e MySQL).

Crie usuários no pgAdmin: Admin → Users → Add New User. Cada usuário tem suas credenciais e pode ter perfis de servidores distintos. Para isolamento maior, crie usuários PostgreSQL com permissões restritas (GRANT SELECT ON ALL TABLES...) e cada membro da equipe acessa com suas próprias credenciais.

Sim. Adminer é um único arquivo PHP que suporta PostgreSQL, MySQL, SQLite e outros. docker run --rm -p 8080:8080 adminer, zero configuração. A desvantagem é a interface menos polida e menos recursos avançados. Para administração ocasional em VPS com pouca RAM, adminer é uma boa escolha.