Como instalar o PostgreSQL 16 em uma VPS Ubuntu

O PostgreSQL é o banco de dados relacional open-source mais avançado do mundo. Para servidores de banco de dados de produção, a instalação nativa (sem Docker) oferece melhor performance e controle. Este guia usa o repositório oficial PGDG (PostgreSQL Global Development Group) para instalar o PostgreSQL 16 no Ubuntu 24.04.

cerca de 25 minjunho/2026 · Ubuntu 24.04 LTS

Antes de começar

VPS mínima
2 vCPU · 2 GB RAM · 20 GB SSD (Runstack Basic ou superior)
Sistema
Ubuntu 24.04 LTS
Também
  • Acesso root ou usuário com sudo
  • Porta 5432 liberada no firewall apenas para IPs específicos (não expor publicamente)

Instalação passo a passo

  1. 1

    Atualizar o sistema

    Sincronize os repositórios e aplique atualizações.

    bash
    apt update && apt upgrade -y
    apt install -y curl ca-certificates
  2. 2

    Adicionar o repositório oficial PGDG

    O repositório oficial do PostgreSQL garante acesso às versões mais recentes e patches de segurança antes do Ubuntu.

    bash
    # Instalar o helper de configuração do repositório
    apt install -y postgresql-common
    
    # Executar o script de configuração do repositório PGDG
    /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh
  3. 3

    Instalar o PostgreSQL 16

    Instale o PostgreSQL 16 com os pacotes principais.

    bash
    apt update
    apt install -y postgresql-16
  4. 4

    Verificar a instalação e o serviço

    Confirme que o PostgreSQL está rodando como serviço systemd.

    bash
    systemctl status postgresql
    systemctl is-enabled postgresql
    
    # Verificar a versão instalada
    psql --version
    
    # Verificar que o cluster está ativo
    pg_lsclusters
  5. 5

    Configurar o usuário administrador

    Defina uma senha segura para o superusuário `postgres`.

    bash
    # Acessar o PostgreSQL como usuário postgres do sistema
    sudo -u postgres psql
    
    -- No prompt do psql:
    ALTER USER postgres PASSWORD 'troque_por_senha_muito_forte';
    \q
  6. 6

    Criar banco de dados e usuário de aplicação

    Boa prática: nunca conecte aplicações com o usuário `postgres`. Crie um usuário e banco dedicados.

    bash
    sudo -u postgres psql << 'SQLEOF'
    -- Criar usuário de aplicação
    CREATE USER meu_app WITH PASSWORD 'senha_app_forte';
    
    -- Criar banco de dados
    CREATE DATABASE meu_banco OWNER meu_app;
    
    -- Verificar
    \du
    \l
    \q
    SQLEOF
  7. 7

    Configurar acesso remoto (opcional)

    Por padrão, o PostgreSQL só aceita conexões locais. Para permitir conexões de outros servidores (ex.: sua aplicação em outro VPS), edite as configurações de rede.

    bash
    # Editar postgresql.conf para escutar em todas as interfaces
    nano /etc/postgresql/16/main/postgresql.conf
    
    # Localizar e alterar a linha:
    # listen_addresses = 'localhost'
    # Para:
    # listen_addresses = '*'
    
    # Editar pg_hba.conf para permitir conexões do IP da aplicação
    nano /etc/postgresql/16/main/pg_hba.conf
    
    # Adicionar no final (substitua pelo IP real da aplicação):
    # host    meu_banco    meu_app    10.0.0.5/32    scram-sha-256
    
    # Reiniciar para aplicar
    systemctl restart postgresql
  8. 8

    Configurar firewall UFW

    Libere a porta 5432 apenas para os IPs que precisam de acesso ao banco.

    bash
    ufw allow 22/tcp comment 'SSH'
    
    # Liberar PostgreSQL APENAS para IP específico da aplicação
    ufw allow from 10.0.0.5 to any port 5432 comment 'PostgreSQL - app server'
    
    # NÃO faça: ufw allow 5432/tcp (expõe para todos os IPs)
    
    ufw --force enable
    ufw status verbose
  9. 9

    Testar a conexão

    Confirme que o banco está acessível com as credenciais criadas.

    bash
    # Teste de conexão local
    psql -U meu_app -d meu_banco -c "SELECT version();"
    
    # Teste de conexão remota (do servidor de aplicação)
    # psql -h IP-DO-POSTGRES -U meu_app -d meu_banco -c "SELECT version();"

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.

Se der problema

Verifique os logs para identificar conflito de porta ou erro de permissão.

bash
journalctl -u postgresql -n 50 --no-pager
pg_lsclusters

A senha está incorreta ou o método de autenticação no pg_hba.conf não corresponde. Verifique o método configurado (scram-sha-256 é o padrão seguro).

bash
cat /etc/postgresql/16/main/pg_hba.conf | grep -v "^#"

Certifique-se de ter reiniciado o PostgreSQL e de que a regra no pg_hba.conf para o IP remoto está correta.

bash
systemctl restart postgresql
# Verificar que está escutando em todas as interfaces:
ss -tlnp | grep 5432

Ajuste os parâmetros de memória no postgresql.conf. Valores básicos para 2 GB de RAM: shared_buffers=512MB, effective_cache_size=1536MB, work_mem=4MB.

bash
nano /etc/postgresql/16/main/postgresql.conf
systemctl restart postgresql

Configure a retenção de logs no postgresql.conf (log_rotation_age, log_rotation_size) ou use logrotate.

bash
# Verificar tamanho dos logs:
du -sh /var/log/postgresql/

Perguntas frequentes

Para servidores dedicados de banco de dados em produção, a instalação nativa oferece melhor performance (sem overhead de containerização) e acesso direto a ferramentas do sistema como pg_dump, pg_restore e pg_upgrade. Docker é mais conveniente em ambientes de desenvolvimento ou quando PostgreSQL é um componente de uma stack maior.

Use pg_dump para backup lógico: `pg_dump -U meu_app -d meu_banco > backup_$(date +%Y%m%d).sql`. Para backup de todos os bancos: `pg_dumpall -U postgres > full_backup.sql`. Automatize com cron para backups regulares.

Sim. O PostgreSQL 16 tem suporte até novembro de 2028. O repositório PGDG garante atualizações de segurança independente do ciclo do Ubuntu.

Acesse como usuário do sistema: `sudo -u postgres psql` e execute `ALTER USER postgres PASSWORD 'nova_senha';`. Também é possível usar `sudo -u postgres pg_ctlcluster 16 main reload` após alterar pg_hba.conf.

Sim. O PostgreSQL no Ubuntu usa o conceito de clusters. Use `pg_createcluster <versão> <nome>` para criar clusters adicionais em portas diferentes.