Установка PostgreSQL по умолчанию настроена для рабочей станции 1990-х годов. На 2-8 ГБ VPS несколько настроек меняют все — вот короткая версия, с реальными номерами.
apt update && apt install -y postgresql postgresql-contrib
systemctl enable --now postgresql
sudo -u postgres psql -c "SELECT version();"
Корабли Ubuntu PostgreSQL 16 24.04. Эта версия достаточно современная для всего, что вы можете запустить.
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;"
Никогда не используйте суперпользователь postgres в приложении. Один пользователь на приложение, одна база данных на проект.
Редактировать /etc/postgresql/16/main/postgresql.conf и установить значения, основанные на размере сервера:
| настройка | 2 ГБ VPS | 4 ГБ VPS | 8 ГБ VPS |
|---|---|---|---|
| Shared buffers | 512 Мб. | 1 Гб | 2 ГБ |
| Эффективный cache size | 1 Гб | 2.5 ГБ | 5 ГБ |
| Work mem | 16 Мб. | 32 Мбайт | 48 Мб. |
| Обслуживание work mem | 128 Мбайт | 256 Мбайт | 512 Мб. |
| max соединения | 50 | 100 | 150 |
systemctl restart postgresql
sudo -u postgres psql -c "SHOW shared_buffers;"
Если ваше приложение открывает сотни подключений, поставьте PgBouncer впереди, а не поднимайте max connections — каждое соединение стоит памяти.
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
Добавить в cron crontab -e:
30 3 * * * /usr/local/bin/pg-dump-all
Сбросы - это последовательные снимки; копии файлов в реальном каталоге данных - нет. Затем отгрузите свалки за пределы площадки - наш путеводитель охватывает эту часть.
sudo -u postgres createdb appdb_restore
sudo -u postgres pg_restore -d appdb_restore /var/backups/postgres/appdb.dump
Лучше нет. Держите его на локальном хосте и дайте приложению общаться с ним напрямую или используйте туннель SSH. Если вы должны разоблачить его, допустите только свой IP-адрес в брандмауэре и требуйте TLS.
2 ГБ оперативной памяти отлично подходит для разработки и небольших приложений, 4 ГБ удобно для производственного веб-сайта, а 8 ГБ обрабатывает занятую базу данных с кэшированием. Хранение NVMe имеет большее значение, чем дополнительные ядра.
Включите расширение pg stat statements и сортируйте по времени. Обычно он показывает один или два недостающих индекса, которые объясняют большую часть нагрузки.
Удобная производственная база данных начинается с Buran-2, €13/мо.