Gitlab CI не будет использовать приложение Angular для промежуточной среды

Я пытаюсь настроить конвейер, который делает следующее:

Зафиксируйте новый код Angular. Создайте приложение для рецензирования в режиме реального времени для тестирования. Ручной запуск в производство. Мне удалось успешно создать приложение в конвейере с помощью файла Docker и иметь правильную конфигурацию nginx для маршрутизации в промежуточную среду. После выполнения задания промежуточная среда обновляется, но ничего не происходит, и предоставленная ссылка выдает сообщение об ошибке "backend по умолчанию - 404". Буду признателен за любые рекомендации о том, как получить эту ссылку, чтобы правильно обслуживать живое угловое приложение. Заранее спасибо.

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

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 в качестве прокси-сервера для выставления прокси на другом порту, например, на 80

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

и использовать nginx в качестве прокси для этого порта

server {
  listen 80;
  location / {
    proxy_pass      http://127.0.0.1:8080;
  }
}
Другие вопросы по тегам