Uma instalação PostgreSQL padrão é sintonizada para uma estação de trabalho dos anos 1990. Em uma VPS de 2-8 GB algumas configurações mudam tudo — aqui está a versão curta, com números reais.
apt update && apt install -y postgresql postgresql-contrib
systemctl enable --now postgresql
sudo -u postgres psql -c "SELECT version();"
Ubuntu navios PostgreSQL 16 em 24.04. Essa versão é moderna o suficiente para qualquer coisa que você possa executar.
sudo -u postgres psql <<'SQL'
CREATE USER app WITH PASSWORD 'strong-password';
CREATE DATABASE appdb OWNER app;
SQL
psql "postgresql://app:strong-password@localhost/appdb" -c "SELECT 1;"
Nunca use o superusuário postgres em uma aplicação. Um usuário por aplicativo, um banco de dados por projeto.
Editar /etc/postgresql/16/main/postgresql.conf e definir valores com base no tamanho do servidor:
| Configuração | 2 GB VPS | 4 GB VPS | 8 GB VPS |
|---|---|---|---|
| buffers compartilhados | 512MB | 1GB | 2GB |
| tamanho cache eficaz | 1GB | 2.5GB | 5GB |
| work mem | 16MB | 32MB | 48MB |
| maintenance work mem | 128MB | 256MB | 512MB |
| max conexões | 50 | 100 | 150 |
systemctl restart postgresql
sudo -u postgres psql -c "SHOW shared_buffers;"
Se o seu aplicativo abrir centenas de conexões, coloque o PgBouncer na frente em vez de levantar conexões max — cada conexão custa memória.
cat > /usr/local/bin/pg-dump-all <<'EOF'
#!/bin/sh
set -e
DIR=/var/backups/postgres
mkdir -p "$DIR"
sudo -u postgres pg_dumpall --globals-only > "$DIR/globals.sql"
for db in $(sudo -u postgres psql -Atc "SELECT datname FROM pg_database WHERE datistemplate = false"); do
sudo -u postgres pg_dump -Fc "$db" > "$DIR/$db.dump"
done
find "$DIR" -type f -mtime +7 -delete
EOF
chmod +x /usr/local/bin/pg-dump-all
Adicionar ao cron com crontab -e:
30 3 * * * /usr/local/bin/pg-dump-all
Os resultados são instantâneos consistentes; as cópias de arquivos de um diretório de dados ao vivo não são. Em seguida, enviar os lixões fora do local — o nosso guia resítico cobre essa parte.
sudo -u postgres createdb appdb_restore
sudo -u postgres pg_restore -d appdb_restore /var/backups/postgres/appdb.dump
É melhor não. Mantenha-o no localhost e deixe o aplicativo falar com ele diretamente, ou use um túnel SSH. Se você precisa expô-lo, permita apenas seu IP no firewall e exija TLS.
2 GB de RAM é bom para o desenvolvimento e aplicativos pequenos, 4 GB é confortável para um site de produção, e 8 GB lida com um banco de dados ocupado com cache. O armazenamento NVMe importa mais do que núcleos extras aqui.
Activar a extensão pg stat statements e ordenar por tempo médio. Geralmente mostra um ou dois índices em falta que explicam a maior parte da carga.
Uma base de dados de produção confortável começa em Buran-2, €13/mês.