Внедрение переменных в config.js с помощью Kubernetes - PullRequest
0 голосов
/ 14 мая 2018

У меня есть приложение ReactJS, и я развертываю его с помощью Kubernetes.

Я пытаюсь понять, как вводить переменные среды в мой файл config.js из файла развертывания Kubernetes.

У меня сейчас есть такие: config.js файл:

export const CLIENT_API_ENDPOINT = { 
    default:process.env.URL_TO_SERVICE,
};

и вот мои переменные развертывания Kubernetes:

"spec": {
  "containers": [
    {
      "name": "container_name",
      "image": "image_name",
      "env": [
        {
          "name": "URL_TO_SERVICE",
          "value": "https://www.myurl.com"
        }
      ]

В некотором смысле не понимаю, почему я не вижу переменную окружения в моем файле config.js. Любая помощь будет принята с благодарностью.

Вот мой докер-файл:

# Dockerfile (tag: v3)
FROM node:9.3.0
RUN npm install webpack -g
WORKDIR /tmp
COPY package.json /tmp/
RUN npm config set registry http://registry.npmjs.org/ && npm install
WORKDIR /usr/src/app
COPY . /usr/src/app/
RUN cp -a /tmp/node_modules /usr/src/app/
#RUN webpack
ENV NODE_ENV=production
ENV PORT=4000
#CMD [ "/usr/local/bin/node", "./index.js" ]
ENTRYPOINT npm start
EXPOSE 4000

1 Ответ

0 голосов
/ 14 мая 2018

Переменные окружения kubernetes доступны в вашем контейнере.Таким образом, вы могли бы подумать, что задание здесь - это версия получения переменных конфигурации на стороне сервера, отправленных в ваш код на стороне клиента.

Но, если ваше приложение реагирования запускается в контейнере, вы, скорее всего, запускаете конвейер сборки javascriptкогда вы создаете образ докера.Примерно так:

RUN npm run build

# Run app using nodemon
CMD [ "npm", "start" ]

Когда докер собирает ваш контейнер, переменные окружения, введенные kubernetes, еще не доступны.Они не будут существовать, пока вы не запустите встроенный контейнер в кластере.

Одно из решений, и, возможно, это ваш кратчайший путь, - прекратить сборку кода на стороне клиента в файле Docker и объединить сборку и запуск.шаги в команде запуска npm.Примерно так, если вы используете веб-пакет:

"start": "webpack -p --progress --config webpack.production.config.js && node index.js"

Если вы пойдете по этому пути, то вы можете использовать любой из хорошо документированных методов для доставки переменных среды на стороне сервера вашему клиенту на этапе сборки: Передача переменных, зависящих от среды, в веб-пакете .Существуют аналогичные методы и инструменты для всех остальных инструментов сборки javascript.

Два: если вы работаете с узлом, вы можете продолжить сборку клиентского приложения в контейнере, но попросите приложение узла записать файл config.js вфайловая система при запуске приложения узла.

Вы могли бы сделать даже более сложные вещи, такие как предоставление вашей конфигурации через API (вариант второго подхода), но это похоже на бросание хороших денег после плохих.

Интересно, нет ли более легкого пути.Если у вас есть чисто клиентское приложение, почему бы просто не развернуть его как статический сайт, скажем, в Amazon, Gcloud Bucket, Firebase или Netlify?Таким образом, вы просто запускаете процесс сборки и развертываете в правильной среде.контейнер не нужен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...