Исключение при локальном запуске докеризованного проекта 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 и выбор метода авторизации (логин пользователя, учетная запись сервиса и т.д.).

Начните здесь и настройте свое окружение:

Установите gcloud CLI

Вернуться на верх