#laravel #docker #websocket
Вопрос:
Это мой первый раз, когда я работаю с докером. У меня есть сайт laravel websocket (php laravel postgresql), который нужно поместить в контейнер. Если я просто выполняю команды (без докера):
php ремесленник служит
веб-сайты php artisan: служите
тогда он успешно работает:
- Панель управления веб-сайтами http://127.0.0.1:8000/laravel-websockets
- Можно отправить почтовое сообщение на http://127.0.0.1:8000/telephonyCall для сервера websocket.
- Клиент прослушивает сервер сокетов на порту 6001 и успешно принимает отправленные сообщения.
Я выполнил установку докера, следуя инструкции https://www.twilio.com/blog/get-started-docker-laravel с незначительными изменениями (добавлен порт 6001 в docker-compose.yml).
Теперь у меня есть в наличии контейнер:
- Страница Apache по умолчанию http://192.168.1.61/
- страница laravel по умолчанию http://192.168.1.61:8080/
- Если я запускаю php artisan websockets: serve, я вижу в консоли, что сервер сокетов отвечает на клиентские подключения на порту 6001, но не отвечает на отправку сообщений.
Недоступный:
- панель управления веб-сайтами http://192.168.1.61:8080/laravel-websockets
- Отправка почтовых сообщений http://192.168.1.61:8080/telephonyCall для сервера websocket
Пожалуйста, скажите мне, что я сделал не так?
Структура каталогов:
docker
apache
¬ default.conf
databases
php
¬ Dockerfile
src
¬ (here is a copy of the working site)
¬ docker-compose.yml
по умолчанию.conf
<VirtualHost *:80>
ServerName WebSocketServer
DocumentRoot /var/www/WebSocketServer/public
<Directory /var/www/WebSocketServer>
AllowOverride All
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Докерфайл
FROM php:8.0-apache
RUN apt update amp;amp; apt install -y zlib1g-dev g libicu-dev zip libzip-dev zip libpq-dev
amp;amp; docker-php-ext-install intl opcache pdo pgsql pdo_pgsql
amp;amp; pecl install apcu
amp;amp; docker-php-ext-enable apcu
amp;amp; docker-php-ext-configure zip
amp;amp; docker-php-ext-install zip
WORKDIR /var/www/WebSocketServer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
докер-compose.yml
version: '3.8'
services:
database:
image: postgres
container_name: database
restart: unless-stopped
environment:
POSTGRES_PASSWORD: 1111111
POSTGRES_DB: websocket
volumes:
- ./postgres-data:/var/lib/postgresql/data
ports:
- '5432:5432'
php-apache:
container_name: php-apache
build:
context: ./php
ports:
- '8080:80'
- '8000:8000'
- '6001:6001'
volumes:
- ./src:/var/www/WebSocketServer
- ./apache/default.conf:/etc/apache2/sites-enabled/000-default.conf
depends_on:
- database
Ответ №1:
Если вы выполните команду
php artisan serve
затем он запускается на локальном хосте. Если
php artisan serve --host = 192.168.1.61
он будет доступен извне (здесь 192.168.1.61-ip-адрес машины, на которой мы работаем). Но контейнер использует свою собственную сеть, и 192.168.1.61 для него находится «вне сети», поэтому мастер не может запуститься.
Чтобы сделать страницу http://192.168.1.61:8080/laravel-websockets доступно, вам нужно работать вот так:
php artisan serve --host = 0.0.0.0