إعداد 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
- ارفع جميع الملفات إلى
public_html/feedbackpulse/ - في cPanel ← Domains أو Addon Domains، اضبط جذر المستند على
public_html/feedbackpulse/public - إذا لم تستطع تغيير جذر المستند، استخدم هذه الحيلة:
أنشئ .htaccess في جذر public_html/:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ feedbackpulse/public/$1 [L]
</IfModule>
الخيار ب: التثبيت في نطاق فرعي
- أنشئ نطاقًا فرعيًا في cPanel (مثل
feedback.yourdomain.com) - اضبط جذر المستند على مجلد
public/ - ارفع جميع ملفات FeedbackPulse إلى مجلد النطاق الفرعي
الخيار ج: نقل محتويات public/
كخيار أخير على الاستضافة المقيّدة:
- ارفع جميع الملفات إلى مجلد خارج
public_html/(مثل/home/user/feedbackpulse/) - انسخ محتويات
public/إلىpublic_html/ - عدّل
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 هذا سهلاً للغاية:
- ضع مجلد
feedbackpulse-saasفيC:\laragon\www\ - ينشئ Laragon تلقائيًا مضيفًا افتراضيًا:
feedbackpulse-saas.test - زر
http://feedbackpulse-saas.testفي متصفحك - يشير 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.
الخطوات التالية
- شهادات SSL — إعداد HTTPS
- إعداد DNS الشامل — تفعيل النطاقات الفرعية للمستأجرين
- جولة مثبّت الويب — تشغيل المثبّت