Bonjour !
J’essaye depuis ce matin de dockeriser un projet composé de plusieurs API et de projets VueJS.
Voici le Dockerfile de mon projet Vue :
FROM node:lts-alpine as build
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
RUN npm run build
FROM nginx:latest
COPY --from=build /app/dist /usr/share/nginx/html
EXPOSE 80
Ainsi que mon Docker Compose :
version: "3.9"
services:
my-app:
build:
context: ./applications/my-app
dockerfile: Dockerfile
volumes:
- type: volume
target: /app/node_modules
ports:
- 8080:80
reverse-proxy:
build:
context: ./reverse-proxy
dockerfile: Dockerfile
ports:
- 80:80
Ici, le Dockerfile du Reverse Proxy :
FROM nginx:latest
COPY ./conf/dev.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
Et enfin, le fichier /conf.dev.conf
server {
listen 80;
location /app/a/ {
proxy_pass http://my-app/;
}
}
Ici, tout fonctionne bien. J’arrive à accéder à mon application en me rendant sur "http://localhost/app/a".
Je peux même naviguer dans l’application. Cependant, si, en naviguant, j’arrive par exemple sur la page "http://localhost/app/a/ma-super-page", et que je rafraichis la page, je tombe sur une 404 de NGINX.
Et si je me rend directement dans cette URL, idem. Seul l’accueil fonctionne.
J’ai cru voir que si je vais sur la page "ma-super-page", il essaye de trouver un fichier du même nom dans le dossier "html" de nginx. Forcément, on arrive sur une 404 car il n’y à pas un fichier par page, mais un seul fichier index.html.
Ma question : Comment faire pour que même en rafraichissant, cela fonctionne ?
Je ne trouve aucune info sur le sujet, et sur tout ce que je tombe, ils utilisent "location /" et pas "location /subdir/".
L’objectif, c’est que chaque app soit hébergés sur le même serveur avec Docker.
Merci !