docker Webpack开发服务器和DDEV(无可用的后端站点)

r6hnlfcb  于 2023-03-22  发布在  Docker
关注(0)|答案(1)|浏览(163)

我遵循了这个问题的公认答案:Accessing webpack dev server output with specific port in ddev / docker container
正在尝试访问
http://localhost:8080结果为503: No ddev back-end site available.
http://<project>.ddev.site:8080结果为502: Unresponsive/broken ddev back-end site.
根据其他问题的答案,我添加了一个docker-compose.devserver.yaml文件,内容如下:

version: "3.6"
services:
  web:
    expose:
      - 8080
    environment:
    - HTTP_EXPOSE=${DDEV_ROUTER_HTTP_PORT}:80,${DDEV_MAILHOG_PORT}:8025,8080:8080
    - HTTPS_EXPOSE=${DDEV_ROUTER_HTTPS_PORT}:80,${DDEV_MAILHOG_HTTPS_PORT}:8025,8081:8080

开发服务器选项如下:

const devServerOptions = {
    clientLogLevel: 'info', // 'debug',
    contentBase: [
        path.join(__dirname, webPath),
        path.join(__dirname, templatesPath),
    ],
    compress: true,
    disableHostCheck: true,
    historyApiFallback: true,
    host: devServerHost,
    hot: true,
    hotOnly: false,
    headers: {
        'Access-Control-Allow-Origin': '*',
    },
    https: devServerIsHttps
        ? {
              key: fs.readFileSync(process.env.DEVSERVER_KEY),
              cert: fs.readFileSync(process.env.DEVSERVER_CRT),
              ca: fs.readFileSync(process.env.DEVSERVER_CA),
          }
        : false,
    inline: true,
    overlay: true,
    port: devServerPort,
    public: publicPath,
    publicPath: '',
    watchContentBase: true,
    watchOptions: {
        poll: !!parseInt(process.env.DEVSERVER_POLL || 0),
        ignored: /node_modules/,
    },
}

它正在提取以下.env变量:

DEVSERVER_ENABLED=true
DEVSERVER_HOST=localhost
DEVSERVER_PORT=8080
DEVSERVER_HTTPS=false

例如,当我在http://localhost:8080/dist/styles/main.min.css访问http://<project.ddev.site时,试图加载资产,并导致503错误,其中提到没有后端ddev站点可用。
如果我删除上面提到的docker-compose文件,而是添加到.ddev/config.yaml文件:

web_extra_exposed_ports:
  - name: devserver
    container_port: 8080
    http_port: 8080
    https_port: 8081

在没有运行yarn devcross-env NODE_ENV=development webpack serve --stats=minimal --progress)命令然后运行ddev exec curl localhost:8080的情况下,我收到了connection refused
在运行yarn dev之后,我收到了我的应用程序主入口点的index.html文件。(这是一个Craft CMS应用程序,所以它会在模板中提取index.html。也会提取Twig注解,所以它会输出实际的文件内容)

jdzmm42g

jdzmm42g1#

我解决这个问题的方法可能不适用于所有人。
我发现的一件事是,我必须通过DDEV URL(即<project-name>.ddev.site而不是localhost)访问开发服务器。
接下来,我遇到了端口问题。其他人可能会有所不同,但我首先尝试了端口1339,8080,8000,没有运气。直到我使用9000,我才有运气。
对于DDEV中的暴露端口,我不需要创建新的docker-compose文件,而是使用.ddev文件夹中config.yaml文件中的web_extra_exposed_ports选项。

web_extra_exposed_ports:
  - name: devserver
    container_port: 9000
    http_port: 9000
    https_port: 9001

注意:即使你不打算使用https,你也需要https_port
最后,在我的package.json中,创建命令以运行webpack dev服务器,我需要添加选项--host=0.0.0.0
当然,在导航到您的网站之前,请确保启动webpack dev服务器。

相关问题