我开发了一个 Angular 7 应用程序,现在要在 nginx 服务器上的生产服务器上部署它。由于我对前端在 nginx 服务器上的部署相对较新,因此可能会错过一些易于找到的内容。我决定使用 Docker 管理部署。
应用程序名称为 MyWalletFe
。
nginx 服务器配置文件
路径: ./conf/default.conf
server {
listen 80;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
}
Dockerfile
# build
FROM node:alpine as builder
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
RUN npm run build
# deploy
FROM nginx
EXPOSE 80
COPY ./conf/default.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /app/dist/ /usr/share/nginx/html
我将nginx配置文件复制到默认位置,并将上一阶段的npm run build
的输出复制到/usr/share/nginx/html
中。
输出结果
我总是得到默认的nginx网页:
这种情况发生的原因是/app/dist
文件夹包含一个名为应用名称MyWalletFe
的子文件夹,其中包含了Angular应用程序的所有文件(该图片是在本地运行npm run build
后展示文件夹结构所拍摄的):
而在生产服务器中,/usr/share/nginx/html
文件夹仍然存在默认的index.html
文件及其服务于此页面。
root@3b7da83d2bca:/usr/share/nginx/html# ls -l
total 12
-rw-r--r-- 1 root root 494 Mar 3 14:32 50x.html
drwxr-xr-x 2 root root 4096 Apr 13 20:32 MyWalletFE
-rw-r--r-- 1 root root 612 Mar 3 14:32 index.html
我认为,为了使这个工作正常,
MyWalletFe
文件夹的内容应该被复制到父文件夹(/usr/share/nginx/html
)中;在这种情况下,default.conf
或Dockerfile
可能存在一些错误。是否有一些配置错误?在资源部分,我添加了我所遵循的文章。
/usr/share/nginx/html/
目录下的默认文件上了。为什么我要以那种方式修改nginx配置呢? - A. Wolf