−25%

روی پرداخت سالانه Windows، تا ۳۱ اکتبر. مشاهده پلن‌ها

EQVPS

چطور PostgreSQL را روی VPS نصب و امن به آن وصل شویم

PostgreSQL 16 را روی Ubuntu نصب کنید، پایگاه‌داده و کاربر بسازید و بدون باز کردن پورت ۵۴۳۲ به اینترنت از راه دور وصل شوید: با تونل SSH یا لیست مجاز.

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 نقاط بازیابی روزانه از کل دستگاه اضافه می‌کند.

مرتبط

پرسش‌های متداول

آیا باید پورت ۵۴۳۲ را به اینترنت باز کنم؟

بهتر است نه. پورت‌های باز پایگاه‌داده مدام اسکن و هدف حمله‌های حدس رمز می‌شوند. از طریق تونل SSH وصل شوید، یا اگر یک سرور اپلیکیشن باید مستقیم وصل شود، فقط IP آن را هم در pg_hba.conf و هم در فایروال مجاز کنید.

آیا می‌توانم روی پلن NAT از PostgreSQL استفاده کنم؟

بله. اپلیکیشن‌های روی همان سرور به صورت محلی وصل می‌شوند و شما از لپ‌تاپ از طریق تونل SSH روی پورت SSH شخصی‌تان به پایگاه‌داده می‌رسید. کاری که پلن NAT نمی‌تواند بکند پذیرفتن اتصال مستقیم ورودی به ۵۴۳۲ از سرورهای دیگر است.

PostgreSQL چقدر RAM لازم دارد؟

با چند صد مگابایت کار می‌کند و هر چه بدهید به عنوان کش استفاده می‌کند. نقطه شروع رایج این است که shared_buffers حدود ۲۵٪ RAM باشد. برای پایگاه‌داده یک اپلیکیشن کوچک، سروری با ۲ گیگابایت RAM بیش از کافی است.

چطور از پایگاه‌داده پشتیبان بگیرم؟

از pg_dump با فرمت سفارشی ('pg_dump -Fc') استفاده کنید و آن را از cron اجرا کنید. کپی‌هایی بیرون از سرور هم نگه دارید. Managed Backups نقاط بازیابی روزانه از کل سرور اضافه می‌کند.

کدام نسخه PostgreSQL را می‌گیرم؟

Ubuntu 24.04 با PostgreSQL 16 می‌آید و Debian 12 با 15. برای نسخه اصلی جدیدتر، مخزن رسمی apt پستگرس (apt.postgresql.org) را اضافه کنید.

نظرات

هنوز نظری نیست. اولین نفر باشید.

یک نظر بگذارید

نظرات پیش از نمایش بررسی می‌شوند.