Una instalación PostgreSQL predeterminada se ajusta para una estación de trabajo de 1990. En un VPS de 2 a 8 GB algunos ajustes cambian todo, aquí está la versión corta, con números reales.
apt update && apt install -y postgresql postgresql-contrib
systemctl enable --now postgresql
sudo -u postgres psql -c "SELECT version();"
Ubuntu barcos PostgreSQL 16 el 24.04. Esa versión es lo suficientemente moderna para cualquier cosa que puedas correr.
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 el superusuario postgres en una aplicación. Un usuario por aplicación, una base de datos por proyecto.
Editar /etc/postgresql/16/main/postgresql.conf y establecer valores basados en el tamaño del servidor:
| Ajuste | 2 GB VPS | 4 GB VPS | 8 GB VPS |
|---|---|---|---|
| shared buffers | 512MB | 1GB | 2GB |
| effective cache size | 1GB | 2.5GB | 5GB |
| work mem | 16MB | 32MB | 48MB |
| mantenimiento work mem | 128 MB | 256MB | 512MB |
| max connections | 50 | 100 | 150 |
systemctl restart postgresql
sudo -u postgres psql -c "SHOW shared_buffers;"
Si su aplicación abre cientos de conexiones, ponga PgBouncer delante en lugar de elevar max connections — cada conexión cuesta memoria.
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
Añadirlo a cron con crontab -e:
30 3 * * * /usr/local/bin/pg-dump-all
Las bombas son instantáneas consistentes; copias de archivo de un directorio de datos en vivo no son. Luego envía los vertederos fuera del sitio - nuestro guía de descanso cubre esa parte.
sudo -u postgres createdb appdb_restore
sudo -u postgres pg_restore -d appdb_restore /var/backups/postgres/appdb.dump
Mejor que no. Mantenlo en localhost y deja que la aplicación hable directamente con ella, o utilice un túnel SSH. Si usted debe exponerlo, permita sólo su IP en el cortafuegos y requiera TLS.
2 GB RAM está bien para el desarrollo y aplicaciones pequeñas, 4 GB es cómodo para un sitio web de producción, y 8 GB maneja una base de datos ocupada con caché. El almacenamiento NVMe importa más que núcleos extra aquí.
Habilitar la extensión pg stat statements y ordenar por tiempo medio. Generalmente muestra uno o dos índices perdidos que explican la mayor parte de la carga.
Una cómoda base de datos de producción comienza en Buran-2, 13 €/mo.