Node.js 如何使用Docker构建和运行生产NodeJS express服务器
我有一个用Node.js 如何使用Docker构建和运行生产NodeJS express服务器,node.js,docker,express,Node.js,Docker,Express,我有一个用expressnodejs框架编写的服务器。目前它有一个app.js,如下所示: // app.js const express = require('express'); const connectDB = require('./config/db'); var cors = require('cors'); // routes const books = require('./routes/api/books'); const app = express(); // Con
express
nodejs框架编写的服务器。目前它有一个app.js
,如下所示:
// app.js
const express = require('express');
const connectDB = require('./config/db');
var cors = require('cors');
// routes
const books = require('./routes/api/books');
const app = express();
// Connect Database
connectDB();
// cors
app.use(cors({ origin: true, credentials: true }));
// Init Middleware
app.use(express.json({ extended: false }));
app.get('/', (req, res) => res.send('Hello world!'));
app.get('/health-check',(req,res)=> {
res.send ("OK");
});
// use Routes
app.use('/api/books', books);
// const port = process.env.PORT || 8080;
const port = 8080;
app.listen(port, () => console.log(`Server running on port ${port}`));
我使用以下命令运行上述服务器:
npm run app
我如何使其成为生产级构建并运行它
我可以用下面的Dockerfile
来做吗
FROM node:13.12.0-alpine as build
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . ./
RUN npm run build
# production env
FROM nginx:stable-alpine
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 8080
CMD ["nginx", "-g", "daemon off;"]
你错过了一些东西。您的node/express在8080上运行,您将文件放在nginx(/usr/share/nginx/html)中,并在端口80上公开它们。您需要连接这两个端口。我要做的是创建一个只包含Node/Express应用程序的容器。然后是一个docker容器(在docker compose中)将端口(8080)发布到其他端口(8090?)。我将Nginx保留在主机上,并使用Nginx作为代理(将8090映射到子域)。这意味着我们不能像为
reatjs
应用程序那样构建express
应用程序?不,你不能。React应用程序(在构建之后)只是一个静态网站。(除非像NextJS这样的服务器端渲染)。Express应用程序是一个动态的NodeJS环境。