Laravel + Inertia SSR 如何更改默认端口?错误:监听 EADDRINUSE:地址已在使用中 :::13714

2023-12-25

所以我有一个生产站点和一个暂存站点。两者都在 Laravel 上,并使用服务器端渲染 (SSR) + Node.js。服务器是 Ubuntu 22.04.1 LTS。我使用 PM2 作为 Node.js 的生产流程管理器。当我跑步时pm2 start /var/www/example.com/public/build/server/ssr.mjs --name ssr_example --watch有用:

┌─────┬──────────────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id  │ name                     │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
├─────┼──────────────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0   │ ssr_example              │ default     │ N/A     │ fork    │ 168259   │ 50s    │ 0    │ online    │ 0%       │ 65.9mb   │ user     │ enabled  │
└─────┴──────────────────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

但是当我想对网站的临时版本做同样的事情时pm2 start /var/www/staging.example.com/public/build/server/ssr.mjs --name ssr_staging_example --watch我懂了:

┌─────┬──────────────────────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id  │ name                     │ namespace   │ version │ mode    │ pid      │ uptime │ ↺    │ status    │ cpu      │ mem      │ user     │ watching │
├─────┼──────────────────────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 0   │ ssr_example              │ default     │ N/A     │ fork    │ 168259   │ 59s    │ 0    │ online    │ 0%       │ 65.1mb   │ user     │ enabled  │
│ 1   │ ssr_staging_example      │ default     │ N/A     │ fork    │ 0        │ 0      │ 15   │ errored   │ 0%       │ 0b       │ user     │ enabled  │
└─────┴──────────────────────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘

当我查看日志文件时pm2 logs表明:

1|ssr_stag |     at Server.setupListenHandle [as _listen2] (node:net:1380:16)
1|ssr_stag |     at listenInCluster (node:net:1428:12)
1|ssr_stag |     at Server.listen (node:net:1516:7)
1|ssr_stag |     at Object._default [as default] (/var/www/staging.example.com/node_modules/@inertiajs/server/lib/index.js:52:6)
1|ssr_stag |     at file:///var/www/staging.example.com/public/build/server/ssr.mjs:617:21
1|ssr_stag |     at ModuleJob.run (node:internal/modules/esm/module_job:198:25)
1|ssr_stag |     at async Promise.all (index 0)
1|ssr_stag |     at async ESMLoader.import (node:internal/modules/esm/loader:409:24)
1|ssr_witt |     at async importModuleDynamicallyWrapper (node:internal/vm/module:435:15) {
1|ssr_stag |   code: 'EADDRINUSE',
1|ssr_stag |   errno: -98,
1|ssr_stag |   syscall: 'listen',
1|ssr_stag |   address: '::',
1|ssr_stag |   port: 13714
1|ssr_stag | }
PM2        | App [ssr_staging_example:1] exited with code [1] via signal [SIGINT]
PM2        | Script /var/www/staging.example.com/public/build/server/ssr.mjs had too many unstable restarts (16). Stopped. "errored"

我知道这是因为两者都使用相同的端口所以我去了config/inertia.php并将默认端口 13714 更改为 13715

<?php

return [

    /*
    |--------------------------------------------------------------------------
    | Server Side Rendering
    |--------------------------------------------------------------------------
    |
    | These options configures if and how Inertia uses Server Side Rendering
    | to pre-render the initial visits made to your application's pages.
    |
    | Do note that enabling these options will NOT automatically make SSR work,
    | as a separate rendering service needs to be available. To learn more,
    | please visit https://inertiajs.com/server-side-rendering
    |
    */

    'ssr' => [

        'enabled' => true,

        'url' => 'http://127.0.0.1:13715/render',

    ],
...
...
...

但它仍然不起作用,而且我不断收到相同的错误。我应该在另一个(配置)文件中的其他地方更改端口吗?还是我做错了?还有另一种方法吗?

提前致谢!


我今天遇到了同样的问题,我找到了解决方案。

基本上,您必须更改 SSR 服务器的端口(在运行时配置)npm run build) 和 Laravel 运行时。您在配置文件中执行了后者。为了执行前者,请将端口作为第二个参数传递给createServer() in the ssr.js文件。例如,将 8080 设置为端口:

createServer(page =>
  createInertiaApp({
    // Config here
  }),
  8080
)

更改后,您必须运行npm run build使SSR服务器实际上在8080上启动。还要确保端口config/inertia.php火柴。

我写了一个完整的解释here https://dev.to/moay/laravel-inertiajs-running-ssr-on-a-different-port-than-13714-hnj.

即使在两个端口设置config/inertia.phpssr.js,请记住,SSR 服务器的端口在运行时已烘焙到构建中npm run build。因此,只要您不重新创建生产版本,仅在运行时设置端口就不会更改服务器运行的实际端口。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel + Inertia SSR 如何更改默认端口?错误:监听 EADDRINUSE:地址已在使用中 :::13714 的相关文章

随机推荐