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