Исключение при локальном запуске докеризованного проекта Django, который размещен на облаке google cloud run
Я клонировал докеризованный проект GeoDjango и хочу запустить его локально, который размещен на google cloud run. Я также пытался запустить проект без докера, выполнив python manage.py runserver
, но все тщетно.
Это ошибка исключения, которая возникает
Exception: No local .env or GOOGLE_CLOUD_PROJECT detected. No secrets were found.
Я создал образ с помощью следующей команды:
docker build . -t your_image_name
когда я выполняю эту команду:
docker run -p 9090:8080 -e PORT=8080 my_image_name
Выдает трассировку ошибки, приведенную ниже.
Отслеживание ошибки:
мой settings.py
для получения файла .env, который находится в моем корневом каталоге:
env_file = os.path.join(BASE_DIR, ".env")
# Attempt to load the Project ID into the environment, safely failing on error.
try:
_, os.environ["GOOGLE_CLOUD_PROJECT"] = google.auth.default()
print("\n 1 Google cloud project \n")
except google.auth.exceptions.DefaultCredentialsError:
pass
if os.path.isfile(env_file):
# Use a local secret file, if provided
env.read_env(env_file)
# [START_EXCLUDE]
elif os.getenv("TRAMPOLINE_CI", None):
# Create local settings if running with CI, for unit testing
placeholder = (
f"SECRET_KEY=a\n"
"GS_BUCKET_NAME=None\n"
f"DATABASE_URL=sqlite://{os.path.join(BASE_DIR, 'db.sqlite3')}"
)
env.read_env(io.StringIO(placeholder))
# [END_EXCLUDE]
elif os.environ.get("GOOGLE_CLOUD_PROJECT", None):
# Pull secrets from Secret Manager
project_id = os.environ.get("GOOGLE_CLOUD_PROJECT")
client = sm.SecretManagerServiceClient()
settings_name = os.environ.get("SETTINGS_NAME", "django_settings")
name = f"projects/{project_id}/secrets/{settings_name}/versions/latest"
payload = client.access_secret_version(name=name).payload.data.decode("UTF-8")
env.read_env(io.StringIO(payload))
else:
raise Exception("No local .env or GOOGLE_CLOUD_PROJECT detected. No secrets found.")
Это мой самый первый опыт запуска проекта Django локально, который размещен на облаке google, запущен на удаленном сервере и также докеризован.
Строка, содержащая _, os.environ["GOOGLE_CLOUD_PROJECT"] = google.auth.default()
, объявляет, что ваше приложение предназначено для использования ADC
(Google Application Default Credentials). При запуске в Cloud Run, ADC
уже настроены для приложения.
Решением является установка облачного SDK, настройка CLI и выбор метода авторизации (логин пользователя, учетная запись сервиса и т.д.).
Начните здесь и настройте свое окружение: