البرمجة

تثبيت لارافيل على Nginx

تثبيت وضبط تطبيق لارافيل مع خادم Nginx على حزمة LEMP في أوبنتو

تُعتبر بيئة العمل LEMP من أكثر البيئات شيوعًا وفاعلية لتشغيل تطبيقات الويب الحديثة، حيث تضم نظام التشغيل لينكس (Linux)، وخادم الويب Nginx، وقاعدة البيانات MySQL أو MariaDB، و PHP. أما إطار العمل لارافيل فهو أحد أشهر أُطر العمل لتطوير تطبيقات الويب باستخدام PHP، لما يوفره من تنظيم هيكلي متقدم، وميزات متعددة تسهل عملية البرمجة والصيانة. في هذا المقال سنعرض شرحًا تفصيليًا وموسعًا لخطوات تثبيت وضبط تطبيق لارافيل على خادم Nginx يعمل ضمن حزمة LEMP في نظام أوبنتو.


1. متطلبات النظام والتهيئة الأولية

قبل البدء بعملية التثبيت، يجب التأكد من وجود نظام تشغيل أوبنتو (Ubuntu) محدث، ويفضل أن يكون إصدارًا حديثًا مثل 20.04 LTS أو 22.04 LTS لضمان دعم البرمجيات الحديثة.

كما يجب توفر صلاحيات الروت (root) أو استخدام الأمر sudo لإدارة التثبيتات والتعديلات.


2. تثبيت حزمة LEMP (Linux, Nginx, MySQL, PHP)

2.1 تحديث النظام

في البداية، نقوم بتحديث الحزم المثبتة لضمان توافقها مع التحديثات الأخيرة:

bash
sudo apt update sudo apt upgrade -y

2.2 تثبيت Nginx

خادم الويب Nginx هو بديل شائع لأباتشي، معروف بأدائه العالي ومرونته في التعامل مع تطبيقات الويب:

bash
sudo apt install nginx -y

بعد التثبيت، نتحقق من حالة الخدمة:

bash
sudo systemctl status nginx

يجب أن يكون الخادم في حالة تشغيل (active).

2.3 تثبيت MySQL أو MariaDB

قاعدة البيانات ضرورية لتخزين بيانات التطبيق. يمكن استخدام MySQL أو MariaDB، ويفضل في كثير من الحالات MariaDB لأنها مفتوحة المصدر بالكامل ومتوافقة مع MySQL:

bash
sudo apt install mariadb-server mariadb-client -y

بعد التثبيت، ننفذ السكربت الآمن لضبط قواعد البيانات:

bash
sudo mysql_secure_installation

سنتبع الخطوات التي تتضمن تعيين كلمة مرور للمستخدم الجذر، وإزالة المستخدمين المجهولين، وتعطيل تسجيل الدخول عن بُعد، وحذف قاعدة البيانات التجريبية.

2.4 تثبيت PHP ومودولاته

بما أن لارافيل مبني على PHP، يجب تثبيت إصدار PHP حديث (يفضل PHP 8.1 أو 8.2)، مع إضافات ضرورية لتشغيل إطار العمل:

bash
sudo apt install php-fpm php-mysql php-xml php-mbstring php-curl php-zip php-bcmath php-tokenizer php-json php-cli php-common unzip curl -y

3. ضبط PHP-FPM لتكامل أفضل مع Nginx

Nginx يعمل بشكل ممتاز مع PHP عبر PHP-FPM (FastCGI Process Manager)، لذلك نحتاج إلى ضبط إعدادات PHP-FPM.

  • نحرص على تشغيل خدمة PHP-FPM:

bash
sudo systemctl start php8.1-fpm sudo systemctl enable php8.1-fpm

(يختلف رقم الإصدار حسب تثبيت PHP)

  • يمكن ضبط ملف إعداد PHP لتخصيص بعض القيم المهمة مثل حجم رفع الملفات والمهلة الزمنية:

bash
sudo nano /etc/php/8.1/fpm/php.ini

تعديل القيم التالية (أو حسب الحاجة):

ini
upload_max_filesize = 100M post_max_size = 100M max_execution_time = 300 memory_limit = 512M

بعد التعديلات، نعيد تشغيل خدمة PHP-FPM:

bash
sudo systemctl restart php8.1-fpm

4. إعداد خادم Nginx لاستضافة تطبيق لارافيل

4.1 إنشاء مجلد المشروع

يفضل أن يكون مشروع لارافيل داخل مجلد /var/www:

bash
sudo mkdir -p /var/www/laravelapp sudo chown -R $USER:$USER /var/www/laravelapp sudo chmod -R 755 /var/www/laravelapp

4.2 تثبيت Composer (مدير الحزم الخاص بـ PHP)

لارافيل يعتمد على Composer لإدارة الحزم. لتثبيته:

bash
curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer

بعد ذلك، نتحقق من تثبيت Composer:

bash
composer --version

4.3 تثبيت إطار لارافيل

داخل مجلد المشروع، ننشئ تطبيق لارافيل جديد:

bash
cd /var/www composer create-project --prefer-dist laravel/laravel laravelapp

4.4 ضبط أذونات المجلدات

لارافيل يحتاج إلى أذونات معينة على مجلدي التخزين (storage) والتخزين المؤقت (bootstrap/cache) ليتمكن من كتابة الملفات:

bash
sudo chown -R www-data:www-data /var/www/laravelapp/storage /var/www/laravelapp/bootstrap/cache sudo chmod -R 775 /var/www/laravelapp/storage /var/www/laravelapp/bootstrap/cache

4.5 إعداد ملف الموقع في Nginx

ننتقل إلى إعداد ملف الموقع الخاص بلارافيل داخل Nginx:

bash
sudo nano /etc/nginx/sites-available/laravelapp

نضع فيه الإعداد التالي:

nginx
server { listen 80; server_name your_domain.com; # ضع هنا اسم الدومين أو IP السيرفر root /var/www/laravelapp/public; index index.php index.html index.htm; access_log /var/log/nginx/laravelapp_access.log; error_log /var/log/nginx/laravelapp_error.log; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.1-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } client_max_body_size 100M; }
  • server_name يجب أن يستبدل باسم النطاق الخاص بك أو الـ IP.

  • مسار الـ fastcgi_pass قد يختلف حسب إصدار PHP المثبت.


4.6 تفعيل ملف الموقع وإعادة تشغيل Nginx

نقوم بتمكين الموقع:

bash
sudo ln -s /etc/nginx/sites-available/laravelapp /etc/nginx/sites-enabled/

نتحقق من صحة إعدادات Nginx:

bash
sudo nginx -t

إذا لم توجد أخطاء، نعيد تشغيل الخدمة:

bash
sudo systemctl reload nginx

5. ضبط إعدادات قاعدة البيانات في لارافيل

  • ندخل إلى مجلد المشروع:

bash
cd /var/www/laravelapp
  • نفتح ملف البيئة .env لتعديل إعدادات الاتصال بقاعدة البيانات:

bash
nano .env
  • نعدل القيم التالية حسب إعدادات قاعدة البيانات التي أنشأناها:

ini
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel_db DB_USERNAME=laravel_user DB_PASSWORD=your_password

بعد ذلك ننشئ قاعدة البيانات والمستخدم في MySQL أو MariaDB:

sql
CREATE DATABASE laravel_db; CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON laravel_db.* TO 'laravel_user'@'localhost'; FLUSH PRIVILEGES;

6. تشغيل المهاجرات (Migrations) والبذور (Seeders)

لارافيل يستخدم المهاجرات لإدارة هيكل قواعد البيانات برمجياً، لذلك بعد ضبط الاتصال:

bash
php artisan migrate

إذا كان هناك بيانات أولية (Seeds):

bash
php artisan db:seed

7. ضبط الصلاحيات والملفات النهائية

لضمان عمل لارافيل بسلاسة خاصة في بيئة الإنتاج، نعيد ضبط الأذونات لبعض المجلدات:

bash
sudo chown -R www-data:www-data /var/www/laravelapp sudo chmod -R 775 /var/www/laravelapp/storage sudo chmod -R 775 /var/www/laravelapp/bootstrap/cache

8. تفعيل التخزين المؤقت (Caching) لتحسين الأداء

لارافيل يدعم العديد من آليات التخزين المؤقت لتحسين الأداء:

  • لتفعيل التخزين المؤقت للتهيئة:

bash
php artisan config:cache
  • لتفعيل التخزين المؤقت للطرق:

bash
php artisan route:cache
  • لتفعيل التخزين المؤقت للواجهات:

bash
php artisan view:cache

9. ضبط إعدادات الجدار الناري (Firewall)

إذا كان لديك جدار ناري مثل UFW، يجب السماح لحركة المرور على المنفذ 80 و443 (إذا كنت تستخدم HTTPS):

bash
sudo ufw allow 'Nginx Full' sudo ufw enable

10. إضافة شهادة SSL (اختياري ولكن موصى به)

لتأمين الموقع، من الضروري إضافة شهادة SSL. يمكن الحصول عليها مجانًا من Let’s Encrypt.

10.1 تثبيت Certbot

bash
sudo apt install certbot python3-certbot-nginx -y

10.2 طلب الشهادة وضبطها تلقائيًا

bash
sudo certbot --nginx -d your_domain.com -d www.your_domain.com

سيقوم Certbot بضبط إعدادات Nginx تلقائيًا لتفعيل HTTPS.


11. نصائح تحسين الأداء والأمان

  • استخدام Redis أو Memcached لتخزين الكاش بدلاً من النظام الافتراضي في الملفات.

  • تفعيل OpCache في PHP لتسريع تنفيذ السكربتات.

  • تحديث النظام والحزم بشكل دوري لتجنب الثغرات الأمنية.

  • تأمين صلاحيات الملفات وعدم منح صلاحيات كتابة عامة غير ضرورية.

  • استخدام ملفات .env محمية وعدم رفعها إلى مستودعات عامة.

  • تفعيل جدار ناري وتقييد الوصول للبورتات غير المستخدمة.

  • النسخ الاحتياطي الدوري للبيانات خاصة قواعد البيانات.


جدول توضيحي لبعض المسارات والمهام الأساسية

العنصر الوصف الأمر / المسار
مجلد المشروع مكان وجود ملفات لارافيل /var/www/laravelapp
ملف إعداد Nginx إعدادات الموقع داخل خادم Nginx /etc/nginx/sites-available/laravelapp
ملف البيئة ضبط إعدادات البيئة مثل قاعدة البيانات /var/www/laravelapp/.env
صلاحيات مجلد التخزين يجب أن يكون قابل للكتابة من قبل www-data /var/www/laravelapp/storage
إعادة تشغيل Nginx لتطبيق التغييرات في إعدادات الخادم sudo systemctl reload nginx
تنفيذ المهاجرات لبناء جداول قاعدة البيانات حسب تصميم لارافيل php artisan migrate
تفعيل التخزين المؤقت لتحسين الأداء في بيئة الإنتاج php artisan config:cache

خاتمة

تثبيت وضبط تطبيق لارافيل على خادم Nginx ضمن حزمة LEMP في أوبنتو يتطلب خطوات مدروسة لضمان عمل التطبيق بكفاءة وأمان. يبدأ ذلك من تجهيز النظام وتثبيت المكونات الأساسية مثل Nginx، وقاعدة البيانات، وPHP، مرورًا بإعدادات PHP-FPM، وضبط خادم Nginx لاستضافة التطبيق، ووصولًا إلى ضبط صلاحيات المجلدات، وتحديث إعدادات لارافيل، وتحسين أداء الخادم.

اتباع الخطوات السابقة يضمن بيئة تشغيل مستقرة وقابلة للتطوير، مع الحفاظ على الأمن والأداء المناسبين، مما يجعل مشروعك القائم على لارافيل قادرًا على خدمة المستخدمين بكفاءة عالية ضمن بيئة خادم حديثة ومرنة.