默认的 PostgreSQL 安装为 90 年代的工作站 。 在2–8 GB 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;"
永远不要在应用程序中使用邮箱超级用户 。 每个应用程序一个用户,每个项目一个数据库.
编辑 /etc/postgresql/16/main/postgresql.conf 并基于服务器大小设置值 :
| 设置 | 2 GB VPS 键 | 4 GB VPS 键 | 8 GB VPS 单曲 |
|---|---|---|---|
| 共享库名( B) | 512MB (英语). | 1GB (英语). | 2GB 常规 |
| 无效( C) | 1GB (英语). | 2.5GB (中文(简体) ). | 5GB 常规 |
| 工作( M) | 16MB (英语). | 第32MB号 | 48MB (英语). |
| 维护 工作 mem | 128MB (英语). | 256MB (英语). | 512MB (英语). |
| 最大连接 | 50 | 100 | 150 |
systemctl restart postgresql
sudo -u postgres psql -c "SHOW shared_buffers;"
如果您的应用程序打开了上百个连接, 将 PgBouncer 放在前面, 而不是提高 最大 连接 —— 每个连接都需要内存 。
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
添加到括号中 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 GB RAM对于开发及小型应用来说是精细的,4 GB对于一个制作网站来说是舒适的,而8 GB处理一个忙碌的数据库并用缓存. NVMe存储在这里比额外的核心更重要.
启用 pg stat 语句扩展并按平均时间排序 。 它通常显示一到两个缺失的索引来解释大部分负载.
一个舒适的生产数据库开始于 Buran-2,13欧元/欧元.