databases/Artigo

    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:
    Dica
    Defina PGADMIN_EMAIL e PGADMIN_PASSWORD no arquivo .env — são as credenciais de login do painel web do pgAdmin, não do PostgreSQL.

    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;
        }
    }
    Atenção
    Restrição por IP (allow/deny) é a camada de segurança mais importante para o pgAdmin — ele dá acesso total ao banco. Se não tiver IP fixo, use SSH tunnel em vez de expor o painel.

    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
    Dica
    SSH tunnel é mais seguro que expor a porta 5432 — não requer regra de firewall adicional. O -N mantém o tunnel ativo sem executar comando. Use -f -N para rodar em background.

    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

    $ runstack deploy --plan starter

    Não quer configurar manualmente?

    Não quer configurar manualmente? Implante o PostgreSQL em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.

    Perguntas frequentes