PostgreSQL با یک دستور نصب میشود. جایی که مردم اشتباه میکنند دسترسی از راه دور است: پورت ۵۴۳۲ را برای کل دنیا باز میکنند، یک رمز عبور میگذارند و بعد تعجب میکنند چرا لاگها پر از تلاش برای ورود است. این راهنما Postgres را روی Ubuntu 24.04 نصب میکند، یک پایگاهداده میسازد و دو راه امن برای اتصال از بیرون نشان میدهد.
۱. نصب
apt update && apt install -y postgresql
systemctl status postgresql --no-pager
روی Ubuntu 24.04 این PostgreSQL 16 است. به طور پیشفرض فقط روی localhost گوش میدهد؛ مگر دلیلی داشته باشید، همینطور نگهش دارید.
۲. یک کاربر و یک پایگاهداده بسازید
sudo -u postgres psql <<'SQL'
CREATE USER app WITH PASSWORD 'use-a-long-random-password';
CREATE DATABASE appdb OWNER app;
SQL
اپلیکیشنهای روی همان سرور با postgresql://app:PASSWORD@localhost:5432/appdb وصل میشوند.
۳. از لپتاپ وصل شوید: تونل SSH (توصیهشده)
چیزی برای باز کردن نیست و چیزی روی سرور پیکربندی نمیشود. تونل یک پورت محلی را از طریق SSH فوروارد میکند:
ssh -N -L 5433:localhost:5432 root@203.0.113.10
روی پلن NAT پورت SSH شخصی خود را از پنل اضافه کنید:
ssh -N -p 20123 -L 5433:localhost:5432 root@your-nat-host
تا وقتی تونل باز است، کلاینت پایگاهداده را به localhost:5433 هدایت کنید. SSH همهچیز را رمزنگاری میکند و پورت ۵۴۳۲ به روی اینترنت بسته میماند. ابزارهای گرافیکی مثل DBeaver و pgAdmin یک زبانه «SSH tunnel» دارند که همین کار را میکند.
۴. دسترسی مستقیم برای سرور دیگر (لیست مجاز)
اگر یک سرور اپلیکیشن در جای دیگر باید مستقیم وصل شود، فقط IP آن را مجاز کنید. این نیاز دارد که سرور پایگاهداده روی پلنی با IP اختصاصی باشد، چون پلنهای NAT جز SSH اتصال ورودی نمیپذیرند.
در /etc/postgresql/16/main/postgresql.conf:
listen_addresses = '*'
در انتهای /etc/postgresql/16/main/pg_hba.conf:
hostssl appdb app 198.51.100.20/32 scram-sha-256
فایروال را فقط برای همان یک آدرس باز کنید و ریاستارت کنید:
ufw allow from 198.51.100.20 to any port 5432 proto tcp
systemctl restart postgresql
hostssl اتصال رمزنگاریشده را اجباری میکند؛ بسته Ubuntu یک گواهی خودامضا دارد، پس کلاینتها باید با sslmode=require وصل شوند.
۵. تنظیمات اولیه معقول
برای سروری با ۲ گیگابایت RAM، در postgresql.conf:
shared_buffers = 512MB
effective_cache_size = 1536MB
work_mem = 8MB
پس از تغییر ریاستارت کنید. برای بیشتر اپلیکیشنهای کوچک همین کافی است؛ پس از دیدن کوئریهای واقعی دقیقتر تنظیم کنید.
۶. پشتیبانگیری
هر شب یک dump که یک هفته نگه داشته میشود:
mkdir -p /var/backups/pg && chown postgres /var/backups/pg
cat > /etc/cron.d/pg-backup <<'EOF'
30 3 * * * postgres pg_dump -Fc appdb > /var/backups/pg/appdb-$(date +\%u).dump
EOF
-Fc یک dump فشرده میسازد که با pg_restore بازیابی میشود. dumpها را بیرون از سرور هم کپی کنید؛ Managed Backups نقاط بازیابی روزانه از کل دستگاه اضافه میکند.
نظرات
هنوز نظری نیست. اولین نفر باشید.