تثبيت وإعداد Laravel باستخدام Docker Compose على Ubuntu 22.04 - دليل شامل
في هذا الدليل خطوة بخطوة، تعلم كيفية تثبيت وتكوين Laravel باستخدام Docker Compose على Ubuntu 22.04 وإنشاء بيئة إنتاج آمنة ومحسّنة.

تثبيت وإعداد Laravel باستخدام Docker Compose على Ubuntu 22.04 - دليل شامل

ستوضح لك هذه المقالة كيفية تثبيت ونشر تطبيق Laravel على نظام Ubuntu 22.04 باستخدام Docker Compose. من خلال شرح العملية خطوة بخطوة، يمكنك بسهولة إنشاء بيئة إنتاج آمنة ومُحسّنة.
0 الأسهم
0
0
0
0

كيفية تثبيت وإعداد Laravel باستخدام Docker Compose على Ubuntu 22.04؟

في هذا الدليل العملي والتقني، سنرشدك خطوة بخطوة خلال عملية تثبيت وتكوين التطبيق. Laravel استخدام Docker Compose على الخادم أوبونتو 22.04 تهدف هذه المقالة إلى توفير إرشادات قابلة للتكرار للمطورين وفرق DevOps والمديرين التقنيين لإنشاء بيئة إنتاج آمنة وقابلة للتطوير والصيانة.

قائمة التحقق الأولية

قبل البدء، جهّز ما يلي:

  • خادم أوبونتو 22.04 باستخدام صلاحيات الجذر أو مستخدم لديه صلاحيات sudo
  • عامل ميناء (إصدار مستقر) و Docker Compose (أو استخدم إضافة docker compose)
  • المنافذ المفتوحة: 80/443 للويب؛ إذا لزم الأمر 3306 أو 5432 بالنسبة لقاعدة البيانات (ويفضل أن تقتصر على عناوين IP)
  • مساحة تخزين كافية (يوصى باستخدام SSD) وإمكانية الوصول إلى واحد من أكثر من 85 موقعًا عالمي في حالة استخدام الخدمات السحابية
  • اسم النطاق وسجل نظام أسماء النطاقات (DNS) الذي يشير إلى عنوان IP الخاص بالخادم

تثبيت Docker و Docker Compose على Ubuntu 22.04

قم بتشغيل الأوامر التالية على الخادم لتثبيت Docker ومكون docker compose الإضافي:

sudo apt update && sudo apt upgrade -y
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmour -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo usermod -aG docker $USER

ثم قم بتسجيل الخروج ثم تسجيل الدخول مرة أخرى أو مجموعة جديدة من دوكر يستخدم.

للتحقق من التثبيت:

docker --version
docker compose version

هيكل المشروع المقترح

يوصى بتنظيم مجلد المشروع على النحو التالي لتسهيل الصيانة والتطوير:

  • جذر المشروع/
    • عامل ميناء/
      • nginx/default.conf
      • php/Dockerfile
    • src/ — كود Laravel (أو mount)
    • ملف docker-compose.yml
    • .env

ملف Dockerfile الموصى به لـ PHP-FPM (PHP 8.1)

ملف ذو مسار docker/php/Dockerfile أنشئ شيئًا مشابهًا للمثال التالي:

FROM php:8.1-fpm

# Install required tools and extensions
RUN apt-get update && apt-get install -y \
    git zip unzip libpng-dev libjpeg-dev libfreetype6-dev libonig-dev libxml2-dev \
    libzip-dev libpq-dev cron curl supervisor \
  && docker-php-ext-configure gd --with-freetype --with-jpeg \
  && docker-php-ext-install -j$(nproc) gd pdo pdo_mysql pdo_pgsql mbstring xml bcmath zip opcache \
  && pecl install redis && docker-php-ext-enable redis \
  && pecl install xdebug || true \
  && apt-get clean && rm -rf /var/lib/apt/lists/*

# Composer
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer

# Create non-root user
RUN useradd -G www-data,root -u 1000 -d /home/appuser appuser
WORKDIR /var/www/html
USER appuser

مثال على ملف docker-compose.yml

النسخة المقترحة ملف docker-compose.yml لتشغيل التطبيق، وخادم الويب، وقاعدة البيانات، وRedis:

version: "3.8"

services:
  app:
    build:
      context: .
      dockerfile: docker/php/Dockerfile
    image: laravel_app:latest
    container_name: laravel_app
    restart: unless-stopped
    volumes:
      - ./src:/var/www/html
      - ./docker/php/supervisord.conf:/etc/supervisor/conf.d/supervisord.conf
    environment:
      - APP_ENV=production
      - APP_DEBUG=false
    networks:
      - laravel-net

  web:
    image: nginx:alpine
    container_name: laravel_web
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./src:/var/www/html:ro
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
      - ./certs:/etc/letsencrypt
    depends_on:
      - app
    networks:
      - laravel-net

  db:
    image: mysql:8.0
    container_name: laravel_db
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: laravel
      MYSQL_USER: laravel
      MYSQL_PASSWORD: secret
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - laravel-net

  redis:
    image: redis:6-alpine
    container_name: laravel_redis
    restart: unless-stopped
    volumes:
      - redis_data:/data
    networks:
      - laravel-net

volumes:
  db_data:
  redis_data:

networks:
  laravel-net:
    driver: bridge

ملف تكوين Nginx (docker/nginx/default.conf)

مثال على إعدادات Nginx لتوجيه الطلبات إلى PHP-FPM (التطبيق):

server {
    listen 80;
    server_name example.com;

    root /var/www/html/public;
    index index.php index.html;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass app:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }

    location ~ /\.ht {
        deny all;
    }
}

ملحوظة: في البنى التي تحتوي على خادم وكيل عكسي أو خدمات متعددة، يمكنك وضع Nginx في طبقة موازن التحميل أو شبكة توصيل المحتوى (CDN).

إعداد الكود وتثبيت التبعيات

إذا لم يكن لديك مشروع Laravel، يمكنك إنشاء مشروع جديد باستخدام Composer:

composer create-project --prefer-dist laravel/laravel src

ثم بناء وتشغيل الحاويات:

docker compose build
docker compose up -d

لتشغيل أوامر Composer و Artisan داخل حاوية PHP:

docker exec -it laravel_app bash
composer install --no-dev --optimize-autoloader
php artisan key:generate
php artisan migrate --force
php artisan config:cache
php artisan route:cache
exit

إعداد ملف .env لـ Docker

مثال على تكوين ملف .env متوافق مع docker-compose:

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel
DB_PASSWORD=secret

CACHE_DRIVER=redis
REDIS_HOST=redis

APP_URL=https://example.com

بروتوكول SSL و Let's Encrypt - طريقتان سهلتان

هناك طريقتان بسيطتان لتفعيل بروتوكول HTTPS:

  • استخدام Certbot على المضيف: أوقف Nginx مؤقتًا، وضع الشهادة الصادرة في المجلد. ./certs ثم قم بتثبيته على الحاوية.
  • استخدام الحل الآلي: أدوات مثل docker-letsencrypt-nginx-proxy-companion أو مرور إنها مناسبة لإدارة الشهادات الآلية.

مثال سريع باستخدام Certbot:

sudo apt install -y certbot
sudo docker compose down
sudo certbot certonly --standalone -d example.com --non-interactive --agree-tos -m [email protected]
# Copy certificates from /etc/letsencrypt/live/... to ./certs and then:
sudo docker compose up -d

تشغيل الخدمة عند بدء التشغيل والحفاظ عليها

لضمان استمرار عمل الخدمات بعد إعادة التشغيل:

sudo systemctl enable docker

بالإضافة إلى ذلك، في docker-compose من إعادة التشغيل: إلا إذا تم إيقافها تم استخدامه. إذا لزم الأمر، يمكن إنشاء وحدة systemd لـ docker-compose.

نصائح أمنية عملية

  • استخدام مستخدم غير الجذر في حاوية PHP (مستخدم التطبيق (في ملف Dockerfile أعلاه)
  • تقييد الوصول إلى منفذ قاعدة البيانات باستخدام جدار الحماية (UFW):
sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw enable

توصيات أخرى:

  • النسخ الاحتياطي المنتظم لوحدة تخزين قاعدة البيانات (بيانات قاعدة البيانات) وتخزينها خارج الخادم
  • تفعيل بروتوكول HTTPS وHSTS
  • استخدام الأسرار أو خدمات إدارة المفاتيح لتخزين كلمات المرور (أسرار Docker أو خدمات إدارة المفاتيح)
  • استخدم أدوات الأمان مثل Fail2ban وإذا لزم الأمر، مثل جدار الحماية لتطبيقات الويب مود سيكيوريتي
  • استخدم شبكة توصيل المحتوى (CDN) أو خدمة مكافحة هجمات DDoS لحماية حركة البيانات.

تحسين الأداء لبيئات الإنتاج

  • تفعيل OPcache في php.ini:
    opcache.memory_consumption=256
    opcache.validate_timestamps=0
  • إعداد php-fpm (pm = ديناميكي أو عند الطلب) وزيادة max_children وفقًا لذاكرة الخادم
  • استخدام Redis للتخزين المؤقت والجلسات
  • استخدام شبكة توصيل المحتوى (CDN) للملفات الثابتة
  • التوسع الأفقي: تشغيل عدة نسخ من خدمة التطبيق باستخدام موازن تحميل (NGINX أو HAProxy)
  • استخدم عمالاً ومشرفين منفصلين أو خدمات منفصلة للوقت الفعلي وقوائم الانتظار.

عمال الطوابير و Horizon

أضف خدمة منفصلة في docker-compose لتشغيل عمال قائمة الانتظار. مثال:

worker:
  build: ...
  command: php /var/www/html/artisan queue:work --sleep=3 --tries=3
  depends_on: [app, redis]
  restart: unless-stopped

بالنسبة لـ Laravel Horizon، من الأفضل استخدام حاوية مخصصة مع تثبيت PHP و Horizon ووضعها خلف Nginx/authentication.

نصائح متعلقة باختيار الموقع ومركز البيانات

نصائح عملية لاختيار الموقع:

  • للحصول على أقل زمن استجابة، اختر خادمًا في موقع قريب من المستخدمين النهائيين أو الوجهة. مزود الخدمة أكثر من ذلك. 85 موقعًا عالميًا نعم، لقد حدث ذلك.
  • بالنسبة للاعبين أو المتداولين، اختر موقعًا يتميز بزمن استجابة منخفض وشبكة BGP محسّنة.
  • استخدم خوادم مزودة بوحدات معالجة الرسومات (GPU) لمعالجة الذكاء الاصطناعي وعرضه.
  • استخدم الخوادم وشبكات توصيل المحتوى (CDN) المزودة بحماية ضد هجمات DDoS لمقاومة هذه الهجمات.

النسخ الاحتياطية والمراقبة والسجلات

  • سجلات الحاويات مع سجلات Docker يمكن الوصول إليها؛ استخدم ELK أو Prometheus+Grafana للتجميع المركزي.
  • النسخ الاحتياطي اليومي لقاعدة البيانات واختبار الاستعادة الدوري
  • مراقبة موارد وحدة المعالجة المركزية/ذاكرة الوصول العشوائي، وتتبع التطبيقات والأخطاء في التكامل المستمر/التسليم المستمر

تصحيح الأخطاء الشائعة

  • خطأ بوابة غير صالحة 502: تأكد من تشغيل php-fpm في حاوية التطبيق وأن fastcgi_pass مضبوط على العنوان الصحيح (التطبيق: 9000) للإشارة إلى ذلك.
  • مشكلة في الاتصال بقاعدة البيانات: تحقق من متغيرات .env، وشبكة Docker، وسجلات MySQL.
  • أذونات الملفات: في حالة حدوث أخطاء في الأذونات، قم بتعيين ملكية مجلدات التخزين ومجلدات التمهيد/ذاكرة التخزين المؤقت:
sudo chown -R 1000:1000 src/storage src/bootstrap/cache

الخلاصة والتوصية النهائية

يُسهّل استخدام Docker Compose لتشغيل Laravel على Ubuntu 22.04 عملية التطوير والنشر، ويجعلها قابلة للتكرار والتوسع. باتباع هذا الدليل، يمكنك إعداد بيئة إنتاج آمنة وسريعة وسهلة الصيانة. PHP-FPM مع Nginx، MySQL/MariaDB أو PostgreSQL، Redis للتخزين المؤقت وقائمة الانتظار، وإعدادات SSL والمراقبة.

الخدمات ذات الصلة

لتنفيذ هذه البنية بشكل احترافي، يمكنك استخدام الخدمات التالية:

  • أكثر من 85 موقعًا عالميًا لتقليل زمن الاستجابة وتقريب الخادم من المستخدم أو الوجهة
  • خادم الرسومات (GPU) للحوسبة والعرض باستخدام الذكاء الاصطناعي
  • خادم افتراضي خاص للتداول مع زمن استجابة منخفض وشبكة BGP محسّنة
  • خادم افتراضي خاص للألعاب مع زمن استجابة منخفض وحماية من هجمات DDoS
  • خدمات الاستضافة وتسجيل النطاقات، وشبكات توصيل المحتوى (CDN)، وحلول الشبكات وبروتوكول بوابة الحدود (BGP).
  • خادم سحابي عالي الأداء ونسخ احتياطي مُدار

الأسئلة الشائعة

قد يعجبك أيضاً
كيفية تثبيت Cockpit على Ubuntu 24.04

كيفية تثبيت Cockpit على Ubuntu 24.04

Cockpit هي لوحة إدارة خوادم عبر الإنترنت، تتيح مراقبة وإدارة الخدمات والتخزين والسجلات والمستخدمين بطريقة رسومية بسيطة. يتيح استخدام Cockpit على خادم VPS لمسؤولي النظام تنفيذ العديد من مهام إدارة الخادم دون الحاجة إلى سطر أوامر. سنشرح لك أدناه كيفية تثبيت Cockpit وتكوين الأمان والوصول إليه خطوة بخطوة.
إعداد أنواع مختلفة من أنفاق MikroTik إلى MikroTik أو Ubuntu - الميزات والأمان والسرعة

إعداد أنواع مختلفة من أنفاق MikroTik إلى MikroTik أو Ubuntu - الميزات والأمان والسرعة

تُقدّم هذه المقالة دليلاً شاملاً لإعداد أنفاق MikroTik بين أجهزة MikroTik وأنظمة Ubuntu. تستعرض أنواع هذه الأنفاق وتقارن بين مستويات الأمان والأداء، مع تقديم نصائح عملية لتحسين السرعة والأمان. مناسبة لمسؤولي الشبكات والمتداولين واللاعبين.