Skip to content
تم إنشاء هذه الصفحة وترجمتها بمساعدة الذكاء الاصطناعي. إذا لاحظت أي أخطاء، لا تتردد في المساهمة في تحسينها. تعديل على GitHub

نشر الإنتاج

يغطي هذا الدليل نشر OpenPR في بيئة إنتاج مع HTTPS ووكيل عكسي وتصليب قاعدة البيانات وأفضل ممارسات الأمان.

البنية المعمارية

mermaid
graph LR
    INTERNET["Internet<br/>:443"] --> CADDY["Caddy<br/>Auto HTTPS"]
    CADDY --> FE["Frontend<br/>Nginx :3000"]
    FE --> API["API :8080"]
    FE --> MCP["MCP :8090"]
    API --> PG["PostgreSQL :5432"]
    WORKER["Worker"] --> PG

المتطلبات الأولية

  • خادم بـ 2 نواة CPU على الأقل و2 GB ذاكرة
  • نطاق يشير إلى عنوان IP خادمك
  • Docker وDocker Compose (أو Podman)

الخطوة الأولى: إعداد البيئة

أنشئ ملف .env للإنتاج:

bash
# Database (use strong passwords)
DATABASE_URL=postgres://openpr:STRONG_PASSWORD_HERE@postgres:5432/openpr
POSTGRES_DB=openpr
POSTGRES_USER=openpr
POSTGRES_PASSWORD=STRONG_PASSWORD_HERE

# JWT (generate a random secret)
JWT_SECRET=$(openssl rand -hex 32)
JWT_ACCESS_TTL_SECONDS=86400
JWT_REFRESH_TTL_SECONDS=604800

# Logging
RUST_LOG=info

الأسرار

لا تُودِع ملفات .env في التحكم بالإصدار. استخدم chmod 600 .env لتقييد أذونات الملف.

الخطوة الثانية: إعداد Caddy

ثبِّت Caddy على النظام المضيف:

bash
sudo apt install -y caddy

هيِّئ Caddyfile:

# /etc/caddy/Caddyfile
your-domain.example.com {
    reverse_proxy localhost:3000
}

يحصل Caddy تلقائياً على شهادات Let's Encrypt TLS ويجددها.

ابدأ Caddy:

bash
sudo systemctl enable --now caddy

بديل: Nginx

إذا كنت تفضل Nginx، هيِّئه مع توجيه الوكيل إلى المنفذ 3000 واستخدم certbot لشهادات TLS.

الخطوة الثالثة: النشر بـ Docker Compose

bash
cd /opt/openpr
docker-compose up -d

تحقق من سلامة جميع الخدمات:

bash
docker-compose ps
curl -k https://your-domain.example.com/health

الخطوة الرابعة: إنشاء حساب المسؤول

افتح https://your-domain.example.com في متصفحك وسجِّل حساب المسؤول.

أول مستخدم

أول مستخدم يسجل يصبح مسؤولاً. سجِّل حساب المسؤول قبل مشاركة URL.

قائمة فحص الأمان

المصادقة

  • [ ] تغيير JWT_SECRET إلى قيمة عشوائية 32+ حرفاً
  • [ ] ضبط قيم TTL مناسبة للرمز (أقصر للوصول، أطول للتحديث)
  • [ ] إنشاء حساب المسؤول فور النشر

قاعدة البيانات

  • [ ] استخدام كلمة مرور قوية لـ PostgreSQL
  • [ ] عدم كشف منفذ PostgreSQL (5432) للإنترنت
  • [ ] تفعيل SSL في PostgreSQL للاتصالات (إذا كانت قاعدة البيانات بعيدة)
  • [ ] إعداد نسخ احتياطية منتظمة لقاعدة البيانات

الشبكة

  • [ ] استخدام Caddy أو Nginx مع HTTPS (TLS 1.3)
  • [ ] كشف المنافذ 443 (HTTPS) و8090 اختياريًا (MCP) للإنترنت فقط
  • [ ] استخدام جدار حماية (ufw، iptables) لتقييد الوصول
  • [ ] النظر في تقييد وصول خادم MCP لنطاقات IP معروفة

التطبيق

  • [ ] ضبط RUST_LOG=info (وليس debug أو trace في الإنتاج)
  • [ ] مراقبة استخدام القرص لدليل الرفع
  • [ ] إعداد تدوير السجلات لسجلات الحاوية

نسخ احتياطي لقاعدة البيانات

إعداد نسخ احتياطية تلقائية لـ PostgreSQL:

bash
#!/bin/bash
# /opt/openpr/backup.sh
BACKUP_DIR="/opt/openpr/backups"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"

docker exec openpr-postgres pg_dump -U openpr openpr | gzip > "$BACKUP_DIR/openpr_$DATE.sql.gz"

# Keep only last 30 days
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +30 -delete

إضافة إلى cron:

bash
# Daily backup at 2 AM
0 2 * * * /opt/openpr/backup.sh

المراقبة

فحوصات الصحة

مراقبة نقاط نهاية صحة الخدمات:

bash
# API
curl -f http://localhost:8080/health

# MCP Server
curl -f http://localhost:8090/health

مراقبة السجلات

bash
# Follow all logs
docker-compose logs -f

# Follow specific service
docker-compose logs -f api --tail=100

اعتبارات التوسع

  • خادم API: يمكن تشغيل نسخ متعددة خلف موازن حمل. جميع الحالات تتصل بنفس قاعدة بيانات PostgreSQL.
  • العامل: شغِّل حالة واحدة لتجنب معالجة المهام المكررة.
  • خادم MCP: يمكن تشغيل نسخ متعددة. كل حالة عديمة الحالة.
  • PostgreSQL: للتوافر العالي، فكِّر في تكرار PostgreSQL أو خدمة قاعدة بيانات مُدارة.

التحديث

لتحديث OpenPR:

bash
cd /opt/openpr
git pull origin main
docker-compose down
docker-compose up -d --build

تُطبَّق ترحيلات قاعدة البيانات تلقائياً عند بدء تشغيل خادم API.

الخطوات التالية

Released under the Apache-2.0 License.