reactjs - Vite React აპლიკაციის გაშვებისას Dockerfile-ის გამოყენებით გარემოს ცვლადებზე წვდომა


მაქვს Vite React აპლიკაცია, რომელიც იყენებს env ცვლილებებს API-სთან კომუნიკაციისთვის:

const API_URL = import.meta.env.VITE_API_URL;

მე ვაქვეყნებ ამ აპლიკაციას Fly.io-ზე შემდეგი Dockerfile-ის გამოყენებით:

FROM node:18 as build

WORKDIR /web

COPY package*.json ./

RUN npm install

COPY . .

RUN npm run build

FROM nginx:alpine

COPY --from=build /web/dist /usr/share/nginx/html

This needs be referenced in fly.toml's internal_port
EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

მე მაქვს VITE_API_URL კონფიგურირებული ჩემს Fly.io კონტეინერის გარემოში და შევამოწმე, რომ იგი არსებობს.

თუმცა, როდესაც მე ვდებთ აპლიკაციას, API_URL საბოლოოდ ხდება undefined. მგონი ეს უკავშირდება იმას, რომ nginx-ს არ აქვს მის წვდომას.

მე ვიყენებდი ამ სხვა Dockerfile-ს განვითარებისას:

FROM node:18

WORKDIR /web

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 5173

CMD ["npm", "run", "dev"]

და ამას ჰქონდა წვდომა Fly.io-ის საიდუმლოებებზე/გარემო ვარიაბლებზე. მე ვვარაუდობ, რომ ამის მიზეზი არის ის, რომ მე ვაწარმოებ Vite-ის კოდს პირდაპირ npm run dev-ით. მაგრამ ახლა როცა ვაწარმოებ ნგინიქსის საშუალებით, მგონი, შეიძლება მჭირდეს რაღაც განსხვავებულის გაკეთება იმისთვის, რომ მივაწვდინო წვდომა იმავე გარემოების ვარიაბლებზე?

პასუხი #1

Vite-ს სჭირდება გარემოს ცვლადები დაშვების დროს.

თქვენ გაქვთ ორი არჩევანი...

  1. დაემატეთ .env.production ფაილი თქვენს Docker აშენებაში. მაგალითად

    .env.production
    VITE_API_URL=https://your.production.api/
    
  2. გაეცით ბილდის არგუმენტი თქვენს fly deploy ბრძანებას და გამოიყენეთ იგი გარემოს ვარიანტის დასამდგენად

    fly deploy --build-arg API_URL="https://your.production.api/"
    
    Dockerfile
    FROM node:18 as build
    WORKDIR /web
    COPY package*.json ./
    RUN npm install
    COPY . .
    
    ARG API_URL
    ENV VITE_API_URL=${API_URL}
    RUN npm run build
    

    მე ვფიქრობ, რომ თქვენ ასევე შეგიძლიათ დაყენოთ build არგუმენტები თქვენს fly.toml ფაილში [build.args] ქვეშ, თუ გნებავთ