Назад | Перейти на главную страницу

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

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

Зафиксируйте новый код Angular. Создайте приложение для просмотра в реальном времени для тестирования. Ручное развертывание в производственной среде. Мне удалось успешно создать приложение в конвейере с использованием файла докера и иметь правильную конфигурацию 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

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;
  }
}

Проблема с портами. Контейнер Docker не может запускаться на порту 80, потому что этот порт используется nginx. У вас есть два способа решить эту проблему

1) выставить докер напрямую. Если это только одно приложение на сервере, остановите привязку nginx и докера на порту 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;
  }
}