إنتقل إلى المحتوى الرئيسي

إعداد Apache

دليل إعداد Apache الكامل لـ FeedbackPulse SaaS.


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

  • Apache 2.4+
  • تفعيل mod_rewrite
  • تفعيل mod_headers (لرؤوس الأمان)
  • PHP 8.4+ (عبر mod_php أو PHP-FPM)

تفعيل الوحدات المطلوبة

sudo a2enmod rewrite headers ssl
sudo systemctl restart apache2

المضيف الافتراضي الأساسي

أنشئ ملف مضيف افتراضي جديد:

sudo nano /etc/apache2/sites-available/feedbackpulse.conf

الصق ما يلي:

<VirtualHost *:80>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
DocumentRoot /var/www/feedbackpulse-saas/public

<Directory /var/www/feedbackpulse-saas/public>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>

# السجلات
ErrorLog ${APACHE_LOG_DIR}/feedbackpulse-error.log
CustomLog ${APACHE_LOG_DIR}/feedbackpulse-access.log combined
</VirtualHost>

فعّل الموقع وأعد التشغيل:

sudo a2ensite feedbackpulse.conf
sudo a2dissite 000-default.conf # تعطيل الموقع الافتراضي (اختياري)
sudo systemctl restart apache2

المضيف الافتراضي بـ HTTPS (مع Let's Encrypt)

بعد الحصول على شهادة SSL:

<VirtualHost *:443>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
DocumentRoot /var/www/feedbackpulse-saas/public

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem

<Directory /var/www/feedbackpulse-saas/public>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>

# رؤوس الأمان
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set X-XSS-Protection "1; mode=block"
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

ErrorLog ${APACHE_LOG_DIR}/feedbackpulse-ssl-error.log
CustomLog ${APACHE_LOG_DIR}/feedbackpulse-ssl-access.log combined
</VirtualHost>

# إعادة توجيه HTTP إلى HTTPS
<VirtualHost *:80>
ServerName yourdomain.com
ServerAlias www.yourdomain.com
Redirect permanent / https://yourdomain.com/
</VirtualHost>

دعم النطاقات الفرعية الشاملة (اختياري)

إذا أردت نطاقات فرعية للمستأجرين مثل acme.yourdomain.com:

<VirtualHost *:443>
ServerName yourdomain.com
ServerAlias *.yourdomain.com
DocumentRoot /var/www/feedbackpulse-saas/public

SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/yourdomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourdomain.com/privkey.pem

<Directory /var/www/feedbackpulse-saas/public>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>

مهم: تحتاج أيضًا إلى سجل DNS شامل (*.yourdomain.com) وشهادة SSL شاملة. راجع إعداد DNS الشامل وشهادات SSL.


ملف .htaccess

يأتي FeedbackPulse مع ملف .htaccess في مجلد public/. يُعالج:

  • إعادة كتابة URL (روابط جميلة بدون index.php)
  • إجبار HTTPS
  • ضبط رؤوس الأمان

إذا لم يعمل .htaccess، تأكد من ضبط AllowOverride All في إعداد المضيف الافتراضي.

يشمل .htaccess الافتراضي:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

وفي public/.htaccess:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]
</IfModule>

cPanel / الاستضافة المشتركة

إذا كنت على استضافة مشتركة مع cPanel:

الخيار أ: التثبيت في public_html

  1. ارفع جميع الملفات إلى public_html/feedbackpulse/
  2. في cPanel ← Domains أو Addon Domains، اضبط جذر المستند على public_html/feedbackpulse/public
  3. إذا لم تستطع تغيير جذر المستند، استخدم هذه الحيلة:

أنشئ .htaccess في جذر public_html/:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ feedbackpulse/public/$1 [L]
</IfModule>

الخيار ب: التثبيت في نطاق فرعي

  1. أنشئ نطاقًا فرعيًا في cPanel (مثل feedback.yourdomain.com)
  2. اضبط جذر المستند على مجلد public/
  3. ارفع جميع ملفات FeedbackPulse إلى مجلد النطاق الفرعي

الخيار ج: نقل محتويات public/

كخيار أخير على الاستضافة المقيّدة:

  1. ارفع جميع الملفات إلى مجلد خارج public_html/ (مثل /home/user/feedbackpulse/)
  2. انسخ محتويات public/ إلى public_html/
  3. عدّل public_html/index.php — حدّث المسارات:
// غيّر هذا:
require __DIR__.'/../vendor/autoload.php';
// إلى هذا:
require '/home/user/feedbackpulse/vendor/autoload.php';

// غيّر هذا:
$app = require_once __DIR__.'/../bootstrap/app.php';
// إلى هذا:
$app = require_once '/home/user/feedbackpulse/bootstrap/app.php';

تحذير: يتطلب الخيار ج تحديث المسارات بعد كل تحديث. استخدم الخيار أ أو ب إن أمكن.


Laragon (تطوير محلي على Windows)

يجعل Laragon هذا سهلاً للغاية:

  1. ضع مجلد feedbackpulse-saas في C:\laragon\www\
  2. ينشئ Laragon تلقائيًا مضيفًا افتراضيًا: feedbackpulse-saas.test
  3. زر http://feedbackpulse-saas.test في متصفحك
  4. يشير Laragon إلى public/ تلقائيًا!

المضيف الافتراضي التلقائي لـ Laragon: ينشئ Laragon مضيفات افتراضية لكل مجلد في www/. يُضبط جذر المستند تلقائيًا على public/ إذا كان هذا المجلد موجودًا.


التحقق من إعداد Apache

# اختبار صحة الإعداد
sudo apachectl configtest

# التحقق من تفعيل mod_rewrite
apache2ctl -M | grep rewrite

# التحقق من تفعيل الموقع
ls /etc/apache2/sites-enabled/

# إعادة تشغيل Apache
sudo systemctl restart apache2

زر https://yourdomain.com — يجب أن ترى صفحة الهبوط أو المثبّت لـ FeedbackPulse.


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