اذهب إلى المحتوى

السؤال

نشر

لدي تطبيق لارافيل ضمن حاوية باستخدام docker. والتطبيق يقوم باستخدام Laravel Websockets، كيف يمكن تشغيل websockets أوتوماتيكياً عند تشغيل الحافظة في docker؟

فعند القيام باستخدام المنفذ الافتراضي ضمن الحاوية لا يتم الاتصال. هذا هو كود التعريف الحالي في ملف supervisord-app.conf:

[program:websockets]
command=/usr/bin/php /var/www/html/websocket-service/artisan websockets:serve
numprocs=1
autostart=true
autorestart=true
user=www-data-new

 

Recommended Posts

  • 0
نشر

أولاً يجب عليك التأكد من استخدام نفس المنفذ الذي يتم استعماله في websockets ضمن الحزمة، ووضعه في ملف dokcer-compose. علماً بأن المنفذ الافتراضي في حال لم تقم بتغييره هو 6001.

ثم يمكنك فصّل الخصائص عن بعضها لحاويتين منفصلتين، بحيث تقوم الحاوية الأولى بتشغيل تطبيق لارافيل والحاوية الأخرى تقوم بالاتصال مع websockets على الشكل التالي:

ملف الحاوية الأولى app.dockerfile

FROM php:7-cli-alpine

RUN apk --update add wget \
  curl \
  git \
  grep \
  build-base \
  libmemcached-dev \
  libmcrypt-dev \
  libxml2-dev \
  imagemagick-dev \
  pcre-dev \
  libtool \
  make \
  autoconf \
  g++ \
  cyrus-sasl-dev \
  libgsasl-dev

RUN docker-php-ext-install mysqli pdo pdo_mysql tokenizer xml
RUN pecl channel-update pecl.php.net \
    && pecl install memcached \
    && pecl install imagick \
    && pecl install mcrypt-1.0.3 \
    && docker-php-ext-enable memcached \
    && docker-php-ext-enable imagick \
    && docker-php-ext-enable mcrypt

RUN rm /var/cache/apk/* && \
    mkdir -p /var/www

ENTRYPOINT ["/usr/bin/php", "/var/www/html/websocket-service/artisan", "websockets:serve"]

ملف web.dockerfile:

FROM php:7-fpm-alpine

RUN apk --update add wget \
  curl \
  git \
  grep \
  build-base \
  libmemcached-dev \
  libmcrypt-dev \
  libxml2-dev \
  imagemagick-dev \
  pcre-dev \
  libtool \
  make \
  autoconf \
  g++ \
  cyrus-sasl-dev \
  libgsasl-dev

RUN docker-php-ext-install mysqli pdo pdo_mysql tokenizer xml
RUN pecl channel-update pecl.php.net \
    && pecl install memcached \
    && pecl install imagick \
    && pecl install mcrypt-1.0.3 \
    && docker-php-ext-enable memcached \
    && docker-php-ext-enable imagick \
    && docker-php-ext-enable mcrypt

RUN rm /var/cache/apk/* && \
    mkdir -p /var/www

ولجعل المنفذ 6001 مرئياً خارج الحاوية، نقوم بتغيير التوجيهات لتصبح كالتالي:

app:
   build:
      context: ./
      dockerfile: app.dockerfile
    working_dir: /var/www/html
    volumes:
      - ./:/var/www/html
    ports:
      - "6001:6001"
    environment:
      - DB_PORT=${DB_PORT}
      - DB_HOST=${DB_HOST}

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...