الخطوات
-
1
تحديث الخادم وتثبيت المتطلبات
ابدأ بنظام نظيف ومحدث بالكامل. ثم أضف مستودع
ondrej/phpللحصول على PHP 8.2 أو أحدث، ثم ثبّت Apache وMariaDB وجميع امتدادات PHP التي يحتاجها Laravel.bashapt update && apt upgrade -y add-apt-repository ppa:ondrej/php -y apt update apt install -y apache2 mariadb-server \ php8.2 php8.2-cli php8.2-fpm \ php8.2-mysql php8.2-mbstring php8.2-xml \ php8.2-curl php8.2-zip php8.2-bcmath \ php8.2-intl php8.2-gd php8.2-tokenizer \ libapache2-mod-php8.2 unzip git curl a2enmod rewrite php8.2 systemctl restart apache2 -
2
تثبيت Composer
Composer غير متوفر بإصدار حديث كافٍ في مدير حزم Ubuntu. نزّله مباشرةً من المثبّت الرسمي وانقله إلى مسار عام.
bashcurl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer chmod +x /usr/local/bin/composer composer --version -
3
إنشاء قاعدة البيانات والمستخدم
سجّل الدخول إلى MariaDB وأنشئ قاعدة بيانات ومستخدمًا مخصصًا للتطبيق. لا تستخدم مستخدم root في ملف
.envأبدًا.sqlmysql -u root CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'myapp'@'localhost' IDENTIFIED BY 'StrongPassword123!'; GRANT ALL PRIVILEGES ON myapp.* TO 'myapp'@'localhost'; FLUSH PRIVILEGES; EXIT; -
4
استنساخ المستودع
ضع المشروع تحت
/var/www/. استنسخ المستودع هناك، ثم اجعل Apache مالكًا للملفات حتى يتمكن خادم الويب من القراءة والكتابة. جميع عمليات النشر المستقبلية ستستخدمgit pullمن هذا المجلد — لا تنسخ الملفات يدويًا أبدًا.bashcd /var/www git clone https://github.com/your-username/your-repo.git myapp.com chown -R www-data:www-data /var/www/myapp.com -
5
ضبط ملف .env
انسخ
.env.exampleإلى.envوأدخل القيم الحقيقية. ملف.envلا يُضاف إلى Git أبدًا — يعيش فقط على الخادم. أنشئAPP_KEYجديدًا بعد النسخ.bashcd /var/www/myapp.com cp .env.example .env nano .env # Set APP_ENV=production, APP_DEBUG=false, APP_URL # Set DB_DATABASE, DB_USERNAME, DB_PASSWORD # Set MAIL_* if using email php artisan key:generate -
6
تثبيت المتطلبات وتشغيل الترحيلات
ثبّت متطلبات الإنتاج فقط باستخدام خيار
--no-dev، ثم شغّل الترحيلات. أعِد ضبط الصلاحيات بعد أن يكتب Composer إلى مجلد vendor.bashcd /var/www/myapp.com composer install --no-dev --optimize-autoloader php artisan migrate --force php artisan db:seed --force # only if you have seeders to run in production chown -R www-data:www-data /var/www/myapp.com chmod -R 755 /var/www/myapp.com chmod -R 775 /var/www/myapp.com/storage chmod -R 775 /var/www/myapp.com/bootstrap/cache -
7
إنشاء ملف الـ Virtual Host في Apache
أنشئ ملف إعداد vhost يوجّه Apache نحو مجلد
public/كـ document root. يتيحAllowOverride Allلملف.htaccessفي Laravel التعامل مع إعادة كتابة الروابط.bashnano /etc/apache2/sites-available/myapp.com.conf -
8
كتابة إعداد الـ Virtual Host
الصق التالي في ملف الإعداد. استبدل
myapp.comبنطاقك الفعلي. يجب أن يشيرDocumentRootإلىpublic/لا إلى جذر المشروع — هذا أكثر خطأ شائع في الإعداد.nginx<VirtualHost *:80> ServerName myapp.com ServerAlias www.myapp.com DocumentRoot /var/www/myapp.com/public <Directory /var/www/myapp.com/public> AllowOverride All Require all granted Options -Indexes +FollowSymLinks </Directory> ErrorLog ${APACHE_LOG_DIR}/myapp-error.log CustomLog ${APACHE_LOG_DIR}/myapp-access.log combined </VirtualHost> -
9
تفعيل الموقع وتخزين إعدادات Laravel مؤقتًا
فعّل الـ vhost، عطّل الموقع الافتراضي، أعِد تشغيل Apache، ثم شغّل أوامر التحسين في Laravel لتخزين الإعدادات والمسارات والقوالب مؤقتًا. هذا يُسرّع كل طلب في الإنتاج.
عند كل نشر لاحق:
git pullثمcomposer install --no-dev --optimize-autoloaderإذا تغيّرcomposer.json، ثمphp artisan migrate --forceإذا أُضيفت ترحيلات جديدة، ثمphp artisan optimize && php artisan view:cache.basha2ensite myapp.com.conf a2dissite 000-default.conf apache2ctl configtest # should say "Syntax OK" systemctl reload apache2 php artisan storage:link php artisan optimize php artisan view:cache
نصائح ومحاذير
- اضبط <code>APP_DEBUG=false</code> في الإنتاج — stack trace مرئي يكشف مسارات ملفاتك وقيم إعداداتك لأي شخص يستدعي خطأً.
- شغّل <code>php artisan config:clear</code> قبل <code>php artisan optimize</code> في كل مرة تغيّر فيها قيم .env، وإلا ستظل القيم القديمة المخزنة مؤقتًا هي المُستخدمة.
- أنشئ سكريبت نشر أو اختصار حتى تكون كل عملية نشر أمرًا واحدًا — يمنع نسيان خطوات مثل <code>chown</code> أو <code>view:cache</code>.
- ثبّت Certbot (<code>apt install certbot python3-certbot-apache</code>) للحصول على شهادة SSL مجانية من Let's Encrypt؛ تضبط إعداد Apache تلقائيًا.
- أنشئ مستخدم نشر بصلاحيات محدودة بدلًا من تشغيل كل شيء كـ root على خادم مشترك.
خاتمة
أصبح لديك الآن نشر Laravel على Apache وMySQL مع سير عمل تحديث نظيف قائم على Git. الخطوة التالية هي إضافة SSL عبر Certbot وإعداد معالج طابور باستخدام Supervisor حتى تستمر المهام في العمل بعد إعادة تشغيل الخادم.