PostgreSQL na VPS: como instalar e proteger no Ubuntu
Aprenda a instalar o PostgreSQL na VPS com Ubuntu, criar um usuário só para o app, usar scram-sha-256 e liberar o acesso externo com três travas, sem abrir a porta à toa.
Por Redação Eleven Host · @robson.direitodigital · 27 de outubro de 2026 · 8 min de leitura

Capa da Redação Eleven Host para o guia: PostgreSQL na VPS: como instalar e proteger no Ubuntu Arte: Eleven Host
Para ter um PostgreSQL na VPS, rode sudo apt install postgresql, crie um usuário próprio para o app e deixe o banco só local. Só libere a rede com três travas: listen_addresses, uma linha no pg_hba.conf e o firewall.
PostgreSQL é um banco de dados relacional de código aberto: sistemas, lojas e ferramentas como o n8n guardam dados nele. Instalar na própria VPS dá controle sobre o banco, e a responsabilidade por atualizar, fazer backup e proteger fica com você. Neste guia, 203.0.113.10 é o servidor, 198.51.100.20 é a máquina do app, e app e meu_banco são nomes de exemplo. Troque pelos seus.
Instalar e conferir
No Ubuntu, a documentação oficial manda instalar o pacote do repositório da distribuição:
sudo apt install postgresql
O Ubuntu instala a versão que está no repositório dele, então o número varia conforme o seu sistema. Para ver qual ficou, rode:
psql --version
Os arquivos de configuração ficam em /etc/postgresql/<versão>/main, e os dois que importam aqui são o postgresql.conf e o pg_hba.conf. Para reiniciar o serviço, use:
sudo systemctl restart postgresql.service
E para ver se ele está rodando:
sudo systemctl status postgresql
Para entrar no banco como administrador, use o usuário postgres do sistema. Para sair do psql, digite \q:
sudo -u postgres psql
Criar usuário e banco para o app
Não use o usuário postgres dentro do app. Ele é o administrador do servidor de banco, e um app não precisa desse poder todo. Crie um usuário só para o app, dono de um banco só dele. O primeiro comando pede a senha do novo usuário e o segundo cria o banco:
sudo -u postgres createuser --pwprompt app
sudo -u postgres createdb -O app meu_banco
Se você prefere trabalhar dentro do psql, o resultado é o mesmo com estes dois comandos SQL:
CREATE ROLE app LOGIN PASSWORD 'senha-forte-aqui';
CREATE DATABASE meu_banco OWNER app;
Troque senha-forte-aqui por uma senha longa e única, guardada num gerenciador de senhas.
Senhas: use scram-sha-256
O método de senha padrão do PostgreSQL (a opção password_encryption) é o scram-sha-256. A documentação avisa que o suporte a senhas MD5 está obsoleto e será removido numa versão futura. Por isso, ao escrever linhas no pg_hba.conf, escolha scram-sha-256 e deixe o md5 de lado.
Precisa acessar de fora?
Primeiro, uma pergunta simples: o app roda na mesma VPS que o banco? Se sim, deixe como está. Segundo a documentação do PostgreSQL, o padrão de listen_addresses é localhost, que significa só conexões locais de loopback. O app conecta em localhost, porta 5432, e você não abre nada na rede. É o caso mais simples e seguro.
Se você só quer consultar o banco do seu computador, existe um caminho sem abrir a porta: o túnel SSH. Ele leva a porta do banco pelo SSH, e o guia Como criar chave SSH e entrar na VPS sem senha mostra como deixar o acesso ao servidor pronto. Este comando liga a porta 5433 do seu computador ao PostgreSQL do servidor:
ssh -L 5433:127.0.0.1:5432 usuario@203.0.113.10
Com o túnel aberto, o cliente conecta em 127.0.0.1, porta 5433. Se o app roda em outra máquina e precisa do banco ligado o tempo todo, siga para a próxima seção.
Escutar na rede não é o mesmo que estar liberado. Com o listen_addresses alterado, o banco só fica acessível a quem passar também pela linha do pg_hba.conf e pelo firewall. Faça as três travas antes de testar.
Quer o banco e o app em um servidor seu? Os planos de VPS começam em R$ 17,00/mês, no Plano Bronze; confira na loja o que cada plano inclui. Ver planos de VPS
Liberar para outro servidor com segurança
Se o app está em outra máquina, são três travas, na ordem a seguir.
Trava 1: o endereço em que o PostgreSQL escuta. Edite o postgresql.conf. A documentação do Ubuntu mostra listen_addresses = '*', que escuta em todas as interfaces, mas prefira listar só o IP do servidor:
listen_addresses = 'localhost,203.0.113.10'
Essa mudança só vale depois de reiniciar o serviço (sudo systemctl restart postgresql.service). Depois, confira onde ele escuta:
sudo ss -tlnp | grep 5432
Trava 2: uma linha no pg_hba.conf só para o IP do app. Esse arquivo diz quem pode entrar, em qual banco e com qual método. Para um único host, a documentação manda usar a máscara 32 em IPv4, o /32. Acrescente esta linha:
hostssl meu_banco app 198.51.100.20/32 scram-sha-256
O tipo hostssl só aceita a conexão se ela vier com SSL, enquanto o tipo host aceita com ou sem. Depois de editar o pg_hba.conf, recarregue a configuração, sem reiniciar:
sudo systemctl reload postgresql
Dentro do psql, o comando SELECT pg_reload_conf(); faz o mesmo.
Trava 3: o firewall. Abra a 5432 só para o IP do app, e não para a internet inteira:
sudo ufw allow from 198.51.100.20 to any port 5432 proto tcp
Se o ufw ainda não está configurado no servidor, o guia Firewall para VPS: como proteger seu servidor explica como começar. A lógica das três travas é a mesma do acesso remoto ao MySQL, só com outros nomes de arquivo.
Uma regra do pg_hba.conf merece atenção: o PostgreSQL lê as linhas de cima para baixo, e a primeira que bate com o tipo de conexão, o endereço, o banco e o usuário decide. Se a autenticação falhar nessa linha, as de baixo não são testadas. Se nenhuma linha bater, o acesso é negado. Por isso a ordem importa. Também não use trust para conexões de rede: segundo a documentação, ele deixa quem alcançar o servidor entrar como outro usuário, sem senha.
Testar a conexão
Na máquina do app (o IP que você usou no pg_hba.conf), instale o cliente e conecte:
sudo apt install postgresql-client
psql --host 203.0.113.10 --username app --password --dbname meu_banco
Digite a senha quando o cliente pedir. Se aparecer o prompt meu_banco=>, a conexão funcionou.
Backup com pg_dump
A documentação do Ubuntu lembra que os bancos PostgreSQL devem ter backup regular. Com a ferramenta pg_dump, você gera um arquivo do banco, e o pg_restore devolve os dados:
pg_dump -Fc -U app -h localhost meu_banco > meu_banco.dump
pg_restore -U app -h localhost -d meu_banco meu_banco.dump
Proteja o arquivo com chmod 600 meu_banco.dump e guarde uma cópia fora da VPS. Para rodar o backup em horário marcado, o guia Como usar crontab: agende tarefas na VPS Linux mostra como agendar.
Erros comuns
- Conexão recusada: olhe primeiro as duas travas de rede, o
listen_addressese o firewall. Rode osse oufw statuse veja se a porta 5432 aparece no endereço e no IP esperados. - Erro de que não há linha no pg_hba.conf para a sua conexão: nenhuma linha bateu com o IP, o banco, o usuário ou o tipo SSL. Revise a linha
hostssle recarregue a configuração. - Falha de senha: confira o usuário, o banco e a senha.
- A mudança no listen_addresses não pegou: essa opção exige reiniciar o serviço. O reload não aplica essa mudança.
Checklist do PostgreSQL seguro
- Instalei com
sudo apt install postgresqle conferi a versão compsql --version. - Criei um usuário e um banco só para o app, e o app não usa o
postgres. - A senha é longa, única e está num gerenciador de senhas.
- As linhas do
pg_hba.confusamscram-sha-256, semmd5e semtrust. - Se o app está na mesma VPS, o banco ficou em
localhost. - Se precisei de acesso externo, uso o túnel SSH ou as três travas.
- O
listen_addresseslista só o IP do servidor, e o serviço foi reiniciado. - A linha
hostsslusa o IP do app com/32. - O ufw abre a 5432 só para o IP do app.
- O teste com
psqlconectou. - Tenho backup com
pg_dumpguardado fora da VPS, comchmod 600.
Tem um app para colocar no ar? Os planos de VPS começam em R$ 17,00/mês, no Plano Bronze; confira na loja o que cada plano inclui. Conhecer os planos
Perguntas frequentes
Como instalar o PostgreSQL na VPS?
No Ubuntu, rode sudo apt install postgresql. A versão instalada é a do repositório da distribuição, e o comando psql --version mostra qual ficou.
O PostgreSQL aceita conexões de fora logo após a instalação?
Não. Segundo a documentação, o padrão do listen_addresses é localhost, então o banco só atende conexões locais. Para liberar outro servidor, siga as três travas deste guia.
Posso usar o usuário postgres no meu app?
Evite. Crie um usuário próprio para o app, dono de um banco só dele, com createuser e createdb.
Qual método de senha usar no pg_hba.conf?
Use scram-sha-256. A documentação avisa que o suporte a senhas MD5 está obsoleto e será removido numa versão futura.