Сервер оперативной перезагрузки (Gulp + BrowserSync) для файлов php не работает внутри контейнера докеровPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Сервер оперативной перезагрузки (Gulp + BrowserSync) для файлов php не работает внутри контейнера докеров

Сообщение Anonymous »

У меня есть полностью функционирующий сервер перезагрузки в реальном времени для моих PHP-проектов, использующий Gulp и BrowserSync:
gulpfile.js

Код: Выделить всё

const { watch, series } = require('gulp');
const browserSync = require('browser-sync');
const connect = require("gulp-connect-php");

function connectPHP (cb) {
connect.server({
base: "/public",
hostname: "localhost",
port: 4000
});

cb()
}

function serve (cb) {
browserSync.init({
proxy: "http://localhost:4000"
});

watch("*.html").on("change", browserSync.reload)
watch("*.php").on("change", browserSync.reload)
};

exports.default = series(connectPHP, serve);
Это отлично работает на локальном хосте, но теперь я хочу закрепить его, потому что хочу повторно использовать этот небольшой проект в сочетании с любым PHP-проектом, над которым я работаю в данный момент.
Это мой Dockerfile:

Код: Выделить всё

FROM node:20-alpine

WORKDIR /app

COPY . .

RUN mkdir public
RUN npm install gulp-cli -g
RUN npm install

VOLUME /public

CMD [ "gulp" ]

EXPOSE 3000
EXPOSE 3001
EXPOSE 4000
И это соответствующая часть моего docker-compose.yml для этого сервиса:

Код: Выделить всё

sync:
depends_on:
- db
ports:
- 3000:3000 # BrowserSync main server
- 3001:3001 # BrowserSync control panel
- 4000:4000 # gulp-connect-php server
volumes:
- .:/app/public
Однако, когда я запускаю Docker-контейнер и отправляю запрос на скручивание к http://localhost:3000, основному серверу BrowserSync, я получаю :

Код: Выделить всё

* Host localhost:3000 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
*   Trying [::1]:3000...
* Connected to localhost (::1) port 3000
> GET / HTTP/1.1
> Host: localhost:3000
> User-Agent: curl/8.9.0
> Accept: */*
>
* Request completely sent off
И завитки просто зависают.
Когда я запрашиваю http://localhost:3001, Панель управления BrowserSync< /em>, я получаю реальный ответ (я могу получить доступ к панели управления, если открою ее в браузере), поэтому я думаю, что проблема не в BrowserSync:

Код: Выделить всё

* Host localhost:3001 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
*   Trying [::1]:3001...
* Connected to localhost (::1) port 3001
> GET / HTTP/1.1
> Host: localhost:3001
> User-Agent: curl/8.9.0
> Accept: */*
>
* Request completely sent off
< HTTP/1.1 200 OK
< Content-Type: text/html
< Content-Encoding: gzip
< Date: Thu, 25 Jul 2024 22:51:34 GMT
< Connection: keep-alive
< Keep-Alive: timeout=5
< Transfer-Encoding: chunked
<
Warning: Binary output can mess up your terminal. Use "--output -" to tell curl to output it to your terminal
Warning: anyway, or consider "--output " to save to a file.
* client returned ERROR on write of 16384 bytes
* Failed reading the chunked-encoded stream
* closing connection #0
И, наконец, когда я делаю запрос к http://localhost:4000, серверу gulp-connect-php, я получаю:< /p>

Код: Выделить всё

* Host localhost:4000 was resolved.
* IPv6: ::1
* IPv4: 127.0.0.1
*   Trying [::1]:4000...
* Connected to localhost (::1) port 4000
> GET / HTTP/1.1
> Host: localhost:4000
> User-Agent: curl/8.9.0
> Accept: */*
>
* Request completely sent off
* Recv failure: Connection reset by peer
* closing connection #0
curl: (56) Recv failure: Connection reset by peer
Погуглив, я узнал, что не рекомендуется запускать два сервера в одном контейнере, хотя это возможно. Однако для проекта этот небольшой раздельный сервер gulp-connect-php и сервер BrowserSync в разных контейнерах, я думаю, излишен.
Итак, как я могу заставить это работать только с одним контейнером ?
PD: Я знаю, что для живой перезагрузки файлов php вам на самом деле не нужен gulp-connect-php, и на самом деле, если я удалю этот пакет и просто использую BrowserSync, тогда вся эта проблема исчезает, но дело в том, что BrowserSync требует, чтобы в файле присутствовал тег body, чтобы иметь возможность перезагрузить его, и я не хочу заключать все свои php-файлы в body теги.

Подробнее здесь: https://stackoverflow.com/questions/787 ... ide-docker
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»