Как передать переменные окружения, на которых работает сервер Prisma, в один док-контейнер
Пример docker-compose.yml, содержащийся в документации, отлично подходит для локальной разработки, где люди, вероятно, запускают несколько служб с помощью docker:
version: '3'
services:
prisma:
image: prismagraphql/prisma:__LATEST_PRISMA_VERSION__
restart: always
ports:
- "4466:4466"
environment:
PRISMA_CONFIG: |
managementApiSecret: __YOUR_MANAGEMENT_API_SECRET__
port: __YOUR_PRISMA_SERVER_PORT__
databases:
default:
connector: __YOUR_DATABASE_CONNECTOR__
migrations: __ENABLE_DB_MIGRATIONS__
host: __YOUR_DATABASE_HOST__
port: __YOUR_DATABASE_PORT__
user: __YOUR_DATABASE_USER__
password: __YOUR_DATABASE_PASSWORD__
mongo:
image: mongo:__LATEST_PRISMA_VERSION__
restart: always
ports:
- "27017:27017"
volumes:
- mongo:/var/lib/mongo
Тем не менее, в производстве нет БД в контейнере. На самом деле мы используем DBaaS для размещения нашей базы данных. БД, которую мы используем, это Монго.
Таким образом, мы должны перейти от docker-compose up
в docker run...
для сервера Prisma.
Проблема, с которой мы сталкиваемся, заключается в том, как установить все переменные среды, необходимые для запуска контейнера Prisma.
Я вижу два возможных варианта:
- Передайте отдельные переменные в контейнер
- Передайте только переменную
PRISMA_CONFIG_PATH
который указывает на файл конфигурации yml, например,prisma_config.yml
Опция 1
В docker-compose.yml есть PRISMA_CONFIG
переменная передается как многострочная строка.
Выполняя поиск в Интернете, я обнаружил, что соответствующий список отдельных переменных должен быть:
PORT: $PORT
SCHEMA_MANAGER_SECRET: $SCHEMA_MANAGER_SECRET
SCHEMA_MANAGER_ENDPOINT: $SCHEMA_MANAGER_ENDPOINT
SQL_CLIENT_HOST_CLIENT1: $SQL_CLIENT_HOST
SQL_CLIENT_HOST_READONLY_CLIENT1: $SQL_CLIENT_HOST
SQL_CLIENT_HOST: $SQL_CLIENT_HOST
SQL_CLIENT_PORT: $SQL_CLIENT_PORT
SQL_CLIENT_USER: $SQL_CLIENT_USER
SQL_CLIENT_PASSWORD: $SQL_CLIENT_PASSWORD
SQL_CLIENT_CONNECTION_LIMIT: 10
SQL_INTERNAL_HOST: $SQL_INTERNAL_HOST
SQL_INTERNAL_PORT: $SQL_INTERNAL_PORT
SQL_INTERNAL_USER: $SQL_INTERNAL_USER
SQL_INTERNAL_PASSWORD: $SQL_INTERNAL_PASSWORD
SQL_INTERNAL_DATABASE: $SQL_INTERNAL_DATABASE
CLUSTER_ADDRESS: $CLUSTER_ADDRESS
SQL_INTERNAL_CONNECTION_LIMIT: 10
CLUSTER_PUBLIC_KEY: $CLUSTER_PUBLIC_KEY
BUGSNAG_API_KEY: ""
ENABLE_METRICS: "0"
JAVA_OPTS: "-Xmx1G"
докер
Все эти переменные установлены в файле env
docker run -p 4466:4466 --env-file prisma.env prismagraphql/prisma:1.25
Кажется, они отлично работают для баз данных SQL, но не для Mongo.
Либо я устанавливаю неправильные значения, либо имена переменных при использовании Mongo отличаются.
Вариант 2
Передача одного env var, как PRISMA_CONFIG_PATH=prisma.config.yml
при запуске контейнера:
docker run -p 4466:4466 -e PRISMA_CONFIG_PATH=prisma.config.yml prismagraphql/prisma:1.25
Я получаю следующую ошибкуException in thread "main" java.lang.RuntimeException: Unable to load Prisma config: java.io.FileNotFoundException: prisma_config.yml (No such file or directory)
Я не знаю, каков рабочий каталог для образа prisma docker. Я думаю, это решило бы это.
РЕДАКТИРОВАТЬ
Я смог заставить его работать с Вариантом № 2
docker run \
-e PRISMA_CONFIG_PATH="/prisma.yml" \
-v "$(pwd)/env/prisma_config.yml":"/prisma.yml" \" \
-p 4466:4466 \
prismagraphql/prisma:1.25
prisma_config.yml
port: 4466
databases:
default:
connector: mongo
uri: __YOUR_MONGO_URI__
database: __YOUR_MONGO_DB__