Node.js 在NGNIX中托管expressjsapi
我正在努力使用DockerFile在NGINX上托管我的ExpressJSAPI 这是我的文件Node.js 在NGNIX中托管expressjsapi,node.js,docker,express,nginx,Node.js,Docker,Express,Nginx,我正在努力使用DockerFile在NGINX上托管我的ExpressJSAPI 这是我的文件 FROM node:13.2.0-alpine as build WORKDIR /app ENV PATH /app/node_modules/.bin:$PATH ENV NODE_ENV = production COPY package*.json ./ RUN npm install COPY ./bin ./bin COPY ./src ./src COPY ./index.js
FROM node:13.2.0-alpine as build
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
ENV NODE_ENV = production
COPY package*.json ./
RUN npm install
COPY ./bin ./bin
COPY ./src ./src
COPY ./index.js .
#production environment
FROM node:13.2.0-alpine as production
RUN rm /etc/nginx/conf.d/nginx.conf
COPY nginx/nginx.conf /etc/nginx/conf.d
EXPOSE 443
CMD ["nginx", "-g", "daemon off;"]
这将部署容器,但我可以ping它,因为应用程序尚未启动。目前,它可以在没有web服务器的情况下使用此命令CMD[“npm”,“start”]
如何同时启动nginx服务器和节点服务
这是我的节点:
"scripts": {
"dev": "nodemon --exec babel-node ./bin/www",
"start": "node ./bin/www"
},
ngnix配置:
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
gzip on;
server {
listen 80;
location / {
proxy_pass http://localhost:3000/;
}
}
}
您可以创建一个文件,例如
start\u services.sh
,并使用dockerCDM
执行它。文件内容示例:
#/bin/bash
cd你的目录
nginx&npm运行启动
在这种情况下,两个服务将从一个docker容器启动并运行。您试图做的事情与集装箱化的想法背道而驰。如果确实希望在单个容器中同时运行
express
(api)和nginx
(代理),可以尝试创建bash脚本,该脚本将同时运行这两个脚本,并将其作为Dockerfile
中的入口点。(见安德烈的回答)
然而,这不是我建议你做的。相反,最好在单独的容器中运行它们(例如通过docker compose
在本地测试),并允许它们通过网络进行通信。这将要求您将Dockerfile
拆分为两个单独的配置
原料药
代理
这样,您可以将它们作为两个容器运行,其中nginx
将公开端口80和express
公开端口3000。更好的解决方案是创建docker compose
配置并自动执行大量代码(您不需要创建单独的nginx docker映像,只需使用带有已装入卷的标准映像即可)。关于如何操作,请参阅,这通常是通过两个单独的容器完成的。
FROM node:13.2.0-alpine
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
ENV NODE_ENV = production
COPY package*.json ./
RUN npm install
COPY ./bin ./bin
COPY ./src ./src
COPY ./index.js .
CMD ["npm", "start"]
FROM nginx
RUN rm /etc/nginx/conf.d/nginx.conf
COPY nginx/nginx.conf /etc/nginx/conf.d