File tree Expand file tree Collapse file tree 3 files changed +88
-21
lines changed
Expand file tree Collapse file tree 3 files changed +88
-21
lines changed Original file line number Diff line number Diff line change 1- FROM node:20-alpine AS dependencies-env
1+ # 建置階段
2+ FROM node:20-alpine AS build
23RUN npm i -g pnpm
3- COPY . /app
4-
5- FROM dependencies-env AS development-dependencies-env
6- COPY ./package.json pnpm-lock.yaml /app/
74WORKDIR /app
5+ COPY package.json pnpm-lock.yaml ./
86RUN pnpm i --frozen-lockfile
9-
10- FROM dependencies-env AS production-dependencies-env
11- COPY ./package.json pnpm-lock.yaml /app/
12- WORKDIR /app
13- RUN pnpm i --prod --frozen-lockfile
14-
15- FROM dependencies-env AS build-env
16- COPY ./package.json pnpm-lock.yaml /app/
17- COPY --from=development-dependencies-env /app/node_modules /app/node_modules
18- WORKDIR /app
7+ COPY . .
8+ # 設定建置時的環境變數
9+ ARG VITE_APP_API_URL
10+ ARG VITE_APP_API_PATH
11+ ENV VITE_APP_API_URL=${VITE_APP_API_URL}
12+ ENV VITE_APP_API_PATH=${VITE_APP_API_PATH}
1913RUN pnpm build
2014
21- FROM dependencies-env
22- COPY ./package.json pnpm-lock.yaml /app/
23- COPY --from=production-dependencies-env /app/node_modules /app/node_modules
24- COPY --from=build-env /app/build /app/build
25- WORKDIR /app
26- CMD ["pnpm" , "start" ]
15+ # 運行階段
16+ FROM nginx:alpine
17+ # 複製檔案
18+ COPY --from=build /app/build/client /usr/share/nginx/html/
19+ # 複製 nginx 配置模板
20+ COPY nginx.conf /etc/nginx/templates/default.conf.template
21+ # 設定運行時的環境變數
22+ ENV VITE_APP_API_URL=${VITE_APP_API_URL}
23+ ENV VITE_APP_API_PATH=${VITE_APP_API_PATH}
24+ # 使用 envsubst 來替換環境變數
25+ CMD ["/bin/sh" , "-c" , "envsubst '${VITE_APP_API_URL} ${VITE_APP_API_PATH}' < /etc/nginx/templates/default.conf.template > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'" ]
Original file line number Diff line number Diff line change 1+ FROM node:20-alpine AS dependencies-env
2+ RUN npm i -g pnpm
3+ COPY . /app
4+ FROM dependencies-env AS development-dependencies-env
5+ COPY ./package.json pnpm-lock.yaml /app/
6+ WORKDIR /app
7+ RUN pnpm i --frozen-lockfile
8+ FROM dependencies-env AS production-dependencies-env
9+ COPY ./package.json pnpm-lock.yaml /app/
10+ WORKDIR /app
11+ RUN pnpm i --prod --frozen-lockfile
12+ FROM dependencies-env AS build-env
13+ COPY ./package.json pnpm-lock.yaml /app/
14+ COPY --from=development-dependencies-env /app/node_modules /app/node_modules
15+ WORKDIR /app
16+ RUN pnpm build
17+
18+ FROM dependencies-env
19+ COPY ./package.json pnpm-lock.yaml /app/
20+ COPY --from=production-dependencies-env /app/node_modules /app/node_modules
21+ COPY --from=build-env /app/build /app/build
22+ WORKDIR /app
23+ CMD ["pnpm", "start"]
Original file line number Diff line number Diff line change 1+ server {
2+ listen 8080 ;
3+ include /etc/nginx/mime.types ;
4+
5+ root /usr/share/nginx/html;
6+ index index .html;
7+
8+ # API Proxy 設定
9+ location /v2/ {
10+ proxy_pass ${ VITE_APP_API_URL} ;
11+
12+ # SSL 設定
13+ proxy_ssl_server_name on;
14+ proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
15+
16+ # 基本代理設定
17+ proxy_http_version 1.1;
18+ proxy_set_header Host $proxy_host ;
19+ proxy_set_header X-Real-IP $remote_addr ;
20+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ;
21+ proxy_set_header X-Forwarded-Proto $scheme ;
22+
23+ # API 路徑重寫
24+ rewrite ^/v2/api/${ VITE_APP_API_PATH} /( .*) /api/${ VITE_APP_API_PATH} /$1 break ;
25+ }
26+
27+ # 其他路由設定保持不變
28+ location /react-main-2024 -w2 {
29+ alias /usr/share/nginx/html;
30+ try_files $uri $uri / /index .html;
31+
32+ location ~ \.js$ {
33+ add_header Content-Type "application/javascript" ;
34+ }
35+ }
36+
37+ location /react-main-2024 -w2/assets/ {
38+ alias /usr/share/nginx/html/assets/;
39+ add_header Cache-Control "public, max-age=31536000, immutable" ;
40+ }
41+
42+ location = / {
43+ return 301 /react-main-2024 -w2/;
44+ }
45+ }
You can’t perform that action at this time.
0 commit comments