在一个应用程序中部署两台Express服务器

时间:2019-12-24 12:13:49

标签: node.js express heroku google-cloud-platform serversocket

我在一个Node.JS应用程序中打开了两个快递服务器。

用例是打开2个单独的套接字以运行2个同时服务。

问题是Google Cloud或Heroku无法提供对多个端口的访问->没有单独的端口=没有单独的套接字。

有没有办法在任何云服务(如Google Cloud / AWS / Heroku)中的单个部署中打开2个服务器端口(以获得两个单独的套接字)?

还是有其他解决方法?

1 个答案:

答案 0 :(得分:0)

有可能。在典型的MERN堆栈中,我使用concurrently在不同端口和相同部署上并行运行React.js应用程序和Express.js应用程序。在这种情况下可以使用类似的设置。

以下示例已使用Google Cloud Platform的App Engine (Flexible environment)

进行了测试。

假设您的项目结构如下:

~/project
|- Dockerfile
|- app.yaml
| 
|- service1
|| - index.js
|| - package.json
|| ...
|
|- service2
|| - index.js
|| - package.json
|| ...

假设您的快速应用程序是使用express-generator创建的,那么事实是,在创建时,两个应用程序都在同一端口上运行,如./service1/bin/www和{{1 }}:./service2/bin/www。相反,您可以使service1的bin / www保持不变,以便它继续监听var port = normalizePort(process.env.PORT || '3000');(在本例中为8080),然后编辑process.env.PORT,使其在您喜欢的任何特定端口上运行,而不是在其他端口上运行8080或3000,例如您想在端口3005上运行它。

接下来,您必须编辑service1的package.json,以便在./service2/bin/www上同时运行两个应用程序。可以这样完成:

npm start

不幸的是,默认情况下并发不打包,因此此命令可能会产生无法识别的错误。这样,您可以使用一个Dockerfile,其目的是指定运行时映像以及用于部署的构建步骤(npm安装两个应用程序,并依次安装"scripts": { "start": "concurrently \"node ./bin/www\" \"node ../service2/bin/www\"" } npm install -g concurrently

npm start

最后,提供一个FROM gcr.io/google_appengine/nodejs COPY . /app/ RUN cd ./service1 && npm install RUN cd ./service2 && npm install RUN npm install -g concurrently CMD cd ./service1 && npm start 文件,该文件将指定使用的运行时以及环境。

app.yaml