الرجوع لكل المقالات
أضف قاعدة الوارد:
|الإعداد|القيمة|
|---|---|
|المصدر|
شغل دول داخل
uncategorized
دليل ماستر لاستضافة PostgreSQL بنفسك (Dokploy+VPS)
4 دقايق قراءة
12 مشاهدة
Pasted image 20260125195930النسخة: Postgres 17.7 (Server) | Postgres 18.1 (Local Client) الحالة: ✅ SSL Enabled | ✅ WAL Logical Enabled | ✅ Multi-Tenant Ready
هذا الدليل وثائق إعداد وتشغيل كامل لمثيل PostgreSQL جاهز للإنتاج، متعدد المستأجرين، ومضيف على Oracle Cloud (OCI) ، ومُنشأ عبر Dokploy ، وأمن عبر SSL. كما يغطي أذونات المستوى Scheme المناسبة للصواميل الحديثة مثل Next.js, Prisma, و migrations.
0. المتطلبات السابقة
- OCI VM (يُفضل Ubuntu/Debian)
- Dokploy مُثبت
- Cloudflare DNS
- Docker & Docker Compose
- عميل PostgreSQL محلي (
psql)
1. إعداد Cloudflare DNS 🌐
لإظهار PostgreSQL بأمان عبر نطاق مخصص، يجب تعطيل وكيل Cloudflare.
سجل DNS
- النوع:
A - الاسم:
pg - IPv4:
193.123.91.169 - حالة الوكيل: ☁️ DNS Only (Grey Cloud)
⚠️ مهم سحابة Cloudflare البرتقالية تمنع منافذ غير HTTP مثل
5432.
2. جدار الحماية وأمان الشبكة 🔐
يجب السماح ل Postgres على مستوى OCI ومستوى نظام التشغيل.
أ. قائمة أمان OCI Networking → Security Lists → Default Security List
أضف قاعدة الوارد:
|الإعداد|القيمة|
|---|---|
|المصدر|0.0.0.0/0|
|البروتوكول|TCP|
|المنفذ|5432|
ب. جدار حماية نظام التشغيل الخادم (مستدام)
تشغيل على جهاز VM المضيف (ليس داخل Docker):
sudo iptables -I INPUT 6 -p tcp --dport 5432 -j ACCEPT
sudo netfilter-persistent save
3. Dokploy – PostgreSQL مع SSL & WAL 🐳
يستخدم هذا الإعداد صورة PostgreSQL 17 مع SSL مسبقًا وتمكين التكرار المنطقي (مطلوب ل Prisma Pulse, CDC, إلخ).
services:
postgres-db:
image: ghcr.io/railwayapp-templates/postgres-ssl:17
restart: always
environment:
POSTGRES_USER: ${POSTGRES_USER:-my-pg-user}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-my-pg-password}
POSTGRES_DB: ${POSTGRES_DB:-my-pg-db}
command:
- "postgres"
- "-c"
- "wal_level=logical"
- "-c"
- "max_replication_slots=10"
- "-c"
- "max_wal_senders=10"
volumes:
- postgres_data:/var/lib/postgresql/data
ports:
- "5432:5432"
networks:
- dokploy-network
networks:
dokploy-network:
external: true
volumes:
postgres_data:
4. الاتصال الأولي والتأكيد 🔌
الاتصال من جهاز محلي
psql postgresql://my-pg-user:[email protected]:5432/my-pg-db
النتيجة المتوقعة:
- ✅ اتصال SSL
- ✅ يُجيب الخادم (لا يُحدث انتهاءً بالوقت)
5. هندسة التenant المتعددة (المستخدمون والقواعد) 🏗️
يحصل كل مشروع على:
- قاعدة بيانات واحدة
- مستخدم مخصص واحد
- أذونات على مستوى Scheme هذا يمنع الوصول عبر المشاريع ويدعم عمليات نقل Prisma.
6. إنشاء المستخدمين والقواعد 👤📦
تشغيل أثناء الاتصال كمستخدم Postgres الرئيسي.
مشاريع مثال تم إنشاؤها
CREATE USER database_user WITH PASSWORD 'secure_password';
CREATE DATABASE example_db OWNER example_user;
GRANT ALL PRIVILEGES ON DATABASE example_db TO myportfolio_user;
🔐 أفضل ممارسة استخدم كلمات مرور فريدة قوية لكل مستخدم
7. مطلوب: صلاحيات على مستوى السكما ( مهم جداً ⚠️)
بدون كده، Prisma / migrations هتفشل حتى لو ملكية القاعدة البيانية صح.
خطوة 1: اتصل بالقاعدة البيانية اللي انتا مستخدمها
\c zamalek_store_db
خطوة 2: اعطِ صلاحيات الوصول للسكما
GRANT USAGE ON SCHEMA public TO example_user;
خطوة 3: اعطِ صلاحيات الجدول والتسلسل
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO example_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO example_user;
خطوة 4: اعطِ صلاحيات تلقائية للجدول الجديد (مايجرشنز)
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO example_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO example_user;
✅ ده بيضمن ان الجدول الجديد اللي بيخلقو ببريما يعمل تلقائيا.
8. سترينج الاتصال 🔗
استخدم ده الشكل في كل مكان (تطبيقات، بريما، مايجرشنز):
postgresql://user:[email protected]:5432/db_name?sslmode=require
9. هجرة البيانات (لوكال → سيرفر) 🚚
الطريقة الأمان للهجرة عبر إصدارات بوستجريس:
docker run --rm -i postgres:17-alpine psql \
"postgresql://user:PASSWORD@vps-ip-or-domain:5432/db_name?sslmode=require" \
< your_local_dump.sql
10. قائمة التحقق ✅
شغل دول داخل psql:
|التحقق|الأمر|النتيجة المتوقعة|
|---|---|---|
|تمكين WAL|SHOW wal_level;|logical|
|SSL نشط|SELECT ssl_is_used();|t|
|الإصدار|SELECT version();|PostgreSQL 17.x|
✅ النتيجة النهائية
لدولك دلوقتي:
- 🔐 بوستجريس آمنة بال SSL
- 🧱 قواعد بيانية متعددة معزولة
- 🔄 صلاحيات بريما جاهزة
- ☁️ إعدادات OCI + Dokploy محسنة
- 🧠 كتاب إرشادي قابل لإعادة الاستخدام لمشاريع未来
لو عايز، نقدر نعمل:
- 🔁 نعمل ده قالب للمشاريع الجديدة
- 🔐 نضيف مستخدمين قراءة فقط
- 📊 نضيف pgAdmin / مراقبة
- 🧪 نضيف تلقائية النسخ الإحتياطي والاستعادة قول كلمة 🚀