Как настроить серверный сервер Prefect для указания на Postgres

#docker #configure #prefect

#docker #настройка #префект

Вопрос:

Возникли трудности с настройкой Prefect для локального запуска. Устанавливается через pip3, зависит от docker (уже установленного) и docker-compose, установлен, протестирован. работает.
У меня уже есть работающий сервер Postgres, я хотел бы настроить его на использование. Но похоже, что он используется и в docker? Любая помощь приветствуется.

При запуске:

 prefect backend server 
prefect server start
  

невозможно найти изображение ‘docker / compose: 1.27.4’ локально

1.27.4: извлечение из docker / compose (загружает и запускает docker)

Статус: Загружено новое изображение для docker / compose: 1.27.4
ПРЕДУПРЕЖДЕНИЕ: переменная PREFECT_SERVER_DB_CMD не установлена. По умолчанию пустая строка
ПРЕДУПРЕЖДЕНИЕ: переменная DB_CONNECTION_URL не установлена. По умолчанию пустая строка
ПРЕДУПРЕЖДЕНИЕ: переменная POSTGRES_DB не установлена. По умолчанию отображается пустое
ПРЕДУПРЕЖДЕНИЕ: переменная POSTGRES_PASSWORD не установлена. По умолчанию используется пустая строка>
ПРЕДУПРЕЖДЕНИЕ: переменная POSTGRES_USER не установлена. По умолчанию используется пустая строка.

Ответ №1:

Если вы обратитесь к документации prefect server start , вы должны найти всю необходимую информацию:

 prefect server start --help

... 
      --use-volume                Enable the use of a volume for the Postgres service
      --volume-path       TEXT    A path to use for the Postgres volume, defaults to
                                  '~/.prefect/pg_data'
  

Комментарии:

1. Спасибо, однако проблема заключается в переменных среды, которые правильно передаются дочерней задаче, но docker-compose up их не распознает.

Ответ №2:

Проблема, с которой я столкнулся, связана с тем, как запускается подпроцесс в Python, Popen( docker-compose up, env = env) (Текущие) переменные среды передаются при выполнении этой команды, но каким-то образом недоступны в дочерней задаче.

 docker-compose up
  

Я скорректировал server.py кодируйте и создавайте .env файл «на лету». Для тестирования и docker-compose находит и использует его.

Реальная проблема заключается в среде терминала bash / sh, и именно здесь мне нужно присмотреться.

Ответ №3:

Теперь Prefect позволяет вам делать это напрямую, не запуская пользовательские скрипты «на лету».

Вам просто нужно указать --external-postgres флаг.

 prefect server start --postgres-url postgres://<username>:<password>@hostname:<port>/<dbname>
  

ИЛИ вы также можете добавить его в .prefect/config.toml :

 [server.database]
connection_url = "postgres://<username>:<password>@hostname:<port>/<dbname> "