Nuxt3: как установить переменные среды выполнения после сборки докера через process.env

Мое приложение nuxt3 отлично работает, если я создаю и запускаю его локально с помощью docker-compose и переменных среды.

Но когда я отправляю созданный образ докера в свою удаленную производственную среду, я не могу применить переменные производственной среды в runtimeConfig. Вероятно, потому, что process.env["SECRET_KEY"] заменяется "настоящим секретным ключом" на этапе сборки.

Если я назову переменные среды NUXT_PUBLIC_XXXX / NUXT_XXXX, я смогу обновить runtimeConfig даже после создания образа.

Но поскольку я использую сервис PaaS для своего производственного развертывания, я не могу контролировать имена переменных. Поэтому я не могу динамически предоставить правильную конфигурацию времени выполнения для моей удаленной среды -> я всегда получаю локальные значения, которые были установлены на этапе сборки на моем локальном компьютере. (см. clientID в примере ниже)

Есть ли способ установить конфигурацию времени выполнения через process.env["custom env name"] даже после того, как образ был создан? Или у вас есть другая идея, как динамически предоставлять конфигурацию времени выполнения? (Я хотел бы избежать создания отдельных контейнеров для каждой среды

Большое спасибо за ваш вклад. Любая помощь высоко ценится!

#nuxt.config.ts
...
runtimeConfig: {

#in production ENVs are accessible under the key "VCAP_SERVICES", if key is not present the local development env is applied
clientId: process.env["VCAP_SERVICES"] ? process.env["VCAP_SERVICES"]["clientId"] : process.env["UAA_CLIENT_ID"],
secretKey: process.env["NUXT_SECRET_KEY"]

  public: {
    backendApi: 'http://127.0.0.1:5000',  // will be overridden by NUXT_PUBLIC_BACKEND_API environment variable
    environment: "production", // will be overridden by NUXT_PUBLIC_ENVIRONMENT environment variable
        }
    },

Какой сервис PaaS вы используете? Имена ваших env vars динамически генерируются при каждом развертывании на этой платформе?

Gigs 02.02.2023 14:46

Я использую облачный литейный завод. По мере того, как в мое приложение добавляются такие службы, как база данных, в ENV добавляется новая пара ключ-значение с именем VCAP_SERVICES с предопределенной структурой, специфичной для службы (я знал бы, как получить доступ к каждому значению заранее, например, process.env["VCAP_SERVICES"] [DatabaseServices][0][DB_User]. См. docs.cloudfoundry.org/devguide/deploy-apps/…

Simon 02.02.2023 15:56

Возможно, вы получаете переменную env VCPA_SERVICES в виде строки. Вы можете попытаться проанализировать эту строку как JSON, чтобы получить свой «clientId», как и вы. Например JSON.parse(process.env["VCAP_SERVICES"])["clientId"]

Gigs 03.02.2023 11:36
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
81
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Действительно, после создания образа докера можно установить переменные среды. Моя проблема заключалась в том, что я пытался проанализировать process.env.VCAP_SERVICES (вместо process.env["VCAP_SERVICES"]), что привело к неопределенному значению.

Другие вопросы по теме

Почему обратный прокси-сервер Nginx на WSL2 не видит приложение Rails в контейнере Docker с использованием имени хоста?
Как я могу использовать pg_dump в Kubernetes для создания дампа из удаленного PostgreSQL (PGAAS)?
MongoError: сбой аутентификации с помощью docker-compose
Как добавить монтирование тома докера в PyCharm на Mac — отсутствуют «Настройки контейнера Docker»
Сбой восстановления/сборки dotnet в Linux с ошибкой MSB3202, файл проекта «PARENT_DIR/YYY.proj» не найден [PARENT_DIR/YYY.sln]
Кэширование образов Lambda Docker из стека CDK в конвейере
Docker PHP - установка PECL не может определить тип системы при использовании heredoc и bash, но работает с набором оболочек с помощью команды SHELL
Mkdir: невозможно создать каталог «cpuset»: файловая система только для чтения при запуске «сервисного запуска докера» в Dockerfile
Dockerfile с HEREDOC, работающим в bash
Как запустить uvicorn в док-контейнере, который предоставляет доступ к порту?