Gitlab CI 不会将 Angular 应用程序提供给暂存环境

Gitlab CI 不会将 Angular 应用程序提供给暂存环境

我正在尝试设置执行以下操作的管道:

提交新的 Angular 代码 构建实时审核应用程序进行测试 手动推送到生产环境 我已经能够使用 docker 文件在管道内成功构建应用程序,并拥有正确的 nginx 配置以将其路由到暂存环境。作业通过后,暂存环境会更新,但没有任何运行,并且提供的链接会显示“默认后端 - 404”错误消息。我将不胜感激任何有关如何让此链接正确服务实时 Angular 应用程序的指导。提前致谢。

Dockerfile:

  # Stage 0, "build-stage", based on Node.js, to build and compile the frontend
  FROM tiangolo/node-frontend:10 as build-stage

  WORKDIR /app

  COPY package*.json /app/

  RUN npm install

  COPY ./ /app/

  ARG configuration=production

  RUN cd /app && npm run build --prod --configuration $configuration


  # Stage 1, based on Nginx, to have only the compiled app, ready for production with Nginx
  FROM nginx:alpine

  RUN rm -rf /usr/share/nginx/html/*

  COPY --from=build-stage /app/dist /usr/share/nginx/html

  COPY /nginx-custom.conf /etc/nginx/conf.d/default.conf

  RUN cat /etc/nginx/conf.d/default.conf

Gitlab-ci.yml 部署

deploy_stage:
  stage: deploy
  image: docker:stable-git
  services:
    - docker:stable-dind
  script:
    - docker build -t my-angular-project:prod .
    - docker run -d -p 80:80 my-angular-project:prod
  environment:
    name: staging
    url: http://$CI_PROJECT_PATH_SLUG-staging.$AUTO_DEVOPS_DOMAIN
  only:
    refs:
      - master
    kubernetes: active
    variables:
      - $STAGING_ENABLED

NGINX 配置

server {
  listen 80;
  location / {
    root /usr/share/nginx/html;
    index index.html index.htm;
    try_files $uri $uri/ /index.html;
  }
}

答案1

端口有问题。Docker 容器无法在端口 80 上启动,因为该端口被 nginx 使用。有两种方法可以解决此问题

1)直接公开docker如果服务器上只有一个应用程序,请停止nginx和docker绑定在端口80上并提供文件

2)使用 Nginx 作为代理,将 docker 暴露在 80 以外的端口上,例如

- docker run -d -p 8080:80 my-angular-project:prod

并使用 nginx 作为此端口的代理

server {
  listen 80;
  location / {
    proxy_pass      http://127.0.0.1:8080;
  }
}

相关内容