У меня 2 внешних приложения, оба обслуживаются Nginx в порту 80
app-login
app-contacts
I Я пытаюсь настроить Traefik с помощью Docker Compose, чтобы добиться этого:
- Оба приложения обслуживаются на одном хосте (например, ab c .com или localhost: 4000)
app-login
будет доступен с localhost: 4000 / login (или ab c .com / login) app-contacts
будет доступен с localhost: 4000 / contacts (или ab c. com / contacts)
Но проблема в том, что он не работает с тем, что я делал до сих пор.
Ниже приведены 2 Dockerfile
из 2 приложений и docker-compose.yml
app-login
Dockerfile:
# build stage
FROM node:lts-alpine as build-stage
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
app-contacts
Dockerfile: (немного сложнее, но похоже на приложение для входа в систему)
### STAGE 1: Build the AngularJS app ###
FROM node:lts-alpine as build-stage
RUN apk --no-cache add git
WORKDIR /app
COPY package.json /app/
RUN npm install
COPY . .
# Production mode build
RUN npm run build:prod
### STAGE 2: Add Nginx for hosting the AngularJS app ###
FROM nginx:stable-alpine as production-stage
# Removes the default nginx html files
RUN rm -rf /usr/share/nginx/html/*
# Copy the bundle
COPY --from=build-stage /app/dist /usr/share/nginx/html
# Copy the default nginx.conf
COPY --from=build-stage /app/nginx.conf /etc/nginx/conf.d/default.conf
VOLUME ["/usr/share/nginx/html/env"]
EXPOSE 80
# Copy .env file and shell script to container
WORKDIR /usr/share/nginx/html
COPY ./scripts/generate_env.sh .
COPY .env .
# Add bash
RUN apk add --no-cache bash
# Make our shell script executable
RUN chmod +x generate_env.sh
# Start Nginx server
CMD ["/bin/bash", "-c", "/usr/share/nginx/html/generate_env.sh && nginx -g \"daemon off;\""]
docker-compose.yml
version: '3'
services:
reverse-proxy:
# The official v2 Traefik docker image
image: traefik:v2.2
# Enables the web UI and tells Traefik to listen to docker
command: --api.insecure=true --providers.docker
ports:
# The HTTP port
- "80:80"
# The Web UI (enabled by --api.insecure=true)
- "8080:8080"
volumes:
# So that Traefik can listen to the Docker events
- /var/run/docker.sock:/var/run/docker.sock
app-login:
image: app-login
labels:
- "traefik.http.routers.app-login.rule=Path(/login)"
app-contacts:
image: app-contacts
labels:
- "traefik.http.routers.app-contacts.rule==Path(/contacts)"
Не уверен, где я ошибся.
Я искал в Google и где-то вижу, что люди используют https://www.getambassador.io/ с этим стеком, но я не Я тоже не знаю, как его настроить.
Спасибо.