Мое приложение 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
}
},
Я использую облачный литейный завод. По мере того, как в мое приложение добавляются такие службы, как база данных, в ENV добавляется новая пара ключ-значение с именем VCAP_SERVICES с предопределенной структурой, специфичной для службы (я знал бы, как получить доступ к каждому значению заранее, например, process.env["VCAP_SERVICES"] [DatabaseServices][0][DB_User]. См. docs.cloudfoundry.org/devguide/deploy-apps/…
Возможно, вы получаете переменную env VCPA_SERVICES в виде строки. Вы можете попытаться проанализировать эту строку как JSON, чтобы получить свой «clientId», как и вы. Например JSON.parse(process.env["VCAP_SERVICES"])["clientId"]
Действительно, после создания образа докера можно установить переменные среды. Моя проблема заключалась в том, что я пытался проанализировать process.env.VCAP_SERVICES (вместо process.env["VCAP_SERVICES"]), что привело к неопределенному значению.
Какой сервис PaaS вы используете? Имена ваших env vars динамически генерируются при каждом развертывании на этой платформе?