diff --git a/nest-front/Dockerfile b/nest-front/Dockerfile index 202c534..58348d6 100644 --- a/nest-front/Dockerfile +++ b/nest-front/Dockerfile @@ -6,13 +6,25 @@ COPY package.json package-lock.json ./ RUN npm ci COPY . . + +# VITE_API_URL is baked into the JS bundle at build time. +# Default to /api so the nginx proxy is used when not overridden. +ARG VITE_API_URL=/api +ENV VITE_API_URL=$VITE_API_URL + RUN npm run build FROM nginx:alpine COPY --from=build /app/dist /usr/share/nginx/html -COPY nginx.conf /etc/nginx/conf.d/default.conf +COPY nginx.conf /etc/nginx/nginx.conf.template EXPOSE 5173 -CMD ["nginx", "-g", "daemon off;"] +# API_URL is the backend's public base URL used by nginx proxy_pass. +# Set this at runtime in Coolify, e.g. API_URL=https://api.crowmate.fr +ENV API_URL=http://localhost:3000 + +# Substitute ${API_URL} in the nginx template at container start, then launch nginx. +# The quoted variable list prevents envsubst from replacing nginx variables like $host. +CMD ["/bin/sh", "-c", "envsubst '${API_URL}' < /etc/nginx/nginx.conf.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"] diff --git a/nest-front/nginx.conf b/nest-front/nginx.conf index 36fb97e..3af20f7 100644 --- a/nest-front/nginx.conf +++ b/nest-front/nginx.conf @@ -3,6 +3,13 @@ server { root /usr/share/nginx/html; index index.html; + location /api/ { + proxy_pass ${API_URL}/api/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } + location / { try_files $uri $uri/ /index.html; } diff --git a/nest-front/src/utils/api.ts b/nest-front/src/utils/api.ts new file mode 100644 index 0000000..7d6b3dc --- /dev/null +++ b/nest-front/src/utils/api.ts @@ -0,0 +1,4 @@ +// API base URL. +// - In Docker (Coolify): nginx proxies /api/* to the backend, so we use a relative path. +// - Set VITE_API_URL at build time to call the backend directly (e.g. during local dev without nginx). +export const API_BASE = import.meta.env.VITE_API_URL ?? '/api'