Как настроить мой django settings.py для производства с использованием postgresql

Я уже развернул свое приложение django и использую postgresql в качестве сервера, и я использовал heroku для хостинга моего приложения. Однако я не знаю, что я должен разместить на своем хосте вместо localhost.

примечание: это отлично работает, если я запускаю его локально.

DATABASES = {
 'default': {
   'ENGINE': 'django.db.backends.postgresql',
   'NAME': 'trilz',
   'USER': 'postgres',
   'PASSWORD': 'franz123',
   'HOST': 'localhost',
   'PORT': '5432',
  }
}

Вам, вероятно, следует использовать переменные среды (в предыдущей ссылке в качестве примера действительно используются базы данных. Использование жестко закодированных значений делает вас уязвимым для множества различных рисков. В руководстве по Django также представлены файлы соединений.

После того, как вы начали использовать это, вам нужно выяснить, где вы запускаете свою базу данных Postgres. localhost означает "моя машина" (т.е. та же машина, на которой запущено приложение Django). Если вы используете какую-либо базу данных как сервис, то они предоставят все необходимые переменные окружения. Если вы используете что-то вроде Heroku, они предоставят переменные окружения при запуске сервиса, которые вы, вероятно, будете использовать. Если вы используете Kubernetes/Docker, который вы сами контролируете, то вы, вероятно, будете контролировать, где запущена база данных, и вам нужно будет использовать путь к ней.

Для heroku

Я использовал https://pypi.org/project/dj-database-url/ для хобби-проекта (который больше не поддерживается, но работает, когда я использовал его в последний раз).

Моя конфигурация тогда выглядела следующим образом:

DATABASES = {"default": {"ENGINE": "django.db.backends.sqlite3", "NAME": "mydatabase"}}

if "DATABASE_URL" in os.environ:
    logger.info("Adding $DATABASE_URL to default DATABASE Django setting.")
    DATABASES["default"] = dj_database_url.config(conn_max_age=600)
    DATABASES["default"]["init_command"] = "SET sql_mode='STRICT_TRANS_TABLES'"

Это даст вам рабочую версию Sqlite3, если не добавлять URL. Вы можете использовать что-то другое, если хотите. Heroku выставляет переменную окружения под названием DATABASE_URL, которая ссылается на базу данных, настроенную в Heroku, которую вы ловите в if "DATABASE_URL" in os.environ:, а затем впоследствии используете. Это дало достаточный ответ?

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