Переменные окружения позволят прописать значения, такие, как логин и пароль базы данных, секретный ключ или данные от почтового сервера, в специальном файле .env (dotenv). Таким образом можно собрать все важные данные в одном файле без необходимости прописывать их непосредственно в коде (хардкодить).

Для того чтобы всё продолжало работать локально, установим библиотеку python-dotenv, выполнив команду:

``` pip install python-dotenv

```

Не забудьте добавить установленную библиотеку в файл requirements.txt!

В корне проекта создадим файл .env и откроем файл settings.py в директории проекта.

В самом начале файла settings.py после импортов добавим вызов функции load_dotenv(). Это необходимо, чтобы данные из .env-файла подтягивались при локальном запуске. На сервере это не нужно.

``` from dotenv import load_dotenv

load_dotenv()

```

Для получения данных из переменных окружения мы воспользуемся методом .get('ключ') из функции environ() в пакете os – os.environ.get('ключ'), где ключ – это переменная в .env-файле.

Нам необходимо заменить значения следующих переменных на указанную выше строку, сделав ключом имя переменной, а её текущее содержимое прописать в .env-файле:

  • SECRET_KEY.
  • NAME.
  • USER.
  • PASSWORD.
  • HOST.
  • PORT.
  • EMAIL_HOST.
  • EMAIL_HOST_USER.
  • EMAIL_HOST_PASSWORD.

Пример замены в settings.py:

``` SECRET_KEY = os.environ.get('SECRET_KEY')

DATABASES = { "default": { "ENGINE": "django.db.backends.postgresql", "NAME": os.environ.get('DB_NAME'), "USER": os.environ.get('DB_USER'), "PASSWORD": os.environ.get('DB_PASSWORD'), "HOST": os.environ.get('DB_HOST'), "PORT": int(os.environ.get('DB_PORT')), } }

```

Обратите внимание на параметр PORT. Он приведён к типу int, поскольку по умолчанию все данные из переменных окружения – строки.

Пример .env-файла:

``` SECRET_KEY=abcde... DB_NAME=db_name DB_USER=db_user DB_PASSWORD=db_password DB_HOST=postgres DB_PORT=5432

```

Обратите внимание на формат имя_переменной=значение_переменной, без кавычек.

Кроме того, необходимо изменить параметр ALLOWED_HOSTS, прописав в него IP-адрес VPS, локальный адрес (127.0.0.1) и адрес домена, если он подключен к VPS. Должно быть примерно так:

``` ALLOWED_HOSTS = ["127.0.0.1", "pressanybutton.ru", "0.0.0.0"]

#Вместо 0.0.0.0 пропишите IP-адрес вашего VPS.

```

После того, как вынесли все важные данные из settings.py в .env, можете проверить, что всё работает как прежде, запустив проект локально.

Dockerfile. Следующим шагом будет создание Dockerfile. Это специальный файл с набором инструкции по сборке Docker-образа.

Создайте файл Dockerfile без расширения со следующим содержимым:

``` FROM python:3.11.4-buster

ENV PYTHONDONTWRITEBYTECODE=1 ENV PYTHONUNBUFFERED=1

WORKDIR /code

RUN pip install --upgrade pip COPY requirements.txt /code/ RUN pip install -r requirements.txt

COPY . /code/

EXPOSE 8000

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

```

Разберём по порядку:

  • FROM python:3.11.4-buster - В этой строке указываем на используемый при сборке базовый образ. В нашем случае это Python 3.11.4. Можно взять любую версию, включая 3.12, однако учитывайте совместимости библиотек! В нашем проекте используется Django 4.2.2, поэтому и используется Python 3.11.
repost

36

input message

напишите коммент

еще контент в этом сообществе

еще контент в этом соообществе

войдите, чтобы увидеть

и подписаться на интересных профи

в приложении больше возможностей

пока в веб-версии есть не всё — мы вовсю работаем над ней

сетка — cоциальная сеть для нетворкинга от hh.ru

пересекайтесь с теми, кто повлияет на ваш профессиональный путь